当前位置 博文首页 > chenpeng19910926的专栏:面试杂项
延迟消息队列的实现方式---考察架构设计和逻辑思维性--架构设计----NO;
cms 垃圾回收期的高阶—答不上来
持久带是否发生fullGC ok
jps----ok
jstack----ok
jmap jhat------dump日志,jhat 不清楚
jstat----不清楚
dump文件中的分析
jstack Dump 日志文件中的线程状态
dump 文件里,值得关注的线程状态有:
死锁,Deadlock(重点关注)
执行中,Runnable
等待资源,Waiting on condition(重点关注)
等待获取监视器,Waiting on monitor entry(重点关注)
暂停,Suspended
对象等待中,Object.wait() 或 TIMED_WAITING
阻塞,Blocked(重点关注)
停止,Parked
分析过dump文件但是,不深入;
cpu彪高----》线上问题解决 no
?
jvm理解程度一般,线上解决问题能力较弱
=========
grep 命令各种线上日志查询 yes
tail 命令 ok
find -type f -size +1000m |xargs 有点忘记了,但是知道这样写
tar -zcvf ok
maven release SNAPSHOT的区别 no
git命令reset rebase的区别 no
工程素质中等水平
========
=========
mySql 索引的数据结构 B+数 yes
为什么?yes
mySql联合索引的最左前置规则 yes
分库分表经验-易购索引的注意事项:yes
mysql 以及使用 以及遇到问题的意识 OK 数据库还是不错的
==========
工作线程数究竟要设置为多少?
没有好的思路
?
?
5.
a) dubbo 集群的工作方式,同步,异步 方式接触较少。
b) redis 数据结构,5种, OK , redis CLUSTER 方式: 数据分片,数据持久化: AOF ,rdb 方式 OK 。
c) MQ : 使用过kafka, 注册topic, ok 。 相对较了解。 kafka 增加节点,系统会有什么变化
d) GIT : 大部分使用 ide 方式。 rebase 用法,不了解。 stash 用法,没用过。
?
1. 个人介绍及项目介绍(考察沟通能力)
2. 在公司项目的业务情况(考察业务需求把握能力)
3. 团队情况和直接管理人员情况,任务开发分配情况(考察基本项目管理技能)
4. spring mvc的工作流程,微服务不采用spring boot 原因(考察开发技能和架构把握能力)
5. 具体技术细节提问(考察技术深度)
a)dubbo 集群的工作方式
b)redis 基本数据结构,cluster方式,持久化方式
c)rabbitMq,ecchange,channel概念解析,集群的有几种方式,使用场景和优缺点。
d). git : rebase/merge 区别,团队使用注意点,stash 用法
6. 离职原因(工作稳定性)
7. 工作中出彩的地方和困难介绍(考察项目实战能力)
8. 职业规划和长短板
?
?
新生代用什么垃圾回收算法---no
老年代的垃圾回收算法---no
1 看完书之后知识没有成体系
jvm 命令-jps -no
========
工程素质:
线上日志查询---no
grep ok
netstat no
tail -f yes
find 命令 no
xargs no
maven 看依赖树 yes
maven release SNAPSHOT的区别 no
git reset rebase的区别 no
=========
kafka --一点也不了解
rabbitMQ用什么语言实现的 no
?
5.MySql了解tree和hash两种所以,具体区别一般;
联合索引知识了解比较少;
?
?
git reset 、rebase和 revert的区别?–OK
Maven的Snapshot版本与Release版本的区别-了解一些,但是不全面
线上CPU彪高问题排查–NO
线上OOM问题排查-NO
JVM内存模型以及CMS垃圾回收器的相关-OK
JVM基础命令-个别命令不熟悉;
Linux基础以及加深-linux基础良好,复杂命令不牢固
java多线程的理解和设置工作线程数方案以及思路-有一定的经验,但是不完善
?
分库分表的设计经验以及领域划分经验-回答的不太好
延迟消息的架构设计-OK,这个问题答的思路很清晰
?
5.知道基本优化参数,不知道OOM如何产生;也不知道栈内存溢出如何复现;
?
?
单例:饿汉、懒汉、双锁、静态内部类
java类加载机制,不ok
?
?
?
?
1.
String StringBuffer StringBuilder 区别String ok StringBuffer StringBuilder区别回答不正确 不OK
HaspMap 结构:数据+链表;下标算法:没回答上来;新元素放到链表位置:记不清了 不OK
HashMap与HashTable: HashMap是线程安全的(回答错误)与HashTable区别:不知道 不OK
concurrenthashmap: 比HashMap并发好。效率高 锁分段算法:没看过 不OK
object equals == 区别:OK String equals ==: ok
二叉树结构:ok 特点:回答的不完善 红黑树:忘记了 不OK
2.
状态:就绪 运行 结束 等待 堵塞; sleep wait 区别:sleep 不释放锁 wait 释放锁 notify后流程:回答不完善
sync : 原理基本OK, 加在不同地方: 锁类、锁对象 基本OK
lock : CAS实现
volatile:可见性、不能保证线程安全,应用场景:写少读、并发少
ThreadLocal:原理OK;子线程用父线程TheadLocal对象:可以,不知道如何实现
3.
IOC:默认:多例
AOP: 动态代理:(提示出)jdk cglib 区别:不知道
bean 循环依赖:SPRING解决方案 没看过
事务传播:原理基本知道AOP实现
4.
OOM: 堆、方法区会引起
回收机制:新生代 用标记清除比较多 老年代忘记了
5.
策略:场景题:计算器设计 OK
6.
引擎:innodb\myisam 对锁的区别: 回答不透彻 ;对事务的区别:innoDB,myisam都支持事务
隔离级别:回答有5、6种 幻读含义:回答正确
索引:explain profiling
联合索引: 走索引方式 回答基本OK
7.
架构方面能力比较不错,知识面比较广
沟通能力比较好,项目背景可以清晰描述出
?
?
1.
HaspMap 结构:ok
concurrenthashmap: 实现原理不ok
hashSet数据结构:ok
2.
状态:就绪 运行 结束 等待 堵塞; sleep wait 区别:sleep 不释放锁 wait 释放锁 notify后流程:回答不完善
sync : 原理基本OK, 加在不同地方: 锁类、锁对象 基本OK
volatile:可见性、不能保证线程安全 ,ok 应用场景:不ok
ThreadLocal:原理OK;子线程用父线程TheadLocal对象:可以,不知道如何实现
线程池:知道核心参数,原理ok。
3.
AOP: 动态代理:(提示出)jdk cglib 区别:基本ok
spring事务机制没怎么使用过。
4.
回收机制:堆的划分,回收算法。ok
5.
引擎:innodb\myisam 底层存储结构不了解
联合索引: 原理OK,有查询计划分析经验
聚簇索引和非聚簇索引之间的区别:ok
6.
沟通能力比较好,项目背景可以清晰描述出
系统之间使用http交互,未使用rpc框架
?
?
3.不了解IOC, 简单了解SpringMVC处理流程,一般
?
4.mysql基本索引存储结构:B+树;
聚簇索引和非聚簇索引的区别:不ok;
5.基本查看命令了解,一般,不ok
6.只会基本使用,maven的生命周期,ok;
7.mget优化:本地分组,同一连接一次传输多组数据,减少传输次数;
缓存如何保证高可用性? redis分片,一致性hash? ?
本地缓存,集中缓存,如何保持数据一致性:通过mq消息;
线程导致cpu飙高:ok;
?
但是,对cglib没用过,不清楚优缺点;
?
?
?
1、针对淘宝的网站竞品抓取经历,
提问:
{1} 如何针对各个竞品的防抓取策略,提出反向突破策略,抓取到有效数据?
结果:通过代理池,针对各个竞品调整固定抓取频次;
?
{2} 如果自己实现代理IP池,如何保证代理池内的代理全部有效?
回答:通过数组,多线程进行分切筛选(类似2分法);
{3}算法实现:
实现上逻辑合理,复杂度处理有考虑,实现了一个多线程管理数组队列的机制;但遗漏了ip超时淘汰机制会造成数组空位的问题,提示后补充完毕‘
{4} 针对车辆管理,QPS 400左右的mysql写库的解决方案,考虑kafka有做异步处理方面的方案存在遗漏,考虑分库方案回答基本到位,但方案缺点回答不全;
{5}JVM常规OOM、GC过频繁、CPU过高等问题,有排查经验,但回答的并不到位,不能精确确认发生问题点;
{6}MYSQL的数据索引结构B+树算法,针对数据的更新、删除更新机制回答基本正确,但写此磁盘方面的机制不到位;
?
总结:
优点,项目经验真实,有一定算法经验,有现场排查问题经验;
缺点,考虑问题不够全面,解除的技术不够宽泛
?
?
?
1.
String StringBuffer StringBuilder 区别String ok StringBuffer 安全 StringBuilder不安全 stringbuilder使用场景不知道
HaspMap 看过部分原码 深层就不知道了
concurrenthashmap: 没有看过及用过
object equals == 区别:OK String equals ==: ok
二叉树结构:不太了解了
2.
状态:就绪 运行 结束 等待 堵塞; sleep wait 区别:sleep 不释放锁 wait 释放锁 notify后流程:先获取锁再执行
sync : 底层原理不清楚, 加在不同地方: 锁类、锁对象 理解不对
lock : 与sync区别:不知道 使用场景:没使用
volatile:可见性、原子性
automic:原理没研究过
ThreadLocal:原理OK;子线程用父线程TheadLocal对象:可以,不知道如何实现
3.
IOC:默认:多例
AOP: 动态代理:jdk cglib 区别:ok
bean 循环依赖:没遇到场景
4.
jvm : 了解不多
OOM: 不清楚
回收机制:没有细研究过
5.
策略:场景题:计算器设计 不OK
6.
是否走索引:不知道
?
?
?
HaspMap 结构:数据+链表;下标算法:不知道;新元素放到链表位置:头部 不OK
HashMap与HashTable: HashTable是线程安全的,加锁方式:不确定是sync还是lock 不OK
concurrenthashmap: 比HashMap并发好。效率高 锁分段算法:不知道 不OK
object equals == 区别:OK String equals ==: ok
二叉树结构:对数据结构比较弱 不OK
2.
状态:就绪 运行 结束 等待 堵塞; sleep wait 区别:sleep 释放锁 wait 不释放锁 不OK
sync : 原理不太了解, 加在不同地方: 不OK
volatile:可见性、原子性,应用场景:比较模糊
ThreadLocal:原理OK;子线程用父线程TheadLocal对象:不可以(回答不正确)
3.
IOC:默认:单例 可以多例
AOP: 动态代理:jdk cglib 区别:不知道 不OK
bean 循环依赖:没研究过
事务传播:原理基本知道AOP实现
4.
OOM: PC不会引起
回收器:不太了解 不OK
回收对象机制:了解比较浅 不OK
5.
策略:场景题:计算器设计 不OK
6.
引擎:innodb\myisam
区别:
?锁: innoDB行级锁,myisam表级
?事务:innoDB支持,myisam不支持,
?索引:innoDB BTree,myisam 压缩 不OK
隔离级别:4种OK 幻读含义:回答不正确 不可重复读:回答不正确 不OK
索引:explain
联合索引: 走索引方式 回答基本OK
7.
scp top du
基础理论能力
主要考察面试者基础语法概念(面向对象、java基础语法)、常用框架概念(SSI、AOP、IOC、值栈等)、基础网络知识(http协议、cookie、CDN、request等)、多线程(锁)、同步异步、文件IO、消息队列、设计模式等
基础
中等
困难
编码能力
考察面试者基础编码能力,不可以写伪代码,注重检查点:能否跑通work,功能是否满足,逻辑是否严谨(边界),编码习惯是否nice(变量定义),实现方式是否最佳(时间、空间)
基础
?
中等
?
困难
设计能力
考察面试者项目设计能力,注意检查点:项目关键功能点拆解&理解能力、设计是否满足全部项目功能、数据库表设计是否合理(字段设计、关联主附表、索引是否合理)、扩展灵活性等
基础(针对在校生、应届和工作1-2年者)
?
中度(针对有3-6年工作经验者)
困难(针对6年以上经验者)
?
排错能力
碰到过什么的问题以及如何解决,举例子说明,开放式问题,主要根据应聘者的回答来判断对方的经验,从问题现象到具体排错手段的思维过程。
基础
某种条件下能稳定重现的问题;解决方法从日志堆栈上能直接看出来的问题,
中等
不能稳定重现的问题,一般和多线程相关;解决方法可以是通过code review和压测验证,调整代码来增加多线程复现的概率;懂得利用jvm相关工具分析线程堆栈,内存主要使用情况,死锁等;懂得查看宿主机的情况(cpu, 磁盘,内存,网络io等),能够结合现象说明一定的排错逻辑(不一定非常强,很多时候会猜测);事后能提出一些有效的防范措施
困难
不能稳定重现的问题;除了"一般"的回答,还有运维知识,思路上能够非常清晰的分析出可能的几种情况并能按照可能性排序.对计算机系统非常熟悉,明白进程线程切换调度的成本,内存不足的表现,网络通信原理等并能将分析推测落地到这些基础知识和业务情况(不是凭空乱猜);熟悉nginx,tomcat,memcached等组件的工作原理,参数配置等;事后能从多维度预防,监控等;
工具使用
主要考察点面试者在日常开发时的必备工具,考察其工具的知识广度、实际掌握深度、对工具活学活用与自主创新的能力等
简单
你用过或知道哪些开发工具?比如:
IDE:eclipse,intellij idea
package:gradle,maven,ant
linux:grep,awk,sed,vmstat,iostat
java:jstack,jmap,jprofiler
network:tcpdump,wireshark
web:fiddler(Charles),chrome inspector
editor:vim/emacs
scm: git, github
======================================================
中等
开放性问题,面试者通过以上这些工具在日常开发中有效地解决过什么问题?
困难
开放性问题
产品&项目能力
考察own过的项目或业务。
学习能力
开放性问题,主要考察面试者的学习主动性,属于加分项。比如
潜力兴趣度
开放了解其本身对技术的热情,可以结合上面的学习能力进行提问了解。
沟通表达能力
考察关键点:需要区分和啰嗦的差别
理解能力
暂时没有想好。。。
?
1、链表有没有环,入环点
2、servlet
3、HashMap
4、ConcurrentHashMap
5、线程池:不ok
?
?
1、开始理解错误,经过引导得到对的逻辑,但是代码风格混乱,同时有错误,指出后改正。
2、不ok
3、JDK1.7 OK
4、JDK1.7知道加了锁,但是不知道如何加的锁,不知道锁原理 不ok
5、不ok
?
?
?
ps ok
grep ok
jstat ?没用过
jstack 用过,不记得内容了
线程池 用过Spring的,java原生的不ok
红黑树 不ok
Servlet ok
JVM?
java内存模型OK
线上CPU彪高问题查询—no
java虚拟机 调整参数----no
java虚拟机 cms垃圾回收期—no
java多线程相关----忘记差不多了
常用linux命令—ok
mysql索引的数据结构----no
1、servlet
2、线程池?
3、JVM
1、ok
2、候选人不记得线程池细节。但是自己可以设计出线程池的工作模型 ok
3、jstat、jstack、jmap ok
Java内存模型 一般了解的不透彻
?
?
1.架构师,不想做管理
什么是架构:整理业务需求,资源系统整体设计。定技术指标。稳定性。可拓展性。具体问题处理,总揽全局,需求转化实现,设计能力,设计预拓展,稳定性,持续重构改建。
2.?知道top,不知道怎么算出load
3.不ok,画出了堆和栈。写出了堆的年轻代老年代,知道年轻代用复制算法。但不知道为什么使用
4.?不ok,不知道红黑树
5.知道数据库用的B+树,知道B+树是什么树,但是不知道树的左旋右旋
6.?ThreadLocal 不ok
整体技术深度与技术规划不匹配。基础较差。
?
?
Java线程池
ThreadLocal
volatile
redis
红黑树
HashMap
TreeMap
?
ok
ok
ok
主备模型,主从模型OK
不知道红黑树原理,知道是平衡二叉树的一种,知道树的旋转,一般
知道JDK1.7是桶 + 链表。 JDK1.8桶+红黑树,但是不知道红黑树,一般
不ok
?
管理经验:没有
CUP彪高的线上问题;没有相关经验
load avg 的含义:说不出来
线上 OOM的问题解决:没有相关经验
服务器内存缓存用过什么,注意什么?回答一般
JVM的调优:没有实践过
jvm 老年代 垃圾回收器CMS 的配对回收器是什么
CountDownLatch 解决什么问题的?了解程度
用过什么消息队列
kafka 了解还可以,用过
hadoop系列 没有使用过
linux 命令 free du
查询日志中的关键字的上下10行 不知道 但是用过grep
打包命令 ok
?
大抽奖系统设计:抓不住重点,模块划分不清晰
?
?
1.Redis
2.SpringMVC
3.RabbitMQ
4.Dubbo
5.zookeeper
?
1.主从同步ok。一致性哈希不ok
2.Servlet生命周期ok。执行过程ok。细节不ok。?
3.使用OK,设计延迟队列有思路ok
4.?不ok,RPC和SOA概念不清晰
5.?不ok
?
1.zookeeper选举模式
2.Kafka工作模型
3.AMQP协议
4.延迟队列
5.Servlet生命周期
6.SpringMVC?
1.不ok
2.ok
3.不ok
4.有思路,没有得到可行性方案,一般?
5.?ok
6.知道执行过程,但是不知道细节,一般
?
?
TreeMap的数据结构 no
TreeSet的数据结构 no
红黑树:no
HaseSet的数据结构:no
System.gc()干什么用的? no
volatile 变量和 atomic 变量有什么不同? no
?
java atomic实现原理 ok
CyclicBarrier 和 CountDownLatch 都可以用来让一组线程等待其它线程。no
java线程池中的各个参数的意义 no
java虚拟机复制算法:说不清楚
cpu彪高的问题:说不清楚
jmap:说不清楚
jstack:说不清楚
top 命令 load avg :说不清楚
OOM的问题 :说不清楚
?
grep 命令 ok
tail 命令 ok
在一个目录下,删除10G以上的文件 no
清除一个大文件;ok
数据库的索引是什么数据结构?no
1.zookeeper选举模式
2.RocketMQ
3.AMQP协议
4.延迟队列
5.SpringMVC?
6.线程池?
7.ThreadLocal?
?
1.不ok
2.可以描述P2P模式,不知道广播模式,一般
3.不ok
4.有思路,没有得到可行结果,一般?
5.ok
6.ok?
7.不ok
?
1.grep 不ok,cat 不ok,find 不ok
2.Mysql索引?最左匹配不ok,索引结构不ok
3.线程池不ok,ThreadLocal 不ok
4.不ok
5.不ok
?
1.线程池
2.ThreadLocal?
3.kafka?
4.红黑树?
?
1.不ok
2.不ok?
3.kafka消费者模型不ok?
4.红黑树不ok,平衡二叉树不ok,树旋转ok?
?
1.基础数据结构;
2.线程安全并发数据集合相关
3.jvm结构和调优
4.垃圾回收算法
5.设计模式
6.中间件:Dubbo
7.mysql
?
1.ok
2.不ok;
3.了解基本概念,不能系统表达;不知道内部结构;无法写出栈溢出示例;一般
4.不ok;
5.知道概念,但是无法写出或描述线程安全的单例需要的注意点,不ok
6.能够使用;但是不知道各个模块的职责和架构特点;但是正在准备转型。一般
7.对于索引使用规则不是很清晰,不ok
?
git reset 和rebase的区别 no
top 命令 不知道
free 命令 不知道
在一个目录下删除 1个G 的日志 不知道
grep命令 不了解
系统监控日志 不了解
full GC 不了解
jvm 不了解
mysql索引是什么数据结构?
mysql联合索引的最左前置规则?
kafka:topic group partition
底层机制不是很了解
?
1.ok
2.volatile了解大概机制,concurrenthashmap了解多段锁,但没有实际使用经验;
3.只知道最大线程数和最小线程数,其它不了解,更不用说队列缓冲这些东西了,而且基本没用过
4.会用tail,top,netstat命令,但查询历史中特定数据,不知道使用grep;
5.知道gc基本概念,但没有实际经验,没用过mat等工具,jstack仅会查看线程是否存在,不太了解线程状态;
不了解64位机器压缩指针的概念;
?
?
1.ok
2.volatile了解大概机制,concurrenthashmap了解多段锁,了解size函数的优化;
3.了解线程池相关配置参数,有使用经验,了解无界队列的问题。
4.会用top,lsof,netstat命令,会用shell脚本,会查看
5.知道gc基本概念,了解相关参数,新生代,老年代分配,
有相关使用经验jstat,jmap,jps,jstack,mat,
了解jstack 和top命令,但无法串联起来,不知道jstack的线程id需要转换。
OOM,jmap观察对象持续增长,联想到hibernate缓存,未调用session.clear(),导致session未释放。
6.了解innodb和myisam的索引数据结构实现,了解联合索引,并会应用。
?线上CPU彪高问题-代码定位
2 java线程池
3 system.gc() 是否会立即执行,为什么?
4设计模式 都用过哪些?
5 老年带 CMS垃圾回收器
6 tar 相关命令
?
?
2.volatile了解用法,concurrenthashmap了解多段锁,size函数实现,sleep和wait的区别不了解,;
3.线程池参数配置了解大概,但不够深入,了解锁的实现方式和用法。
4.会用grep命令,vi打开1G文件,ps查找进程负载,top不了解,不知道怎么看进程的子线程问题。
5.知道gc基本概念,线上服务器只有2g,知道大概的分配原理,不知道如何查看某个class加载自哪个jar包。
6.知道联合索引,了解应用原理。
?
2.volatile不了解用法,threadlocal不太了解,synchronized关键字加在普通方法和static方法的区别不确定;
3.线程池参数配置不了解。
4.会用grep命令,会使用lsof查看端口占用,大文件使用more或less查看,top了解,知道怎么看进程的子线程负载。
5.知道gc基本概念。
6.知道联合索引,会使用explain查看计划,不了解innodb底层数据结构。
7.了解spring的aop实现方式
?
2.volatile了解用法,concurrenthashmap了解多段锁,size函数实现,sleep和wait的区别不了解,;
3.线程池参数配置了解,但不够深入,不了解synchronized关键字在static方法上和普通方法上有什么区别。
4.会用grep命令,ps查找进程负载,top不了解,不知道怎么看进程的子线程问题。
5.知道gc基本概念,线上配置过hbase的jvm参数,但是对内存分配规则不太了解。
6.知道联合索引,了解应用原理,了解innodb的存储结构。
?
?
2.volatile了解用法,不了解原理,StringBuilder和StringBuffer的区别了解:synchronized和lock:知道释放,synchronized知道加在static方法和非static方法上的区别;