java
bigdata_wangzhe
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java中垃圾收集的方法
1)引用计数法 应用于:微软的COM/ActionScrip3/Python等如果对象没有被引用,就会被回收,缺点:需要维护一个引用计算器2)复制算法 年轻代中使用的是Minor GC,这种GC算法采用的是复制算法(Copying)效率高,缺点:需要内存容量大,比较耗内存使用在占空间比较小、刷新次数多的新生区3)标记清除 老年代一般是由标记清除或者是标记清除与标记整理的混合实现效率比较低,会差生碎片。4)标记压缩 老年代一般是由标记清除或者是标记清除与标记整理的混合实现效率低速度原创 2021-04-09 21:46:12 · 120 阅读 · 0 评论 -
Java内存分配与回收策略
内存分配:栈区:栈分为java虚拟机栈和本地方法栈堆区:堆被所有线程共享区域,在虚拟机启动时创建,唯一目的存放对象实例。堆区是gc的主要区域,通常情况下分为两个区块年轻代和年老代。更细一点年轻代又分为Eden区,主要放新创建对象,From survivor 和 To survivor 保存gc后幸存下的对象,默认情况下各自占比 8:1:1。方法区:被所有线程共享区域,用于存放已被虚拟机加载的类信息,常量,静态变量等数据。被Java虚拟机描述为堆的一个逻辑部分。习惯是也叫它永久代(permanment原创 2021-04-09 21:44:22 · 142 阅读 · 0 评论 -
HashMap底层结构
hashMap的底层结构在jdk1.7中由数组+链表实现,在jdk1.8中由数组+链表+红黑树实现,以数组+链表的结构为例。JDK1.8之前Put方法:JDK1.8之后Put方法:原创 2021-04-07 21:43:18 · 128 阅读 · 0 评论 -
spring boot自动配置原理
自动配置原理:SpringBoot启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration@EnableAutoConfiguration 作用:利用EnableAutoConfigurationImportSelector给容器中导入一些组件可以查看selectImports()方法的内容List configurations = getCandidateConfigurations(annotationMetadata, attributes);获取候原创 2021-04-03 21:57:53 · 126 阅读 · 0 评论 -
SpringBoot启动器
父项目<parent><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐starter‐parent</artifactId><version>1.5.9.RELEASE</version></parent>他的父项目是<parent><groupId>org.springframework原创 2021-04-03 21:43:20 · 102 阅读 · 0 评论 -
String buffer和String build区别
String buffer和String build区别1、StringBuffer与StringBuilder中的方法和功能完全是等价的。2、只是StringBuffer中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而StringBuilder没有这个修饰,可以被认为是线程不安全的。3、在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全而StringBuffer则每次都需要判断锁,效率相对更低Final、Finally、Fina原创 2021-04-02 20:24:58 · 623 阅读 · 0 评论 -
JUC
Synchronized与Lock的区别1)Synchronized能实现的功能Lock都可以实现,而且Lock比Synchronized更好用,更灵活。2)Synchronized可以自动上锁和解锁;Lock需要手动上锁和解锁Runnable和Callable的区别1)Runnable接口中的方法没有返回值;Callable接口中的方法有返回值2)Runnable接口中的方法没有抛出异常;Callable接口中的方法抛出了异常3)Runnable接口中的落地方法是call方法;Callable原创 2021-04-02 20:21:48 · 124 阅读 · 0 评论 -
Redis总结
缓存穿透、缓存雪崩、缓存击穿1)缓存穿透是指查询一个一定不存在的数据。由于缓存命不中时会去查询数据库,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。解决方案:① 是将空对象也缓存起来,并给它设置一个很短的过期时间,最长不超过5分钟② 采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力2)如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数原创 2021-04-02 20:16:22 · 91 阅读 · 0 评论 -
HashMap和HashTable区别
线程安全性不同HashMap是线程不安全的,HashTable是线程安全的,其中的方法是Synchronize的,在多线程并发的情况下,可以直接使用HashTabl,但是使用HashMap时必须自己增加同步处理。是否提供contains方法HashMap只有containsValue和containsKey方法;HashTable有contains、containsKey和containsValue三个方法,其中contains和containsValue方法功能相同。key和value是否允许nu原创 2021-04-02 20:12:24 · 141 阅读 · 1 评论 -
Java自带的线程池
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。这种类型的线程池特点是:工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往线程池中添加线程。如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止。终止后,如果你又提交了新的任务,则线程池重新创建一个工作线程。在使用CachedThreadPool时,一定要注原创 2021-04-02 20:11:09 · 102 阅读 · 0 评论 -
算法之归并排序
核心思想:不断的将大的数组分成两个小数组,直到不能拆分为止,即形成了单个值。此时使用合并的排序思想对已经有序的数组进行合并,合并为一个大的数据,不断重复此过程,直到最终所有数据合并到一个数组为止。代码实现:/** * 快排 * 时间复杂度:O(nlogn) * 空间复杂度:O(n) */def merge(left: List[Int], right: List[Int]): List[Int] = (left, right) match { case (Nil, _) =>.原创 2021-04-01 21:59:44 · 93 阅读 · 0 评论 -
算法之快速排序
/** * 快排 * 时间复杂度:平均时间复杂度为O(nlogn) * 空间复杂度:O(logn),因为递归栈空间的使用问题 */def quickSort(list: List[Int]): List[Int] = list match { case Nil => Nil case List() => List() case head :: tail => val (left, right) = tail.partition(_ < .原创 2021-04-01 21:53:07 · 94 阅读 · 0 评论
分享