提到职起因

遇到的最难的技术点

遇到问题:adam本地启动时用jdk1.8能够启动,用jdk1.7时尽管启动胜利,然而拜访地址无反馈,而且线上jdk版本也是1.7,错误信息启动几分钟后控制台才有打印,刚开始没看到错误信息,没有脉络,看到错误信息后,明确了起因。

报错提醒:1.WarningService: Shutdown: TcpSocketLinkOutOfMemory

                2.AlarmClock slow alarmAlarm

起因:本地应用默认jvm配置,堆内存、cms perm gen非堆内存不够应用,内存溢出

Perm Gen全称是Permanent Generation space,是指内存的永恒保留区域,因此称之为永恒代。这个内存区域用于寄存Class和Meta的信息,Class在被 Load的时候被放入这个区域。因为Perm里存储的货色永远不会被JVM垃圾回收的,所以如果你的应用程序LOAD很多CLASS的话,就很可能呈现PermGen space谬误。默认大小为物理内存的1/64。

解决方案:启动时配置jvm参数:-Xms2867M-Xmx2867M -Xmn1075M -XX:PermSize=512M -XX:MaxPermSize=512M,调大非堆内存代销

思考:通过上述问题加深了对jvm参数的了解,后续须要看下jvm内存应用状况

问题:在进行金额运算时,发现后果与预计不符,应用了BigDecimal 做除法运算时应用的是默认舍入形式。

解决:除法运算时指定舍入形式,并设置保留位数(防止无线不循环小数状况)。

思考:获取所需数据时,为了防止查问库次数过多,先将数据按范畴都查寻进去放入map中,通过map做映射治理,升高拜访数据库次数,晋升性能;

须要学习

java根底

罕用的设计模式有哪些?

int(M)长度的意义

MySQL 整型长度的含意

java容器(汇合)有哪些?

hashmap hashtable区别

虚援用与弱援用区别

TCP udp区别?实时性要求高用哪个?

Io nio 区别

btree深度为什么不能设置太深

应用数组实现队列

并发包

string为什么定义成final类型 益处

 https://www.cnblogs.com/651434092qq/p/11168608.html

switch反对的数据类型

https://www.cnblogs.com/HDK20...

https://blog.csdn.net/qq_3381...

枚举类在switch...case语句中应用的问题

https://blog.csdn.net/qq_3523...

HashMap和ConcurrentHashMap区别(必考)

ConcurrentHashMap的数据结构(必考)

高并发HashMap的环是如何产生的

Boolean占几个字节

jdk1.8/jdk1.7都别离新增了哪些个性

Exception和Error

多线程

Java 线程状态、线程池状态

Java 线程状态、线程池状态

外围线程池ThreadPoolExecutor的参数(必考)

Java线程池,你理解多少?

为什么当线程池的外围线程满了后,是先退出到阻塞队列,而不是先创立新的线程?

线程池创立线程须要获取mainlock这个全局锁,会影响并发效率,所以应用阻塞队列把第一步创立外围线程与第三步创立最大线程隔离开来,起一个缓冲的作用。

引入阻塞队列,是为了在执行execute()办法时,尽可能的防止获取全局锁。

如何控制线程池线程的优先级

sleep、yield、wait、join的区别(阿里)

volatile作用(必考)

volatile关键字解析

  Java内存模型规定所有的变量都是存在主存当中(相似于后面说的物理内存),每个线程都有本人的工作内存(相似于后面的高速缓存)。线程对变量的所有操作都必须在工作内存中进行,而不能间接对主存进行操作。并且每个线程不能拜访其余线程的工作内存。

java中为什么notify()可能会导致死锁,而notifyAll()则不会

CountDownLatch的两种罕用场景

threadlocal原理

一文搞懂 ThreadLocal 原理

正确理解Thread Local的原理与实用场景

Atomic类如何保障原子性(CAS操作)(必考)

synchronized实现原理?锁降级过程?

synchronized和Lock的区别(必考)

Synchronized与Lock的区别与利用场景

不可不说的Java“锁”事

java锁介绍

为什么要应用线程池(必考)

避免频繁的创立线程耗费服务器资源

