
Java面试总结
文章平均质量分 91
LuckyWangxs
挺秃然的
展开
-
Java线程池详解(执行原理、拒绝策略、Executors三种线程池对比)
线程池,顾名思义,存放线程的池子,线程池的创建与管理是需要消耗一定的资源的,现在假设一个场景,在你的程序中,存在一些高并发的任务,而且任务执行时间往往都不长,那你就需要频繁的创建与销毁线程,这样对服务器资源来说是极大的浪费,如果采用线程池,将线程提前创建好,用的时候直接拿,不用的时候放回去,则会节省很多资源。当然线程池不仅仅能维护好线程,并且能根据不同的场景定制化不同的线程池,线程数量也有弹性,还能维护需要执行的任务,下面我们来详细探讨。原创 2023-04-13 18:48:39 · 1629 阅读 · 6 评论 -
DCL 单例模式是否需要volatile?
DCL单例模式是否需要volatile修饰原创 2023-02-17 14:28:02 · 1132 阅读 · 10 评论 -
Redis底层数据结构详解(二)
Redis底层数据结构一、整体结构1. 类型:type属性2. 编码:encoding属性3. *ptr指针二、字符串对象(包含三种数据结构)① embstr结构② int结构③ raw结构raw与embstr有什么区别呢?面试题:Redis中字符串的value最大不能超过多少呢?三、list对象四、hash对象五、set对象六、zset对象上篇文章介绍了Redis底层涉及到的各类数据结构,但只知道底层我们无法更系统地了解Redis底层到底是如何设计与实现的,今天这篇文章,是基于上一篇文章的,相当于是从原创 2021-12-22 17:48:59 · 1267 阅读 · 0 评论 -
Redis底层数据结构详解(一)
《Redis底层原理、Redis详解》该篇章分为两部分,第一部分介绍Redis底层数据结构,第二部分介绍Redis五大数据类型与Redis底层数据结构的关系,包括原理,优势与劣势,每种数据类型什么情况下该使用什么数据结构以及调优参数等等,使读者深入了解Redis。本文为第一部分,主要介绍了Redis底层的六种数据结构,帮助读者理解隐藏在Redis五大数据类型背后的数据结构原创 2021-12-21 18:19:38 · 1513 阅读 · 0 评论 -
Java大厂面试总结(包含面试题)
我是一名20年毕业生,至今毕业已经一年出头,算上实习经历,也只有一年半的工作经验,而且我并没有选择在金九银十的时候去找工作,机会不是很多,加上资历尚浅,找工作其实还蛮难的。我从今年11月1开始看机会,一直到今天,手里也拿了不少offer,但并没有收获大厂,很遗憾。今天这篇文章也说下最近面试的一些问题吧,大家可以提前做准备(最后会凭记忆奉上面试题)1. 简历问题简历不需要追求完美,你需要考量的是,你写的简历是否跟你当前阶段的资历与能力所匹配,即使你什么都会,也不要什么都往上写,我的前领导告诉我,你什.原创 2021-11-26 11:26:20 · 1265 阅读 · 0 评论 -
多线程必备基础
多线程基础1、概念1.1 什么是线程1.2 线程的创建与运行1.3 死锁1.4 守护线程与用户线程1.5 Join、Yield、Sleep1.5.1 join1.5.2 Sleep1.5.3 Yield1.5.4 wati、join、sleep、yield总结2、 ThreadLocal3、 InheritableThreadLocal4、 多线程其他基础4.1 理解并发与并行4.2 Java中线程安全问题4.3 Java中共享变量的内存可见性问题1、概念1.1 什么是线程 &n原创 2021-09-26 15:36:41 · 410 阅读 · 0 评论 -
算法(一):二分查找Java版
一、思路 二分查找需要在具有索引的有序序列集合上进行操作。首先二分查找需要维护左中右三个索引,假设现在有一个升序序列,首先以序列第一位为左左索引,最后一个为右索引,以左右平均数为中索引,每次取出中索引的数与查找目标作比较,如果中索引的元素小于目表元素,则需要去大于中索引的搜索空间搜索,将中索引加1赋值给左索引,重复上述比较操作,直到查到目表或左索引大于右索引为止。二、代码1. 循环版本/** * 常规循原创 2021-09-22 15:54:16 · 195 阅读 · 0 评论 -
NIO多路复用底层原理(Select、Poll、EPoll)
NIO一、NIO概述1. BIO2. NIO二、文件描述符三、Select、Poll、EPoll1. Select2. Poll模型3. EPoll模型四、总结1. 大致过程如下:一、NIO概述1. BIO BIO,即Blockig IO,阻塞IO,一个线程对应一个连接,如果你的服务器有很多用户,每个用户都需要与你的服务器建立一个连接,那么你有多少用户,你的服务器就得创建多少个线程,显然是不显示的,而且每个线原创 2021-09-06 17:46:47 · 6164 阅读 · 1 评论 -
面试干货11——ThreadLocal原理(存储原理、内存泄漏)
本文为转载文章,在转载基础上多加了张结构图作者:ingxin链接:https://www.jianshu.com/p/3c5d7f09dfbdThreadLocal ThreadLocal使用方法很简单static final ThreadLocal<T> sThreadLocal = new ThreadLocal<T>();sThreadLocal.set(t)sThr.转载 2021-08-27 15:59:46 · 776 阅读 · 0 评论 -
面试干货10——聊一聊Redis的应用吧!(实现分布式锁、缓存、抽奖、热搜、点赞、商品筛选..)
Redis这样用一、String类型1. 对String类型的理解2. 常用命令如下3. 应用场景① 分布式锁② 缓存设计③ 全局唯一序列号、计数器(value为Numbers类型)④ 判断大数据量包含(在线用户数量统计、布隆过滤器)(bit类型)二、hash哈希结构1. 对hash结构的理解2. 常用命令3. 应用场景① 缓存设计② 购物车实现三、List结构1. 对list结构的理解2. 常用命令3. 应用场景① 消息队列实现② 关注的最新消息列表(微信朋友圈、抖音我的关注的视频)四、Set数据结构1.原创 2021-08-19 18:48:02 · 1266 阅读 · 0 评论 -
面试干货9——synchronized的底层原理
synchronized底层原理推荐:在准备面试的同学可以看看这个系列一、synchronized的用法问题1:synchronized为什么只能锁引用类型?二、对象在内存中的布局究竟是什么样的1. 所有引用类型对象都有如下布局:2. 数组类型有如下布局:3. 详细的布局图如下:三、synchronized的底层原理1. JDK1.6之前的synchronized是怎样的?2. JDK1.6及以后synchronized是如何实现的① 偏向锁② 轻量级锁③ 重量级锁推荐:在准备面试的同学可以看看这个系列原创 2021-08-17 18:27:38 · 2679 阅读 · 10 评论 -
面试官:可以聊聊有关数据库的优化吗?
刁钻面试官一、你怎么看待数据库优化这件事?一、你怎么看待数据库优化这件事?原创 2021-07-28 18:21:51 · 2056 阅读 · 2 评论 -
面试干货7——刁钻面试官:关于redis,你都了解什么?
面试高频问题一、问题1:1. 为什么要用redis?业务场景有哪些?追问1: 可以说说redis数据类型吗?追问2:说到命令,那你对redis的事务了解吗?追问3:如何防止数据丢失?对持久化有了解吗?深入追问:如果让你来选择一种持久话方式,你怎么选?二、问题2:1. redis为什么那么快呢?追问1:为什么redis是单线程的?追问2:既然有瓶颈,那你是如何解决的?三、问题3:1. 什么是缓存穿透、缓存击穿与雪崩?追问1:你有遇到过上述情况吗?如何解决?一、问题1:1. 为什么要用redis?业务场景有原创 2021-07-19 18:02:08 · 3685 阅读 · 10 评论 -
面试干货6——输入网址按下回车后发生了什么?三次握手与四次挥手原来如此简单!
面试总结一. 按下回车后的流程二. DNS解析(简单介绍)三. 3次握手1. 三次握手具体流程2. 为什么要进行三次握手,而不是两次或四次3. 什么是半连接队列?4. 三次握手可以携带数据吗?5. ISN是动态生成的吗?为什么?6. SYN攻击有了解吗?四、4次挥手1. 四次挥手详细过程2. 为什么握手是三次,而挥手时需要四次呢?3. 请你解释一下TIME_WAIT状态。 在面试过程中,有些看似简单的问题,实在存原创 2021-07-13 17:06:37 · 2876 阅读 · 2 评论 -
面试干货5——请详细说说JVM内存结构(堆、栈、常量池)
这里写目录标题一、概述二、运行时数据区一、概述 JVM是中、高级开发人员必学的,虽然这玩意对平时的开发没有卵用,但是有助于你理解项目从加载到运行的整个流程,有助于你处理生产上出现的问题,比如我们常见的OOM,如果你对JVM一无所知,你会知道为什么会OOM吗?你知道如何监控吗?你懂得怎么处理吗? 前面的文章讲解了类加载原创 2021-07-09 15:36:50 · 3353 阅读 · 0 评论 -
面试干货4——你对Java类加载器(自定义类加载器)有了解吗?
类加载器一、类加载器的作用二、Java虚拟机类加载器结构1. 引导类(启动类)加载器2. 扩展类加载器3. 系统类加载器三、类加载器的加载机制1. 全盘负责2. 双亲委派3. 缓存机制四、自定义类加载器一、类加载器的作用 Java代码是不能直接运行的,需要通过编译器编译成JVM能够识别的二进制字节码文件,而类加载器的作用就是将这些二进制字节码文件即.class文件装载进虚拟机。二、Java虚拟机类加载器结构原创 2021-06-24 14:42:59 · 2752 阅读 · 0 评论 -
面试干货3——基于JDK1.8的HashMap(与Hashtable的区别、数据结构、内存泄漏..)
HashMap一、HashMap基本知识1. 简述2. 继承关系3. 基本属性4. 遍历二、HashMap与HashTabl的区别1. 继承结构2. 对待null3. 线程安全性4. 初始容量与扩容5. 计算hash的方法三、HashMap数据存储结构1. JDK1.8之前2. JDK1.8时3. put方法剖析四、结语一、HashMap基本知识1. 简述 HashMap基于Map接口实现,元素以键值对的方原创 2021-06-08 17:49:28 · 2975 阅读 · 9 评论 -
面试干货2——你对Java GC垃圾回收有了解吗?
GC垃圾回收1. 什么是GC2. GC主要针对区域3. Java如何判断对象是否存活4. GC垃圾回收机制4.1 标记-清除法4.2 标记-整理法4.3 复制算法4.4 分代收集算法5. 内存分配策略及垃圾回收过程5.1 为什么新生代要有survivor区?5.2 为什么要有两个survivor区?6. 总结1. 什么是GC GC全名Garbage Collection,垃圾收集,垃圾回收,这是Java区别于C原创 2021-05-11 18:41:29 · 2999 阅读 · 23 评论 -
请你说说Java类的加载过程
1. 什么是类的加载过程 一个Java文件从编码完成到最终运行,一般会经历两个阶段:编译期、运行期。编译,即通过javac命令,将Java文件转化为二进制字节码文件,即.class文件;运行,则是将.class文件交给JVM执行。而本文所说的类加载过程就是将.class文件中类的元信息加载进内存,创建Class对象并进行解析、初始化类变量等的过程 &nb原创 2021-05-11 11:32:13 · 17268 阅读 · 38 评论