自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

王温暖的博客

这货太懒了

  • 博客(656)
  • 资源 (6)
  • 收藏
  • 关注

原创 解决pycharm运行Flask指定ip、端口更改无效

flask 修改访问的ip及端口号。

2023-02-10 11:02:54 2336 1

原创 pycharm无法通过外网访问阿里云服务器中的Flask解决方案

因为默认80端口可以访问IIS默认页面,遂考虑是否因为端口号问题导致无法访问,在编译器中修改app.run中的port参数。修改host=‘0.0.0.0’,port=8000后保存运行,发现运行结果依旧是localhost:5000端口。终于在右上角项目名称的编辑配置(Edit-Configuration)中发现了问题,修改了Additional options(附加选项)的内容为。这是因为你修改的127.1.0.3本地IP不对,需要修改为你电脑的内网IP。由于我的服务器是阿里云的,所以在阿里云的。

2023-02-10 10:41:48 1712

原创 面试:Volatile保证有序和可见性原理

Volatile如何保证有序性(禁止指令重排)1、首先我们要了解计算机在执行程序时,为了提高性能,编译器和处理器一般都会对指令做重排,一般分为以下三种:单线程环境里面确保程序最终执行的结果和代码顺序执行的结果一致。处理器在进行指令重排时必须要考虑指令之间的数据依赖性。多线程环境中线程交替执行,由于编译器优化重排的存在,两个或多个线程中使用的变量能否保证一致是不能确定的,最后执行的结果也是无法预测的。2、volatile实现禁止指令重排优化,从而避免在多线程环境下程序出现乱排序执行的现象。内存屏障,

2022-12-05 15:24:59 996

原创 面试:线程池相关

会有两种情况退出线程。(一是正在getTask,二是执行完毕当前任务)1、当我们调用 shutdownNow() 方法时,如果。

2022-12-01 21:46:07 710

原创 面试:Android中的HOOK方案

Hook方案很多。

2022-12-01 20:04:34 1480

原创 面试:Android页面改色方案

先定义一个GrayFrameLayout布局}}@Override}@Override}}@Override//方案二i++) {}}}}}方案三。

2022-12-01 20:03:36 1674

原创 面试:换肤方案

我们需要在setContentView之前设置我们的主题即可。

2022-12-01 11:42:34 740

原创 面试:插件化相关---so

build 生成apk ,不需要开发者自己去判断ABI,Android系统在安装APK的时候,不会安装APK里面全部的so库文件,而是会根据当前CPU类型支持的ABI,从APK里面拷贝最合适的so库,并保存在APP的内部存储路径的libs 下面。只要将插件中的so库放到nativeLibraryPathElements中,就可以自然而然的加载插件中c++代码了。: 动态加载插件的so,需要我们判断ABI类型来加载相应的so,Android系统不会帮我们处理。: 参数为库文件名,不包含库文件的扩展名。

2022-11-30 12:08:31 849

原创 面试:插件化相关---资源

宿主App中的某个资源id值肯定会存在跟插件中的App中某个资源id值是相同的,这就是合并资源方案的后遗症,此问题可导致我们加载不到正确的资源。首先动态创建AssetManager,再反射调用AssetManager的addAssetPath方法来加载插件,这个AssetManager只包含插件资源,所以,该方法新创建的Resources是插件的资源。将插件的资源加载到宿主应用程序中,合并加载到虚拟机中,这样宿主就可以正常访问插件中的资源。:资源不存在冲突,不需要特殊处理。: 存在宿主与插件的资源冲突。

2022-11-30 11:28:16 741

原创 面试:插件化相关---contentProvider

代理转发,在宿主APP中拦截ContentProvider的操作,然后将操作转给宿主占坑的ContentProvider,然后再由占坑ContentProvider进行转发,调用插件中具体的ContentProvider对象。启动代理ContentProvider,进行代理分发,启动插件ContentProvider,因此首先通过getContentProvider()获取插件ContentProvider,然后再调用插件ContentProvider的query()方法。

2022-11-30 11:05:13 378

原创 面试:插件化相关---broadcastReceiver

Android因此,Android将广播的,使得系统方便集成,更易扩展。

2022-11-30 10:43:50 568

原创 面试:插件化相关---service

同样的,先来看看service的常规启动流程mServiceService跟Activity还是存在很大的区别的,service非常独立,也就是说,系统创建service后,除了调用规定的那些回调,传递intent外,剩下就是service自己玩自己的,跟系统一毛钱关系都没有了。

2022-11-30 10:14:55 729

原创 面试:插件化相关---activity