CPU资源无限的状况下,新建更多的线程不仅不能解决更多的工作,反而会因为线程间频繁的切换导致解决工作的效率升高

更不便对线程进行集中管理

不停的创立线程,会占用很大的内存空间

线程之间如何通信

volatile 在双重查看的单例中起到的作用:

    次要在于singleton = new Singleton()这句,这并非是一个原子操作,事实上在 JVM 中这句话大略做了上面 3 件事件。      1. 给 singleton 分配内存      2. 调用 Singleton 的构造函数来初始化成员变量,造成实例      3. 将singleton对象指向调配的内存空间(执行完这步 singleton才是非 null了)        在JVM的即时编译器中存在指令重排序的优化。        也就是说下面的第二步和第三步的程序是不能保障的,最终的执行程序可能是 1-2-3 也可能是 1-3-2。如果是后者,则在 3 执行结束、2 未执行之前,被线程二抢占了,这时 instance 曾经是非 null 了(但却没有初始化),所以线程二会间接返回 instance,而后应用,而后牵强附会地报错。

分布式 并发

分布式主键 保障唯一性

幂等性

bitmap

秒杀 限流

限流算法

Spring

spring boot启动过程

spring bean生命周期

如何记忆Spring Bean的生命周期

动静代理

spring 有哪些注解

Spring调用流程

springMVC申请流程详解 - 梦醒点灯 - 博客园

Spring的IOC/AOP的实现(必考)

Spring IOC 实现原理

动静代理的实现形式(必考)

Spring如何解决循环依赖(三级缓存)(必考)

Spring的后置处理器

Spring的@Transactional如何实现的

Spring的事务流传级别

Spring事务流传属性和隔离级别

BeanFactory和ApplicationContext的分割和区别

Spring中BeanFactory和ApplicationContext的区别_

Spring的Interceptor和Servlet的Filter区别

https://blog.csdn.net/qq_4027...

Mysql

索引怎么优化 剖析?

binlog,redolog,undolog都是什么,起什么作用

分库分表 可反复读怎么保障

mysql隔离级别 及实现原理

一文彻底读懂MySQL事务的四大隔离级别

Innodb 中 RR 隔离级别是否避免幻读?

Innodb 中 RR 隔离级别是否避免幻读

MySQL InnoDB的可反复读并不保障防止幻读,须要利用应用加锁读来保障。而这个加锁度应用到的机制就是next-key locks。

Mysql官网给出的幻读解释是:只有在一个事务中,第二次select多出了row就算幻读。

a事务先select,b事务insert的确会加一个gap锁,然而如果b事务commit,这个gap锁就会开释(开释后a事务能够随便dml操作),a事务再select进去的后果在MVCC下还和第一次select一样,接着a事务不加条件地update,这个update会作用在所有行上(包含b事务新加的),a事务再次select就会呈现b事务中的新行,并且这个新行曾经被update批改了,实测在RR级别下的确如此。

如果这样了解的话,Mysql的RR级别的确防不住幻读

起因是后面的UPDATE语句执行之后,会将以后记录上存储的事务信息更新为以后的事务,而以后事务所做的任何更新,对本事务所有SELECT查问都变的可见,因而最初输入的后果是UPDATE执行后更新的所有记录。

多读出的一行,是因为 "MVCC快照读中,“本人的批改可见”。"还是update的锁把快照读变成了以后读。

快照读 以后读?

【MySQL】以后读、快照读、MVCC

mysql索引构造为什么不必hash

mvcc

行级锁 怎么实现的

mysql可反复读怎么实现的

主键索引 非主键索引 汇集索引 非汇集索引 区别

MySQL大数据量表依据非索引字段检索优化

mysql日志 模式

分布式事务 https://www.cnblogs.com/xifen...

分库分表、聚合查问

分库分表:https://www.jianshu.com/p/32b...

事务的基本要素

事务隔离级别(必考)

如何解决事务的并发问题(脏读,幻读)(必考)

MVCC多版本并发管制(必考)

InnoDB的行锁/表锁

myisam和innodb的区别,什么时候抉择myisam

MyISAM与InnoDB 的区别(9个不同点)

