
Java
文章平均质量分 59
return_a_bug
这个作者很懒,什么都没留下…
展开
-
以ReentrantLock为例详细讲解AQS底层原理
AQS可重入锁已成功获取锁的线程再次获得该锁时可以为count++,只要count>0表示锁被该线程持有,每次释放锁count–直到count=0表示该线程不再持有锁;可重入锁可以有效避免单一线程自己出现死锁。LockSupportLockSupport是用来创建锁和其他同步类的基本线程阻塞原语;其中的park()和unpark()方法用来阻塞线程和解除阻塞。synchronized中的wait()实现线程等待,notify()实现线程唤醒;必须先等待再唤醒;lock中condition原创 2021-08-08 19:27:30 · 252 阅读 · 0 评论 -
Redis常见面试
1.Redis有哪些数据结构1.String类型,相当于Java中的String,Redis中通过C语言用一种叫做SDS(简单动态字符串)的数据类型实现的,常用set key value;get key;mset key1 value1 key2 value2;mget key1 key22.list列表,相当于Java中的双向链表LinkedList,在数据量少的时候底层使用的是ziplist这种占空间较少的结构,在数据量变多后会用ziplist+指针形成链表,常用lpush;lpop;rpush原创 2021-08-01 18:14:22 · 249 阅读 · 0 评论 -
阿里JAVA后端一面
阿里Java后端一面JAVA1.泛型以及类型擦除-泛型回答了几个类型(?,K,V,E,T),类型擦除没太了解过,当时回答的是编译时不指定具体类型,运行时指定,应该答错了,这块没仔细看。2.HashMap和ConcurrentHashMap的区别-回答了1.8前后这两个结构的区别,八股文没啥好说的3.JAVA内存模型-他问的是java内存模型,我以为说的是JMM,我又问了一遍面试官想问的是JMM还是JVM,他说是JVM,然后开始背八股文,但是这一块我一直不明白,网上很多博客都把JAVA内存模型=原创 2021-03-31 11:59:37 · 151 阅读 · 3 评论 -
MySQL MVCC的实现机制
**先拖一下写这篇博客的视频来源**b站一个叫诸葛老师讲的MVCC机制,思路很清晰,一遍就看明白了,建议先去看一下这个视频,再来看这篇博客,更好理解一些。首先理解两个概念:1.MVCC会给我们数据库的每一个表添加两个隐藏字段:当前事务ID,以及undo日志的回滚指针;根据回滚指针我们可以按顺序生成如下图所示的一个版本链。2.ReadView快照视图ReadView视图在产生的时候会记录下当前活跃所有活跃(也就是还没提交)的事务数组,以及所有的事务(包括已提交)里面ID最大的事务ID值。原创 2021-03-25 20:55:36 · 128 阅读 · 0 评论 -
网易杭研Java后端开发一面面经
1.项目背景、模块分工、自己的任务、干了什么2.Java如何保证线程安全-回答了1.synchronized关键字 2.Lock锁 3.ThreadLocal3.你提到了synchronized关键字和Lock锁,讲一下区别-Lock可以公平/非公平锁,等待可中断,是非重量级锁4.你提到了公平锁和重量级锁,解释一下-synchronized是1.6之前是重量级锁,1.6以后优化(讲了一下锁升级的过程)-从AQS的内部结构谈起分析了一下如何实现公平锁和非公平锁5.请你说说如何设计一个MySQL原创 2021-03-25 09:41:41 · 148 阅读 · 1 评论 -
Java面试(美团)
美团一面(到店)1.自我介绍2.介绍一下项目-背景讲了一下,举了个例子让面试官大概明白了是干嘛的,然后说了一下项目是为了解决什么问题。3.项目里有哪些难点怎么解决的-回答的使用redis解决读hbase/janusgraph慢的问题然后又问了关于redis你还知道什么,我说redis的底层数据结构我讲了一下,现在突然想起来之前准备的redis持久化方式没给面试官说…4.在这个项目中你学习了什么-我说学会了学习分析开源项目的代码…然后我实在说不出来了(反正一紧张啥也不记得了…)OS1.进程原创 2021-03-23 15:46:38 · 240 阅读 · 1 评论 -
Java面试:1.8前后的HashMap、ConcurrentHashMap
HashMap1.8以前(Entry数组+链表)loadfactor负载因子0.75DEFAULT_INITIAL_CAPACITY 默认容量16threshold容量*loadfactorput先扩容再插入如果定位到的数组位置没有元素 就直接插入。如果定位到的数组位置有元素,遍历以这个元素为头结点的链表,依次和插入的 key 比较,如果 key 相同就直接覆盖,不同就采用头插法插入元素。HashMap1.8以后(Node数组+链表/红黑树)链表长度>8并且数组>64转化成红黑原创 2021-03-22 11:15:10 · 205 阅读 · 1 评论 -
面经总结:JAVA后端开发
看了这么多面经,有很多问题答案并不统一,这里列举了一些答案比较有歧义的,并且分享一下我认为正确的答案,希望下个月的面试顺利。TCP三次握手为什么三次握手保证客户端到服务端以及服务端到客户端之间都能成功发送接收数据,以防出现客户端发送给服务端连接请求因网络原因没有送达,超时后客户端重新发送一个连接请求,而此时服务端接收并确认,建立连接后传输数据释放连接,之后收到了超时的连接请求,导致误认为接收到的是新的连接请求,从而打开连接不停的等待客户端发送数据。为什么四次挥手第一次挥手客户端发送给服务端FIN标原创 2021-03-19 13:18:39 · 270 阅读 · 0 评论 -
Java面试:说一说项目的技术选型
从以下方面去讲JDK版本:JDK8/JDK7 + OracleJDK/OpenJDK?Java开发框架:Spring Boot/Spring + Hibernate/MyBatis?前后端分离:单页应用/模板引擎?前后端接口文档自动生成:Swagger?业务端逻辑校验框架:Functional Validator/Fluent Validator/Hibernate Validator?...原创 2021-03-15 20:26:48 · 813 阅读 · 0 评论 -
Java面试:使用多线程实现交替打印奇偶数
public class test { public static int count=0; private static final Object lock =new Object(); //lock是当前对象的锁 public static void main(String[] args) { /** 此处()->匿名函数相当于 new Runnable(){ @Override public void run()}原创 2021-03-15 12:49:01 · 175 阅读 · 1 评论 -
类加载器详细讲解
类加载器一个类的加载需要经过这三个阶段:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LAF6u8YW-1608515701430)(/Users/wuchao/Library/Application Support/typora-user-images/image-20201218133921046.png)]类加载器虚拟机内置加载器根类加载器(Bootstrap)是最底层的加载器,由c++实现,没有父加载器,也没有继承ClassLoader类,它主要负责加载由原创 2020-12-21 09:55:18 · 395 阅读 · 3 评论 -
反射、类加载器
反射反射机制的作用可以通过反射机制操作(读和修改)字节码文件(*.Class)。反射机制涉及的java包java.lang.reflect.*;反射机制相关的重要类java.lang.Class;代表整个字节码java.lang.reflect.Method;字节码中的方法字节码java.lang.reflect.Constructor;字节码中的构造方法字节码java.lang.reflect.Field;字节码中的属性字节码获取Class字节码的三种方式1.使用Class类的静态方原创 2020-12-18 13:31:43 · 253 阅读 · 0 评论