java基础
单弦划过舞曲
这个作者很懒,什么都没留下…
展开
-
JVM GC 机制与性能优化
1 背景介绍与C/C++相比,JAVA并不要求我们去人为编写代码进行内存回收和垃圾清理。JAVA提供了垃圾回收器(garbage collector)来自动检测对象的作用域),可自动把不再被使用的存储空间释放掉,也就是说,GC机制可以有效地防止内存泄露以及内存溢出。JAVA 垃圾回收器的主要任务是:分配内存确保被引用对象的内存不被错误地回收回收不再被引用的对象的内存空间凡事都有两面性。垃圾回收器在...转载 2018-03-22 16:28:44 · 217 阅读 · 0 评论 -
java的一些锁
1、自旋锁 ,自旋,jvm默认是10次吧,有jvm自己控制。for去争取锁2、阻塞锁 被阻塞的线程,不会争夺锁。3、可重入锁 多次进入改锁的域4、读写锁5、互斥锁 锁本身就是互斥的6、悲观锁 不相信,这里会是安全的,必须全部上锁7、乐观锁 相信,这里是安全的。8、公平锁 有优先级的锁9、非公平锁 无优先级的锁10、偏向锁 无竞争不锁,有竞争挂起,转为轻量锁11、对象锁 锁住对象12、线程锁13、锁...原创 2018-04-04 01:14:11 · 134 阅读 · 0 评论 -
Kafka — 高吞吐量的分布式发布订阅消息系统
1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic、发送消息、消费消息?3.如何书写Kafka程序?4.数据传输的事务定义有哪三种?5.Kafka判断一个节点是否活着有哪两个条件?6.producer是否直接将数据发送到broker的leader(主节点)?7.Kafa consumer是否可以消费指定分区消息?8.Kafka消息是采用Pull模式,还是Push模式?9.Pr...转载 2018-03-27 16:50:42 · 636 阅读 · 0 评论 -
MySQL的并发控制与加锁分析
本文主要是针对MySQL/InnoDB的并发控制和加锁技术做一个比较深入的剖析,并且对其中涉及到的重要的概念,如多版本并发控制(MVCC),脏读(dirty read),幻读(phantom read),四种隔离级别(isolation level)等作详细的阐述,并且基于一个简单的例子,对MySQL的加锁进行了一个详细的分析。本文的总结参考了何登成前辈的博客,并且在前辈总结的基础上,进行了一些基...转载 2018-03-27 16:38:44 · 138 阅读 · 0 评论 -
一些java小知识
1、equals 和 == 有什么区别?==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。==比较的是2个对象的地址,而equals比较的是2个对象的内容。显然,当equals为true时,==不一定为true;2、抽象类和接口有什么区别?接口和抽象类的概...原创 2018-03-22 11:52:13 · 146 阅读 · 0 评论 -
ClassLoad的加载过程及分析
-Xbootclasspath:bootclasspath 让jvm从指定路径(可以是分号分隔的目录、jar、或者zip)中加载bootclass,用来替换jdk的rt.jar;若非必要,一般不会用到; -Xbootclasspath/a:path 将指定路径的所有文件追加到默认bootstrap路径中; -Xbootclasspath/p:path 让jvm优先于bootstrap默认路径加载指...转载 2018-03-21 17:55:52 · 693 阅读 · 0 评论 -
数据库的三范式
首先,所谓的数据库,你可以理解为无数张excel表加在一起。1.第一范式:比如【性别】这个列名,绝大多数情况下无法再分;但是【所在地】这个列名,很多时候是可以根据你的需求往下分的,那么它在某些情况下就不符合第一范式。即所有表格的每一个列名都不可再分,同时与其它列名不重复。2.第二范式:比如我们为了评价一批苹果的好坏,给苹果上了编号1——10000。那么这个【编号】就是我们要描述的对象,其余的【颜...原创 2018-03-21 17:51:55 · 182 阅读 · 0 评论 -
Java中ArrayList和LinkedList区别
一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (LinkedList是双向链表,有next也有previous) 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 3.对于新增和删除操作...转载 2018-03-21 16:47:26 · 130 阅读 · 0 评论 -
进程和线程的区别?
进程和线程的区别?进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量...转载 2018-03-21 16:34:39 · 231 阅读 · 0 评论 -
TCP 为什么是三次握手,而不是两次或四次?
简单说,让双方都证实对方能发收。知道对方能收是因为收到对方的因为收到而发的回应。具体:1:A发,B收, B知道A能发2:B发,A收, A知道B能发收3:A发,B收, B知道A能收...转载 2018-03-21 09:52:06 · 190 阅读 · 0 评论 -
揭秘 HashMap 实现原理(Java 8)
HashMap 作为一种容器类型,无论你是否了解过其内部的实现原理,它的大名已经频频出现在各种互联网面试中了。从基本的使用角度来说,它很简单,但从其内部的实现来看(尤其是 Java 8 的改进以来),它又并非想象中那么容易。如果你一定要问了解其内部实现与否对于写程序究竟有多大影响,我不能给出一个确切的答案。但是作为一名合格程序员,对于这种遍地都在谈论的技术不应该不为所动。本篇文章主要从 jdk 1...转载 2018-03-21 09:39:45 · 165 阅读 · 1 评论 -
俩句话说清楚spring管理bean和依赖注入的原理
第一句,spring容器管理bean的原理: 创建一个类,定义构造方法的参数为bean.xml文件,然后通过dom4j去读取bean.xml文件,得到一个或者多个javabean(id,class)对象(如果是多个bean节点就创建一个list集合来存储读取到的bean节点),然后实例化bean的节点,从list中遍历出所有的bean节点,并通过反射去实例化bean,建立一个Map<...原创 2018-03-30 14:52:39 · 425 阅读 · 0 评论 -
Java对象 64位指针压缩
通常64位JVM消耗的内存会比32位的大1.5倍,这是因为对象指针在64位架构下,长度会翻倍(更宽的寻址)。对于那些将要从32位平台移植到64位的应用来说,平白无辜多了1/2的内存占用,这是开发者不愿意看到的。幸运的是,从JDK 1.6 update14开始,64 bit JVM正式支持了 -XX:+UseCompressedOops 这个可以压缩指针,起到节约内存占用的新参数。 什么是 OOP ...转载 2018-03-22 16:30:23 · 980 阅读 · 0 评论 -
怎么找到数组里的第二大的数
如果仅仅是考虑实现功能,而不考虑时间效率,可以先通过排序算法将数组进行排序,然后根据数组下标来索引访问数组中第二大的数,最快的排序算法一般为快速排序算法,但是其时间复杂度仍未O(nlogn),根据下标访问数组需要遍历一遍数组,时间复杂度为O(n),所以总的时间为O(nlogn)。 有没有更好的方法降低时间复杂度呢?答案当然是有的。可以只通过一遍扫描数组即可找到第二大数,即通过设置两...原创 2018-07-24 10:50:34 · 1628 阅读 · 0 评论