AMS要主动与app进程通信要依靠请求启动Activity阶段传过来的IBinder对象,这个IBinder对象就是上面介绍过的Instrumentation.execStartActivity()中的 whoThread对象,它实际上是一个ApplicationThreadProxy对象,用来和ApplicationThread通信。在请求阶段Instrumentation.execStartActivity()会被调用,而在响应阶段Instrumentation.newActivity()会被调用。

2022-11-30 09:23:43 663

原创 面试:各种热修复框架对比

为每个类插入一个ChangeQuickRedirect类型的静态变量,当这个字段为空时,执行旧的方法,不为空时,就可以对badMethod做拦截,执行新的逻辑,替代掉badMethod,从而达到修复的目的。超级补丁技术基于DEX分包方案,使用了多DEX加载的原理,大致的过程就是:把BUG方法修复以后,放到一个单独的DEX里,插入到dexElements数组的最前面,让虚拟机去加载修复完后的方法。与类加载方案不同的是,底层替换方案不会再次加载新类,而是直接在Native层修改原有的类,使其功能立即生效。

2022-11-29 22:28:11 1998

原创 面试:ANR原因及排查

4、主线程在进程中或通过 binder 调用与另一个线程之间发生死锁。主线程不只是在等待长操作执行完毕,而且处于死锁状态。/data/anr/traces.txt导出。,大概意思为主线程等待异常。告知可能在主线程做了太多的工作。1、CPU满负荷,I/O阻塞。

2022-11-28 23:06:04 2025

原创 面试:事件拦截相关问题

1、view在执行dispatchTouchEvent的时候先要去判断该view是否有touchListener和执行TouchListener的onTouch方法的返回值。2、TouchListener的onTouch方法返回false,事件继续传递在dispatch方法中调用了同级的onTouchEvent方法3、然后在onTouchEvent方法中的UP事件中判断是否注册有onClickListener,有就执行onclick方法。android中的事件传递和处理机制 - fuly - 博客园。

2022-11-27 19:46:30 661

原创 面试:时间复杂度

Hash Map:O(1),若发生hash碰撞,则可能需要进行遍历寻找,n个元素的情况下,链表时间复杂度为O(n)、红黑树为O(logn)ArrayMap二分查找时间复杂度 O(logn)

2022-11-27 17:24:42 445

原创 面试:static静态方法为什么不能被重写

当父类 Father 的引用 father 想要调用子类Son “重写” 的静态方法时,调用的是 Father 类中的静态方法,不会通过所指向的对象(Son类的对象)来调用,所以static修饰的方法没办法达到重写的目的。这是因为静态方法只能被继承,不能被重写,如果子类有和父类相同的静态方法,那么父类的静态方法将会被隐藏,对于子类不可见,也就是说,子类和父类中相同的静态方法是没有关系的方法,他们的行为不具有多态性。

2022-11-27 15:45:52 1467

原创 面试:抽象类和接口

Java8 之后 在接口中可以使用default和static关键字来修饰接口中定义的普通方法}}}

2022-11-27 15:39:04 486

原创 面试:MVC、MVP、MVVM区别

Presenter中除了业务逻辑以外,还有大量的View->Model,Model->View的手动同步逻辑,造成Presenter比较笨重,维护起来会比较困难。随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致变得庞大臃肿。为了解决MVC的缺点,MVP 框架被提出来。

2022-11-27 15:00:40 742

原创 面试:dumpsys meminfo 内存信息含义

【代码】面试:dumpsys meminfo 内存信息含义。

2022-11-25 15:28:53 988

原创 面试:binder、bundle传输的数据大小限制

虽然APP开发时候,Binder对程序员几乎不可见,但是作为Android的数据运输系统,Binder的影响是全面性的,所以有时候如果不了解Binder的一些限制,在出现问题的时候往往是没有任何头绪,比如在Activity之间传输BitMap的时候,如果Bitmap过大,就会引起问题,比如崩溃等,这其实就跟Binder传输数据大小的限制有关系,在上面的一次拷贝中分析过,mmap函数会为Binder数据传递映射一块连续的虚拟地址,这块虚拟内存空间其实是有大小限制的,不同的进程可能还不一样。

2022-11-25 14:16:22 3387 2

原创 面试:SurfaceView 和 TextureView

Surface的渲染可以放到单独线程去做,渲染复杂的动画不会影响主线程的的响应。因为这个Surface不在View hierachy中,它的显示也不受View的属性控制,所以不能进行平移,缩放等变换,也不能放在其它ViewGroup中,一些View中的特性也无法使用。

2022-11-24 22:38:34 3333

