Java杂谈来一发
文章平均质量分 56
WalkOffTheEarth
这个作者很懒,什么都没留下…
展开
-
Java面试来一发(二)死锁
原文:https://www.cnblogs.com/wuchanming/p/4345243.html1、死锁的条件1)互斥条件(Mutual exclusion) :资源不能被共享,只能由一个进程使用。2)请求与保持条件(Hold and wait):进程已获得了一些资源,但因请求其它资源被阻塞时,对已获得的资源保持不放。3)不可抢占条件(No pre-emption)...原创 2019-02-26 16:45:04 · 303 阅读 · 0 评论 -
Java面试来一发(一)TopN问题
一、TopN问题描述1、TopN问题描述问题一:找出海量数据中出现次数最多的N个数据。问题二:找出两个超大文件中的相同字符串。问题三:找出超多整数中没有重复出现的整数,或多少以内没出现的整数。2、解决方案通用方案:分而治之的思想,先拆分成很多小文件,每个文件分别统计和排序,然后归并排序。问题一:除分而治之方案外,如果无内存限制,则可用trie字典树。问题二:除分而治...原创 2019-01-08 17:03:48 · 2399 阅读 · 0 评论 -
TCP流量控制和拥塞控制简述
一、流量控制(端到端)利用灵活可变的滑动窗口控制流量,是为了解决发送方发送数据扩快导致接收方来不及接受的问题。具体是接收方会发送流量控制保温通知发送方窗口大小,发送方发送的数据大小不能超过窗口大小。二、拥塞控制(区域网络)避免过多的流量注入网络使得网络过载。方法包括:慢开始、拥塞避免、快重传和快恢复。慢开始:刚开始建立连接的时候,发送窗口大...原创 2019-05-16 19:24:13 · 940 阅读 · 0 评论 -
Guava基本工具(TODO)
1、Optional避免使用Null导致各种异常情况,用Optional可以安全地处理Null,用orElse、orElseGet等处理null情况。2、PreConditions校验入参,类似于Assert用法。3、ComparisonChain 用类似流的方式比较一系列数字,直到比不过返回。4、Ordering本质上来说,Orderin...原创 2019-05-16 19:30:31 · 287 阅读 · 0 评论 -
Java杂谈来一发(九)SPI
1、定义SPI(ServiceProviderInterface),即服务提供者接口,是JDK内置的一种动态服务提供发现机制。SPI可以实现在不修改原来jar包的情况下,新增一种API的实现。在接口依赖关系中,实现方实现SPI接口,调用方依赖SPI接口。SPI是由调用方定义的,这是它和API最大的不同。2、SPI实现当服务的提供者,提供了接口的一种具体实现后,在jar包的M...原创 2019-05-16 19:38:08 · 193 阅读 · 0 评论 -
Java杂谈来一发(八)代理
1、代理简介代理分为静态代理和动态代理,静态代理实现简单,动态代理功能更加强大。静态代理是AOP框架会在编译阶段生成AOP代理类,因此称为编译时增强。动态代理是运行时增强,AOP框架不会去修改字节码,而是在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。动态代理有两种实现,jdk动态代理和cglib代理:jd...原创 2019-01-02 21:06:46 · 132 阅读 · 0 评论 -
Java杂谈来一发(七)注解
1、注解定义注解也叫元数据,是描述数据的数据,描述的数据是Java代码。注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。它主要的作用有以下几方面:生成文档,通过代码里标识的元数据生成javadoc文档。如@param @return 编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证。如@overide...原创 2019-01-02 20:57:32 · 244 阅读 · 0 评论 -
Java杂谈来一发(六)final关键字
final可以修饰非抽象类、非抽象方法、变量或常量。final类不能被继承,final类的方法默认都是final的。final方法不能被子方法覆盖,但可以被继承。这有两个作用,一是防止被修改实现,二是编译器处理调用final方法时转入内联机制(inline),执行效率高。inline的原理是在编译的时候直接调用方法代码替换,而不是在运行时调用方法,因此效率较高。但如果代码块过大,每次都替换...原创 2019-01-02 20:45:52 · 118 阅读 · 0 评论 -
Java杂谈来一发(五)== 和 equals
1、====是操作符,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址,也就是必须是同一个对象。2、equals如果没有对equals方法进行重写,比较的是引用类型的变量所指向的对象的地址;对于String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。注意:在重写equals方法的...原创 2019-01-02 20:38:58 · 109 阅读 · 0 评论 -
Java杂谈来一发(四)堆外内存
JVM可以使用的内存分外两种:堆内存和堆外内存。堆内存完全由JVM负责分配和释放,堆外内存的存在是为了能直接分配和释放内存,提高效率。堆外内存优点:对外内存由于避免了数据从用户态向内核态的拷贝,提升IO效率,另外还可以节约大量的堆内内存,减少GC次数。堆外内存缺点:分配和回收堆外内存比分配和回收堆内存耗时;(解决方案:通过对象池避免频繁地创建和销毁堆外内存)堆外内存原理:...原创 2019-01-02 20:26:19 · 480 阅读 · 1 评论 -
Java杂谈来一发(三)反射和Class类
Java反射是Java被视为动态语言的一个关键性质,这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于运行时改变fields内容或唤起...原创 2019-01-01 16:37:51 · 121 阅读 · 0 评论 -
Java杂谈来一发(九)线程状态
记线程状态转换图(图片来自《Java并发编程的艺术》):转载 2018-12-04 20:12:03 · 117 阅读 · 0 评论 -
Java杂谈来一发(二)Java内存区域
Java内存区域包括5部分:程序计数器、Java栈、本地方法栈、Java堆、方法区。1、程序计数器(线程私有)存放当前线程执行的字节码的行号指示器。2、Java栈(线程私有)存放栈帧,栈帧中存放局部变量表、操作数栈、动态链接、方法返回地址等。其中,局部变量表,存放方法参数和局部变量。操作数栈,主要用于存放中间变量。动态链接,常量池中的符号引用,解析为直接引用有两种方式,...原创 2018-11-28 20:48:50 · 124 阅读 · 0 评论 -
Java杂谈来一发(一)Java本地方法
1、Java本地方法概念Java中的方法分为两种:Java方法和本地方法。Java方法由Java语言编写,编译成字节码,存储在.class文件中。本地方法由其他语言编写,编译成与处理器相关的机器代码,本地方法保存在动态链接库(如ddl中)。本地方法的存在的意义,主要在于Java应用需要与JVM进行交互,当Java需要与操作系统或者某些硬件交换信息时,就需要用到本地方法。使用JNI能...原创 2018-11-20 22:26:16 · 877 阅读 · 0 评论