为什么抉择B+树作为索引构造(必考)9.索引B+树的叶子节点都能够存哪些货色(必考)

查问在什么时候不走(预期中的)索引(必考)

sql如何优化

explain是如何解析sql的

order by原理

深度分页

Redis

redis如何保障和数据库一致性

Redis数据分片是怎么做的

一致性hash怎么实现的

redis系列之——一致性hash

redis部署形式 集群 哨兵

Redis(二)冰叔带你理解Redis-哨兵模式和高可用集群解析

redis哨兵模式选举机制

《Redis长久化形式》

RDB形式:定期备份快照,罕用于劫难复原。长处:通过fork出的过程进行备份,不影响主过程、RDB 在复原大数据集时的速度比 AOF 的复原速度要快。毛病:会丢数据。

AOF形式:保留操作日志形式。长处:复原时数据失落少,毛病:文件大,回复慢。

也能够两者联合应用。

Redis反对的数据类型(必考)

Redis反对五种数据类型:string(字符串),hash(哈希),list(列表),set(汇合)及zset(sorted set:有序汇合)。

Redis的LRU过期策略的具体实现 

https://blog.csdn.net/nakiri_...

redis过期怎么实现的

Redis 的过期策略是如何实现的?

如何解决Redis缓存雪崩,缓存穿透,缓存击穿

缓存穿透,缓存击穿,缓存雪崩解决方案剖析

缓存穿透和缓存击穿解决

Redis 分布式优缺点

Redis的利用场景

Redis的管道pipeline

redis外部数据结构

zset跳表的数据结构 实现原理(必考)

音讯队列

Kafka常见面试题

音讯队列积压从原理剖析怎么解决?

Kafka集群音讯积压问题及解决策略

kafka 什么时候慢? kafka为什么快?

Kafka 为什么那么快的 6 个起因!

kafka reblance 怎么实现的?

Kafka Rebalance机制剖析

目前kafka提供了5个协定来解决与consumer group coordination相干的问题:

Heartbeat申请:consumer须要定期给coordinator发送心跳来表明本人还活着

LeaveGroup申请:被动通知coordinator我要来到consumer group

SyncGroup申请:group leader把调配计划通知组内所有成员

JoinGroup申请:成员申请退出组

DescribeGroup申请:显示组的所有信息,包含成员信息,协定名称,调配计划,订阅信息等

kafka 生产端 实现多线程生产

正确处理kafka多线程生产的姿态

如何保障Kafka不失落音讯?

Kafka如何保障音讯不失落不反复

面试官问我如何保障Kafka不失落音讯?我哭了!

Consumer端

  consumer端失落音讯的情景比较简单:如果在音讯解决实现前就提交了offset,那么就有可能造成数据的失落。因为Kafka consumer默认是主动提交位移的,所以在后盾提交位移前肯定要保障音讯被失常解决了,因而不倡议采纳很重的解决逻辑,如果解决耗时很长,则倡议把逻辑放到另一个线程中去做。为了防止数据失落,现给出两点倡议:

enable.auto.commit=false  敞开主动提交位移

在音讯被残缺解决之后再手动提交位移

手动提交可能导致反复生产:比方你刚刚生产完音讯之后,还没提交 offset,后果本人挂掉了,那么这个音讯实践上就会被生产两次。

解决反复生产:1.建设去重表,保障解决幂等性

如何保障音讯的程序生产?

深度分析 Kafka/RocketMQ 程序音讯的一些坑

生产端:

如果须要进行音讯具备生产程序性,能够在生产端指定这一类音讯的 key,这类音讯都用雷同的 key 进行音讯发送,kafka 就会依据 key 哈希取模选取其中一个分区进行存储,因为一个分区只能由一个消费者进行监听生产,因而这时候音讯就具备音讯生产的程序性了。

生产端:

JVM

oom异样场景

https://www.cnblogs.com/devel...

ArrayList addAll 办法 ,批量增加 频繁扩容 须要控件间断 oom;解决:初始化汇合大小,原本是数据汇总再插入数据库,不须要汇总 能够每个外面都插入

CPU过高排查

记一次Java利用造成CPU过高的排查过程

应用top命令查问服务cpu应用状况