原创 面试:Activity、Dialog、PopupWindow、Toast比较

代表着四种典型Window形式。对应的是WindowToken。对应一个自己的token,的Window类型也是。的Window类型是。的Window类型是。的Window类型是。

2022-11-24 22:25:30 616

原创 面试:Android卡顿监控方案、handler耗时打印

② 使用Epic hook框架,打印sendMessage、dispatchMessage之间的时间差。三种方案:① 继承handler,重写sendMessage、dispatchMessage。③ 打开一个线程,在printer开头和结束发送消息,监控消息执行时长,打印线程的堆栈信息。通过Choreographer.FrameCallback回调来实现帧率监控。

2022-11-23 13:52:47 608

原创 面试:Hprof文件的裁剪

Matrix方案裁剪的是HEAP_DUMP、HEAP_DUMP_SEGMENT里面的PRIMITIVE_ARRAY_DUMP段。该方案仅仅会保存字符串的数据以及重复的那一份Bitmap的buffer数据,其他基本类型数组会被剔除。

2022-11-22 22:22:17 994

原创 面试:Zygote通信为什么用Socket,而不是Binder?

虽然Init进程是先创建ServiceManager,后创建Zygote进程的。7. zygote功成身退,调用runSelectLoop(),随时待命,当接收到请求创建新进程请求时立即唤醒并执行相应工作。Linux中,fork进程是不推荐fork一个多线程的进程的,因为如果存在锁的情况下,会导致锁异常。而如果自身作为binder机制的接收者,就会创建一个额外的线程来进行处理(发送者进程是无影响的)。所以,如果使用binder机制,就会导致去fork一个多线程的进程,这是原因之二。注册时间点无法保证,

2022-11-22 21:56:12 1679 1

原创 面试:系统启动流程简介

SystemServer是Android系统的一个核心进程,它是由zygote进程创建的,因此在android的启动过程中位于zygote之后。android的所有服务循环都是建立在 SystemServer之上的。在SystemServer中,将可以看到它建立了android中的大部分服务,并通过ServerManager的add_service方法把这些服务加入到了ServiceManager的svclist中。从而完成ServcieManager对服务的管理。

2022-11-22 21:46:34 380

原创 面试:Java中的指令重排以及引起的问题

单线程的重排序很简单,因为可以通过语义分析就能知道前后代码的依赖性,但是多线程就不一样了,多线程环境里编译器和CPU指令优化根本无法识别多个线程之间存在的数据依赖性,比如说下面的程序代码如果两个方法在l两个不同的线程里面调用就可能出现问题。编译器和处理指令也并非什么场景都会进行指令重排序的优化,而是会遵循一定的原则,只有在它们认为重排序后不会对程序结果产生影响的时候才会进行重排序的优化,如果重排序会改变程序的结果,那这样的性能优化显然是没有意义的。1属于编译器重排序,2和3属于处理器重排序。

2022-11-21 21:38:39 714 3

原创 面试:KOOM内存泄漏的监控

默认heapRatio的设置,会根据最大内存来调整设置更合理的值。当内存异常时,采集内存镜像、分析之后会生成一份json文件报告。自定义需求,配置KConfig设置需要的各项参数。Java-OOM报告获取。设置Uploader。

2022-11-21 18:05:47 934

原创 面试:Kotlin执行

由于等了20ms,会阻塞主线程执行,此时会优先执行协程中1,delay会阻塞协程,此时sleep 20ms执行完后会继续执行主线程3,sleep 2秒,协程会继续执行2,最后执行4。delay()函数是一个非阻塞式的挂起函数,它只会挂起当前协程,并不会影响其他协程的运行。sleep() 函数会阻塞当前的线程,这样运行在该线程下的所有协程都会被阻塞。因为需要启动协程,因此主线程中的3会先执行,然后执行协程中的1和2。delay:协程的延时是不会阻塞线程的,只会延时当前协程。sleep:阻塞线程。

2022-11-21 17:43:12 390

原创 面试:Fragment懒加载

以前处理 Fragment 的懒加载,我们通常会在 Fragment 中处理)这两个函数,而在 Androidx 模式下,我们可以使用的方式来处理 Fragment 的懒加载。

2022-11-21 09:41:10 408

原创 面试:HTTP缓存机制

强制缓存由,Exipres(HTTP1.0)控制。浏览器直接读本地缓存,不会再跟服务器端交互,状态码 200。协商缓存由/,Etag/实现,每次请求需要让服务器判断一下资源是否更新过,从而决定浏览器是否使用缓存,如果是,则返回 304,否则重新完整响应。

