JAVA学习
PJlei
学生
展开
-
秋招必备java面试必问缓存中间件Redis总结脑图
原创 2020-10-25 17:33:54 · 183 阅读 · 0 评论 -
Java内存模型JMM以及happens-before
java内存模型的抽象结构在命令式编程中,线程之间的通信机制有两种:共享内存和消息队列。在共享内存的模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在消息传递的并发模型里,线程之间并没有公共状态,线程之间必须通过发送消息来显式进行通信。在java中,所有的实例域、静态域和数组元素都存储。在堆内存中,堆内存在线程之间共享。(共享变量这个术语代指实例域、静态域、和数组元素)。线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存,本地内存中存储了该线程读-写共享变原创 2020-09-25 20:18:51 · 144 阅读 · 0 评论 -
java线程安全问题及其解决方法
线程安全问题主要原因是因为存在多条线程共同操作共享数据,同时cpu采用时间片方式调度线程,线程交替执行,导致程序的语义发生变化。解决办法java中主要有两种方式来结局:互斥同步非阻塞式同步JDK1.5开始,提供java.util.concurrent.atomic包,这个包中的原子操作类提供了更为简单高效、线程安全的方式来更新一个变量的值,Atomic系列类原理都是CAS操作。互斥同步(悲观锁)互斥同步是指当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他原创 2020-09-22 21:16:16 · 362 阅读 · 1 评论 -
java并发—CAS操作
CAS简介CAS指令需要三个操作数,分别是内存地址(在Java内存模型中可以简单理解为主内存中变量的内存地址)、旧值(在Java内存模型中,可以理解工作内存中缓存的主内存的变量的值)和新值。CAS操作执行时,当且仅当主内存对应的值等于旧值(缓存)时,处理器用新值去更新旧值,否则它就不执行更新。但是无论是否更新了主内存中的值,都会返回旧值,上述的处理过程是一个原子操作。知识点补充: 缓存的概念cpu处理数据中,频繁使用的内存会缓存 在处理器L1、L2、L3高速缓存里,那么数据的操作都会在处理原创 2020-09-22 21:15:29 · 120 阅读 · 0 评论 -
java多线程内存可见性以及Happens-before原则
指令重排,CPU的乱序执行cpu允许将多条指令不按程序规定的顺序,分开发送给各相应电路单元处理的技术。在这期间不按照规定的顺序执行指令,然后由重新排列的单元将各执行单元结果按指令顺序重新排列。采用乱序执行技术的目的是为了使CPU内部电路满负荷运转并相应提高了CPU的运行程序的速度举例:A、B、C三个名人为晚会题写横幅“春节联欢晚会”六个大字,每人各写两个字。如果这时在一张大纸上按顺序由A写好"春节"后再交给B写"联欢",然后再由C写"晚会",那么这样在A写的时候,B和C必须等待,而在B写的时候C仍原创 2020-09-22 15:08:47 · 155 阅读 · 0 评论 -
大厂面试被问什么是OOM?竟然不知道是out of memory?建议放弃,我也太惨了吧
什么是OOM?out of memory内存用完了JVM没有足够的内存来为对象分配空间并且垃圾回收器也没有空间可以回收时,就会抛出这个error。为什么会OOM?即为什么会没有内存?分配的少了:虚拟机本身可以使用的内存就少(一般通过启动时的VM参数指定)应用使用的太多,并且用完没有释放,浪费了,此时会出现内存泄漏或者内存溢出。内存泄漏:申请使用的内存没有释放,导致虚拟机不能再次使用的内存,因为申请者不用了,而又不能被jvm分配给别人用。内存溢出:申请的内存超出了JVM能提供的内存大小原创 2020-09-20 16:34:08 · 114 阅读 · 0 评论 -
为什么hashMap中桶的个数超过8才转换为红黑树
这个问题在面试的过程中被问到了,之前在学习过程中也想到过这个问题,但是没有仔细的追究,面试被问到,我也只是从查找时间和空间上的一种权衡,简答的说了一下。面试官让我回去仔细查一查,好吧,我只好回来再查查了,尴尬了。直接分析源码:/** * The bin count threshold for using a tree rather than list for a * bin. Bins are converted to trees when adding an element to a * bi原创 2020-09-20 10:24:57 · 1814 阅读 · 1 评论 -
Java后端开发面试算法题(实习)
京东Java后端开发面试算法题(实习)1.给定一个链表,判断链表是否有环/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { //方原创 2020-09-19 15:39:49 · 804 阅读 · 0 评论 -
java中子类调用父类构造方法,注意事项
继承有个特点,就是子类无法访问父类的private字段或者private方法。例如,Student类就无法访问Person类的name和age字段:class Person { private String name; private int age;}class Student extends Person { public String hello() ...原创 2020-04-10 18:37:05 · 3094 阅读 · 0 评论 -
集合实现类ArrayList
JAVA集合框JAVA的集合框架是java.util包中提供的一系列工具它为程序处理对象组提供了标准的方式1.集合实现类ArrayListpackage TestArrayList; import java.util.ArrayList; public class TestArrayList{ public static void main(String[]原创 2016-09-13 21:01:43 · 601 阅读 · 0 评论 -
JAVA中的泛型
没有泛型的情况数据类型转换比较复杂String i2=(String)g1.getObj(); //不能确定转换过程中g1原来的类型Integer i3=(Integr)g2.getObj();在转换过程中会产生不安全因素泛型就是将类型参数化,提高类型的安全并简化类型的转换过程。安全:泛型就是将类型的错误提前到编译期,普通强制转换只是在运行期才能发现错误泛型处理的是类的原创 2016-09-12 21:13:28 · 212 阅读 · 0 评论 -
java 接口
Interface指定一个类必须做什么,而不规定如何去做。没有实例变量。一旦接口被定义,任何类可以实现一个接口。实现接口的类可以自定义自己的方法,利用多态,实现一个接口,多个方法。当实现一个接口的方法时,必须声明为public。类在实现接口的方法时可定义自己的成员。定义callback为接口,Client为接口的实现类,Callback c = new Client();c被定义成原创 2016-09-09 19:14:48 · 234 阅读 · 0 评论