应用top -Hp 31737查问31737过程中各个线程的资源使用率

应用printf "%x\n" 5322把线程id转化为十六进制(14ca),因为打印线程栈的时候,本地线程标识nid是用十六进制示意的

应用jstack命令打印堆栈信息,jstack 31737 | grep -10 14ca

查找本地线程标识为14ca的线程堆栈信息

查看源码

频繁fullgc 怎么排查 解决?

cms和g1 区别?别离什么场景下应用?

调优

syschronize 1.7优化

await sleep

cpu比拟高查找起因

内存溢出了怎么查找

jvm命令

运行时数据区域(内存模型)(必考)

垃圾回收机制(必考)

垃圾回收算法(必考)

Minor GC和Full GC触发条件

GC中Stop the world(STW)

各垃圾回收器的特点及区别

双亲委派模型

JDBC和双亲委派模型关系

Java根底

ZooKeeper

CAP定理

ZAB协定

leader选举算法和流程

Dubbo

调用流程

Dubbo反对哪些序列化机制

linux

查看端口占用命令

其余

高并发零碎的限流如何实现

高并发秒杀零碎的设计

负载平衡如何设计

补充

另外还会考一些计算机网络,操作系统啊之类的。像音讯队列,RPC框架这种考的比拟少。

计算机网络就是分层啊,tcp/udp啊,三次握手之类的。操作系统就是过程与线程啊,过程的数据结构以及如何通信之类的。数据结构的排序算法也比拟常考,考的话肯定会让你手写个快排。剩下的算法题就靠LeetCode的积攒了。其实非算法岗考的算法题都蛮简略的,很多题齐全就是考查你智力是否失常,略微难点的波及到一些算法思维的依照LeetCode题目类型的分类,每种题做一两道根本就能齐全应酬面试了。

面试感触及评估

除了外企,体验最好的就是阿里。相对的怀才不遇,无论是面试官的业余水平还是面试官对参加面试人员的态度都齐全突出于其余公司。十分的尊重人,以及会疏导我去作出正确的答复,惟一就是阿里的HR是十分强势的,永远有一票否决权。而有些公司面试官会成心误导你,千方百计让你说出谬误的答案,并且有些态度极其高傲,让人感觉很不尊重人。这里点名批评面试体验最差的两家公司:美团和Boss直聘。

外企的话,体验都很好。微软是英文面的,亚马逊不是。这俩都是以算法为主,微软除了算法还聊了操作系统和计算机网络,亚马逊聊了较长时间的我的项目细节。

最初

最初说下本人的状况,17年在京东实习,19年7月到职。正式工作工夫很短,就一年(算实习两年),而且19年有半年的工夫筹备考研所以有半年的空档期,这也是为什么我被很多HR挂了的起因。尽管Offer没拿几个,然而一半多都面到HR面了,所以对于两三年教训的感觉整顿的问题还是比拟有代表性的。

算法题

最长回文子串

大数据文件 30m 怎么排序

矩阵

小顶堆大顶堆

100万个数据取前20大的数据

疾速排序

单链表获取倒数第n个元素

合并两个有序链表,LeetCode21题。(猿辅导)

反转链表,LeetCode206题。(头条,搜狐)

两个单单链表相交

杨辉三角求数字地位,LeetCode118,119题相干。(滴滴)

循环有序数组的查找,LeetCode33题。(滴滴)

求二叉树的最近公共先人,LeetCode236题。(滴滴)

求阶乘后的0,LeetCode172题。(蚂蚁金服口试)

实现一个增删查性能的LinkedList,LeetCode707题。(Boss直聘口试)

矩阵置0,LeetCode73题。(跟谁学口试)

二又树的层序遍历,LeetCode102题。(搜狐)

中文转数字/数字转中文。(头条)

链表的两数相加,LeetCode2题类型题。(头条)

括号匹配,LeetCode20题。(拼多多)

队列实现栈,栈实现队列,LeetCode225,232题。(拼多多)

判断字符串(IP地址)是否在汇合内。(微软)

中断表达式的计算,LeetCode224题。(微软)

划分字母区间,LeetCode763题。(亚马逊)