
JAVA
文章平均质量分 58
yzpyzp
这个作者很懒,什么都没留下…
展开
-
Linux如何找到jdk的安装路径
1.首先通过,which java命令或whereis java命令,可以得到 /usr/bin/java$ which java/usr/bin/java2.执行命令 ls -lrt /usr/bin/java 得到 /usr/bin/java -> /etc/alternatives/java$ ls -lrt /usr/bin/java lrwxrwxrwx 1 root root 22 1月 17 15:54 /usr/bin/java -> /etc/alternat原创 2021-05-26 13:08:24 · 6748 阅读 · 0 评论 -
java线程在底层是如何实现的
java线程在虚拟机层的本质分析线程的本质,操作系统和CPU是如何执行线程的更多相关内容:从根上理解高性能、高并发(一):深入计算机底层,理解线程与线程池从根上理解高性能、高并发(一):深入计算机底层,理解线程与线程池...原创 2021-05-04 14:27:17 · 211 阅读 · 0 评论 -
JVM的mixed mode
最近在做flutter相关的项目,flutter指令在执行时会报java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema 的异常,系统中使用的是jdk 14,而jdk 1.8之后删除了很多jar包,因此 flutter在jdk 1.8之后不能正常使用,要么去下载很多依赖包,...原创 2021-04-11 13:03:09 · 2902 阅读 · 0 评论 -
CAS原理分析
CAS机制是为了实现原子性操作的,是实现原子操作的其中一种方式,可用于在多线程编程中实现不被打断的数据交换操作,从而避免多线程同时改写某一数据时由于执行顺序不确定性以及中断的不可预知性产生的数据不一致问题。 该操作通过将内存中的值与指定数据进行比较,当数值一样时将内存中的数据替换为新的值。现代的大多数CPU都实现了CAS,它是一种无锁(lock-free),且非阻塞的一种算法,用来保持数据的一致性。在JDK 5之前Java语言是靠synchronized关键字保证同步的,使用的是锁机制。锁机制存在以下问原创 2021-01-29 15:47:36 · 1453 阅读 · 0 评论 -
DNS原理
DNS是:①一个由分层的DNS服务器实现的分布式数据库;②一个使得主机能够查询分布式数据库的应用层协议。DNS 服务器通常是运行 BIND (Berkeley lnternet Name Domain) 软件 [BIND 2012 ]的UNIX 机器。DNS 协议运行在 UDP 之上,使用 53 号端口。DNS 使用了大量的 DNS 服务器 ,它们以层次方式组织,并且分布在全世界范围内。没有一台 DNS 服务器拥有因特网上所有主机的映射。有 3 种类型的 DNS 服务器: 根 DNS 服务器、顶级域原创 2020-11-24 19:07:58 · 187 阅读 · 0 评论 -
Java线程与线程池与阻塞队列原理
线程池策略corePoolSize:核心线程数;maximunPoolSize:最大线程数每当有新的任务加入到线程池时,第一步: 先判断线程池中当前线程数量是否达到了corePoolSize,若未达到,则新建线程运行此任务,且任务结束后将该线程保留在线程池中,不做销毁处理,若当前线程数量已达到corePoolSize,则进入下一步;第二步: 判断工作队列(workQueue)是否已满,未满则将新的任务提交到工作队列中,满了则进入下一步;第三步: 判断线程池中的线程数量是否达到了maxumunPo原创 2020-11-14 15:46:25 · 368 阅读 · 0 评论 -
Java线程与操作系统线程
Java线程在早期的Classic虚拟机上(JDK1.2以前),是基于一种被称为“绿色线程”(Green Threads)的用户线程实现的,但从JDK1.3起,“主流”平台上的“主流”商用Java虚拟机的线程模型普遍都被替换为基于操作系统原生线程模型来实现,即采用1:1的线程模型。操作系统支持怎样的线程模型,在很大程度想会影响上面的Java虚拟机的线程是怎么样映射的,这一点在不同的平台上很难达成一致,因此《Java虚拟机规范》中才不去限定Java线程需要使用哪种线程模型来实现。深入理解JVM(③)线程与原创 2020-11-13 17:47:46 · 165 阅读 · 0 评论 -
LinkedHashMap原理及源码解析
参考:图解LinkedHashMap原理原创 2020-11-09 20:56:08 · 305 阅读 · 1 评论 -
Android-Window机制原理之Token验证(为什么Application的Context不能show dialog)
参考:Android-Window机制原理之Token验证(为什么Application的Context不能show dialog)原创 2020-10-13 16:22:10 · 237 阅读 · 0 评论 -
RecyclerView的布局流程
RecyclerView 源码分析(一) - RecyclerView的三大流程RecyclerView剖析原创 2020-10-13 16:11:46 · 505 阅读 · 0 评论 -
自定义实现简易版RecyclerView
简易版RecyclerView的主要原理:RecyclerView会先去回收池中获取ViewHolder,如果没有获取获取到,则调用适配器的onCreateViewHolder()获取ViewHolder。RecyclerView会先去回收池中获取ViewHolder,获取到ViewHolder后调用适配器的onBindViewHolder()绑定数据。自定义实现RecyclerView为什么看了很多网上的源码分析还是不能很好理解RecyclerView原理,而且过了一段时间就忘?因为...原创 2020-10-11 15:32:59 · 373 阅读 · 0 评论 -
Android高级UI之RecyclerView回收复用机制以及自定义LayoutManager
1.RecyclerView回收复用的谁?2.RecyclerView有几级缓存?3.如何实现自定义LayoutManager?回收复用回收什么?复用什么?回收到哪里去?从哪里获得复用?什么时候回收?什么时候复用?四级缓存1.mChangeScrap与 mAttachedScrap用来缓存还在屏幕内的 ViewHolder2.mCachedViews用来缓存移除屏幕之外的 ViewHolder3.mViewCacheExtension开发给用户的自定义扩展缓存,需要用户自己 管理原创 2020-10-07 17:51:11 · 2066 阅读 · 0 评论 -
ListView原理
Android ListView工作原理完全解析,带你从源码的角度彻底理解ListView原理原创 2020-09-29 17:36:59 · 419 阅读 · 0 评论 -
Android事件分发机制
Android事件分发机制详解:史上最全面、最易懂原创 2020-09-29 17:31:38 · 110 阅读 · 0 评论 -
Android高级UI之View事件分发机制与事件冲突的原因及解决
onTouch与onClick之间会产生事件冲突吗?事件在控件中时如何传递的?事件冲突的根本原因?如何解决事件冲突?MotionEventView继承关系ViewGroup,先要走分发流程,再走处理流程View,只能走处理流程总结ViewGroup,先要走分发流程,如果没人处理,就再走处理流程View,只能走处理流程分发流程:down–确定事件给谁1.先看是否拦截后自己处理(即不分发下去)2.分发下去:排序遍历分发领取事件的View 处理事件3.没人领取,再看下自己原创 2020-09-11 19:24:55 · 914 阅读 · 0 评论 -
Android高级UI之京东淘宝首页二级联动怎么实现
1、事件的种类和手势1.1 单点触摸根据面向对象思想,事件被封装成 MotionEvent 对象1.2 多点触摸多点触控 ( Multitouch,也称 Multi-touch ),即同时接受屏幕上多个点的人机交互操作,多点触 控是从 Android 2.0 开始引入的功能1.3 手势1.4 多点手势手指操作流程2、View的体系结构和事件分发的框架2.1 View和ViewGroup的关系2.2 Android页面View的体系结构2.3 事件的处理函数2.4 事件的处原创 2020-09-10 16:57:39 · 947 阅读 · 0 评论 -
Fragment
https://developer.android.google.cn/guide/components/fragmentshttps://developer.android.com/guide/topics/fundamentals/fragments.html原创 2020-09-09 16:38:02 · 567 阅读 · 0 评论 -
Android View的requestLayout与invalidate
Android View 深度分析requestLayout、invalidate与postInvalidateAndroid自定义View之requestLayout方法和invalidate方法原创 2020-09-08 20:07:20 · 263 阅读 · 0 评论 -
Android自定义View与高级UI
Android自定义View概述Android开发进阶的必经之路为什么要自定义View自定义View的基本方法自定义View的最基本的三个方法分别是: onMeasure()、onLayout()、onDraw();View在Activity中显示出来,要经历测量、布局和绘制三个步骤,分别对应三个动作:measure、layout和draw。测量:onMeasure()决定View的大小;布局:onLayout()决定View在ViewGroup中的位置;绘制:onDraw()决定绘制这原创 2020-09-07 19:36:49 · 995 阅读 · 0 评论 -
ART 和 Dalvik的区别
主要如下:1、Ahead-of-time (AOT) compilation instead of Just-in-time (JIT)2、Improved garbage collection3、Improved memory usage and reduce fragmentationart和dalvik的区别?https://source.android.google.cn/devices/tech/dalvik/http://source.android.com/devices/tech原创 2020-08-26 14:09:43 · 337 阅读 · 0 评论 -
腾讯面试题——谈一谈Binder的原理和实现一次拷贝的流程
腾讯面试题——谈一谈Binder的原理和实现一次拷贝的流程原创 2020-08-25 20:58:27 · 238 阅读 · 0 评论 -
进程间通信之共享内存
虚拟内存不同进程的相同线性地址映射到物理内存相同吗?一般是不同的,但有些是相同的(比如通过共享内存的方式)。比如不同的进程中有3G的用户空间,3G用户空间的线性地址表示也就是0x000000000~0xbffffffff,但不同进程映射的物理内存肯定是不一样的,如何实现的?通过MMU实现。内存管理单元(MMU)共享内存由于共享内存这一特殊的资源类型,使它不同于普通的文件,因此,系统需要为其提供专有的操作函数,而这无疑增加了程序员开发的难度(需要记忆额外的专有函数)。共享内存专有的操作函数由s原创 2020-08-25 20:16:13 · 346 阅读 · 0 评论 -
Android 虚拟机与类加载机制
JVM与DalvikAndroid应用程序运行在Dalvik/ART虚拟机,并且每一个应用程序对应有一个单独的Dalvik虚拟机实例。Dalvik虚拟机实则也算是一个Java虚拟机,只不过它执行的不是class文件,而是dex文件。Dalvik虚拟机与Java虚拟机共享有差不多的特性,差别在于两者执行的指令集是不一样的,前者的指令集是基本寄存器的,而后者的指令集是基于堆栈的。基于栈的虚拟机对于基于栈的虚拟机来说,每一个运行时的线程,都有一个独立的栈。栈中记录了方法调用的历史,每有一次方法调用,栈中原创 2020-08-24 17:42:48 · 632 阅读 · 0 评论 -
Android自定义View的wrap_content不起作用
参考:为什么你的自定义View wrap_content不起作用?原创 2020-08-24 15:48:50 · 366 阅读 · 0 评论 -
Android自定义全局捕获异常
Android自定义全局捕获异常并上传,实现实时收集APP崩溃crash信息Android UncaughtExceptionHandler 全局异常监控原创 2020-08-24 15:48:10 · 226 阅读 · 0 评论 -
JVM的OOP-KLASS模型
在JVM中,使用了OOP-KLASS模型来表示内存中的java对象。InstanceKlass:jvm在加载解析.class文件完成后,创建InstanceKlass对象,表示其元数据,包括类型信息,字段信息、方法信息,常量池等。InstanceKlass对象存放在方法区中,InstanceKlass是jvm中的数据结构,供jvm内部使用,HotSpot并不把InstanceKlass暴露给Java开发者,Java开发者使用的是java.lang.Class对象,JVM将java.lang.Class对原创 2020-08-23 17:07:20 · 432 阅读 · 0 评论 -
Java进阶之深入理解对象与垃圾回收机制常见面试题
内存泄漏和内存溢出辨析内存溢出:实实在在的内存空间不足导致;内存泄漏:该释放的对象没有释放,多见于自己使用容器保存元素的情况下。常量池与String常量池常量池有很多说法,包括运行时常量池、class文件常量池、字符串常量池。虚拟机规范只规定以上区域属于方法区,并没有规定虚拟机厂商的实现。严格来说常量池只分为静态常量池和运行时常量池。JDK1.7版本之后,运行时常量池转移到堆内存中了,这里指的是物理空间,而逻辑上还是属于方法区(方法区是逻辑分区)。一些概念:字面量:给基本类型变量赋值的方原创 2020-08-21 20:04:20 · 350 阅读 · 0 评论 -
Java进阶之深入理解对象与垃圾回收机制
虚拟机中的对象对象的分配虚拟机遇到一条new指令时,首先检查是否被类加载器加载,如果没有,那必须先执行相应的类加载过程。类加载就是把class加载到JVM的运行时数据区的过程(类加载后面有专门的专题讲)。1)检查加载首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用(符号引用 :符号引用以一组符号来描述所引用的目标),并且检查类是否已经被加载、解析和初始化过。2)分配内存接下来虚拟机将为新生对象分配内存。为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。指针碰原创 2020-08-14 18:53:23 · 897 阅读 · 0 评论 -
javac与javap
javap并没有将字节码反编译成java文件,而是生成了一种我们可以看得懂的字节码。其实javap生成的文件仍然是字节码,只是程序员可以稍微看得懂一些。https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javap.htmlJava代码到底是如何编译成机器指令的。Java开发必会的反编译知识(附支持对Lambda进行反编译的工具)[初级]Java命令学习系列(七)——javap...原创 2020-08-12 16:47:37 · 191 阅读 · 0 评论 -
Java 即时编译器(JIT)
深入理解java虚拟机(十三) Java 即时编译器JIT机制以及编译优化原创 2020-08-11 21:24:20 · 212 阅读 · 0 评论 -
Java进阶之JVM内存管理深度剖析
[三] java虚拟机 JVM字节码 指令集 bytecode 操作码 指令分类用法 助记符原创 2020-08-08 23:55:00 · 452 阅读 · 0 评论 -
Java进阶之IO项目实战—dex文件加壳
原创 2020-08-08 12:44:18 · 291 阅读 · 0 评论 -
Java进阶之IO框架
IO框架Java IO的学习是一件非常艰巨的任务。它的挑战是来自于要覆盖所有的可能性。不仅存在各种I/O源端还有想要和他通信的接收端(文件/控制台/网络链接),而且还需要以不同的方式与他们进行通信(顺序/随机存取/缓冲/二进制/字符/行/字 等等)这些情况综合起来就给我们带来了大量的学习任务,大量的类需要学习。我们要学会所有的这些java 的IO是很难的,因为我们没有构建一个关于IO的体系,要构建这个体系又需要深入理解IO库的演进过程,所以,我们如果缺乏历史的眼光,很快我们会对什么时候应该使用IO中的原创 2020-08-07 01:15:49 · 261 阅读 · 0 评论 -
RecyclerView
参考:阿里面试官:说一下RecyclerView 性能优化原创 2020-08-04 14:12:23 · 141 阅读 · 0 评论 -
Java继承泛型父类在运行时获取泛型信息
对于泛型类型的属性和方法可以通过Filed和Method在运行时获取泛型信息,但是如何在运行时获取泛型类的泛型信息呢我们知道java的泛型是伪泛型,只是在编译的时候进行类型检查,编译后,所有的泛型信息都会被擦除,因此在运行时无法使用反射获取范型的类型。比如对于泛型类List<String> ,在编译的时候会检测所有加入到list里面的是否是String类型,编译后的class文件中是不会有范型信息的。那么该如何获取泛型类的泛型信息呢,可以通过子类继承泛型类的方法来实现。public cla原创 2020-08-03 17:27:35 · 1318 阅读 · 0 评论 -
优先队列
参考:字节跳动提前批,面试官和我聊了半小时的优先队列……原创 2020-08-03 14:32:38 · 141 阅读 · 0 评论 -
JAVA进阶之IO
参考:Java IO流史上最全详细汇总,确定不来瞅瞅吗!!(内容稍长,建议亲这边收藏慢慢看哦。)原创 2020-07-31 03:24:46 · 235 阅读 · 0 评论 -
Android的SparseArray和ArrayMap
参考:ArrayMap完全剖析面试必备:ArrayMap源码解析ArrayMap详解及源码分析原创 2020-07-20 20:48:49 · 597 阅读 · 0 评论 -
【Java面试题】List如何一边遍历,一边删除?
参考:【Java面试题】List如何一边遍历,一边删除?原创 2020-07-18 10:55:15 · 162 阅读 · 0 评论 -
Java多线程面试题
sychronied修饰普通方法和静态方法的区别?什么是可见性?对象锁是用于对象实例方法,或者一个对象实例上的,类锁是用于类的静态方法或者一个类的class对象上的。我们知道,类的对象实例可以有很多个,但是每个类只有一个class对象,所以不同对象实例的对象锁是互不干扰的,但是每个类只有一个类锁。但是有一点必须注意的是,其实类锁只是一个概念上的东西,并不是真实存在的,类锁其实锁的是每个类的对应的class对象。类锁和对象锁之间也是互不干扰的。可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量原创 2020-06-25 11:24:26 · 204 阅读 · 0 评论