2022-11-20 22:29:05 505

原创 面试:HTTP 的长连接和短连接

SYN 洪水(半开连接攻击)是一种拒绝服务 (DDoS) 攻击,旨在耗尽可用服务器资源,致使服务器无法传输合法流量。通过重复发送初始连接请求 (SYN) 数据包,攻击者将可击垮目标服务器计算机上的所有可用端口,导致目标设备在响应合法流量时表现迟钝乃至全无响应。

2022-11-20 21:24:47 461

原创 java sleep yield join区别

Thread类的方法,必须带一个时间参数。,执行yield()的线程有可能在进入到可执行状态后马上又被执行,另外yield()方法只能使同优先级或者高优先级的线程得到执行机会,这也和sleep()方法不同。yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。调用yield方法只是一个建议,告诉线程调度器我的工作已经做的差不多了,可以让别的相同优先级的线程使用CPU了,没有任何机制保证采纳。

2022-11-20 18:02:16 1116

原创 面试:类相关---Java、Android有哪些类加载器

类加载器(Class Loader):顾名思义,指的是可以加载类的工具。前面JVM类加载机制——类的生命周期加载、验证、准备、解析、初始化,而类加载器的任务是根据一个类的全限定名来读取此类的二进制字节流到JVM中,然后转换为一个与目标类对应的java.lang.Class对象实例,在虚拟机提供了3种类加载器,启动(Bootstrap)类加载器、扩展(Extension)类加载器、系统(System)类加载器(也称应用类加载器),下面分别介绍。

2022-11-20 16:58:05 557

原创 面试:线程池核心线程如何保持一直运行的

对于Java中 Thread 对象,同一个线程对象调用 start 方法后,会在执行完run 后走向终止(TERMINATED)状态,也就是说一个线程对象是不可以通过多次调用 start 方法重复执行 run 方法内容的。通过队列的 take 方法阻塞核心线程(Worker)的 run 方法从而保证核心线程不被销毁的,这样也就间接达到了核心线程数不会被回收的效果。如果没有设置 allowCoreThreadTimeOut 为 True, 以及当前线程池内线程数量不大于核心线程。

2022-11-19 20:07:04 2839

原创 面试:外层ViewGroup为wrap,内层为match,如何测量

在测量期间,有child的LayoutParams.width为MATCH_PARENT,且LinearLayout的宽度测量规格不为EXACTLY。意味着child需要依赖父布局的宽度,但父布局此时宽度尚不明确。因此在LinearLayout设置完自身尺寸后,还会对这些child调用测量。例如本例中,父布局是LinearLayout宽度wrap_content,内部有两个TextView宽度match_parent,最终会以最宽的子view的宽度作为整个ViewGroup的宽度。

2022-11-19 18:07:01 179

原创 面试:内存划分及GC算法与种类

HotSpot虚拟机默认Eden和Survivor的大小比例是8:1,也就是说,每次新生代中可用内存空间为整个新生代容量的90%(80%+10%),只有10%的空间会被浪费。在标记阶段,通过根节点,标记所有从根节点开始的可达对象,因此没有被标记的就是没有被引用的垃圾对象,然后在清除阶段,清除所有没有被标记的对象。标记/整理算法不仅可以弥补标记/清除算法当中,内存区域分散的缺点,也消除了复制算法当中,内存减半的高额代价。的对象作为起始点,向下搜索走过的路径称为。空间是不连续的,这样内存的布局就会乱七八糟。

2022-11-19 17:08:30 491

原创 面试:常用的设计模式总结

Context(抽象构件):它是具体构件和抽象装饰类的共同父类,声明了在具体构件中实现的业务方法,它的引入可以使客户端以一致的方式处理未被装饰的对象以及装饰之后的对象,实现客户端的透明操作。ContextImpl(具体构件):它是抽象构件类的子类,用于定义具体的构件对象,实现了在抽象构件中声明的方法,装饰器可以给它增加额外的职责(方法)。门面模式的定义:提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。在父类中定义好具体要执行的类的方法。

2022-11-19 16:05:26 834

matjava1.8.rar

MAT旧版本可以用java1.8打开

2021-09-14

PixelRulers.rar

PixelRulers.rar

2021-01-20

0day安全:软件漏洞分析技术(第2版).pdf (部分章节)

0day安全:软件漏洞分析技术(第2版).pdf 部分章节 高清版

2016-10-05

Windows环境下32位汇编语言

2016-06-09

登陆成功界面

登陆成功界面

2015-07-21

bootstrap首页制作

bootstrap首页制作,酷炫效果,可以学习使用。

2015-07-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除