思考

 

2. 考察点

1. Coding能力:要求规范,简洁,高效,无bug;较少提示下写出代码,能够自行优化,自行设计case进行测试;
2. 擅长技术:擅长某个技术领域,有一定的广度和深度;加分项:Jvm调优,性能优化、SOA、SaaS,微服务,服务治理等;
3. 系统分析设计能力: 看过往做过哪些复杂系统,设计上有哪些考虑,在可用性、可扩展性、性能、易用性、安全等方面有什么考虑,熟悉DDD的加分;
4. 业务领域的理解的考察,分析、建模能力(判断候选人是否理解一个领域,如果业务理解不错,再考察候选人是否有该领域的方法论总结和思考)
5. 工程能力,质量控制(通过哪些手段来控制项目的质量,结果如何);
6. 学习能力&自驱力:在什么领域做过哪些学习,具体怎么学的,用学到的知识解决了什么问题,逻辑思维;
7. 职业意向,责任心,拿结果;

考察点

考察点 #1, #2, #3
考察点 #1, #3,#4
 考察点 #4, #5
:对齐TC标准

3. 题目

编号

考察点

适用级别

推荐

1

3.1. 基础知识-java基础

浅克隆和深克隆?深克隆的方法

==和equals的区别

自动装箱拆箱机制

简述一下java的异常体系,什么是受检异常,什么是运行时异常;封装一个API的时候什么情况下抛出异常

string常量池的考核,可变类和不可变类

是否发现过jdk的bug或者踩过jdk的一些坑

Hash冲突,有哪几种常见的解决方法? HashMap在高并发情况下不当使用,可能会导致什么样极端情况

HashMap/ConcurrentHashMap的数据结构实现,扩容机制

hashtable和hashmap之间对比,为什么hashmap不是线程安全的。

hash,hash碰撞攻击,hash表的遍历的时间复杂度,如何将其降低到o(n)的时间复杂度。以及如何实现一个LRU的机制的cache(linkedHashMap的变体),0/1切换和渐进式rehash。concurrenthashmap

ArrayList和LinkedList的区别,数据结构实现,区别

如何拷贝数组,怎样效率最高?【clone,sysytem.arraycopy】为什么

http协议,在设计http接口得时候需要考虑什么问题?幂等,超时等

常见的通信协议

HTTP 各个 method 的语义

HTTP/2

HTTPS 的实现等

编译装载链接初始化的过程

多态的实现

对OOP的理解

动态类型语言和静态类型语言的区别,强类型语言与弱类型语言

有没有使用过其他范式的编程语言,如函数式的语言,动态语言等。他们和Java比有何优劣

常见的代码坏味道有哪些。重构的手法

git 的使用。git 的简单工作原理

静态代理和动态代理

java8的新特性

maven中如何规避,解决依赖冲突

 

 

 

 

2

3.2. 算法

字符串相似度匹配(动态规划)

打麻将游戏,打一张牌之后服务端算法处理(指针追赶)。

链表翻转。

找数游戏。从一个数组中找出满足符合条件的元素:它大于或等于前面所有元素,小于或等于后面所有元素

一摞烙饼的排序

买书问题

求二进制数中1的个数

寻找发帖“水王”

寻找最大的K个数

最大公约数问题

找符合条件的整数

寻找数组中的最大值和最小值

快速寻找满足条件的两个数

子数组的最大乘积

求数组的子数组之和的最大值

子数组之和的最大值(二维)

求数组中最长递增子序列

数组循环移位

数组分割

区间重合判断

字符串移位包含的问题

电话号码对应英语单词问题

计算字符串的相似度

从无头单链表中删除节点

最短摘要的生成

编程判断两个链表是否相交

队列中取最大值操作问题

求二叉树中节点的最大距离

分层遍历二叉树

偶数个数只有两个不是成对出现的,快速定位到这两个不成对的数

3

3.3. web知识

响应码 4XX与5XX的含义(客户端异常与服务器异常), 400,401,403,404,405的含义(请求参数异常, 未授权, 禁止访问, 页面找不到, 请求方法不支持)

服务器跳转与重定向的区别(服务器跳转是指服务器内部跳转, request是同一个, 重定向让浏览器跳转到新地址访问, request不是同一个了, 重定向http code 是301、302)

浏览器怎么知道当前登陆者是谁? (cookie) cookie存在什么位置?(http header)

restful是什么? (一套基于资源定位的设计风格, 关键是答出资源两字),

设计一个restful风格的 url (全是名词, 如果有复数以及版本号 加分)

POST方法与PUT方法的区别 (幂等, POST只能新建, PUT可以新建/修改)

HTTPS和HTTP的对比,如何加密和认证,建立https通信过程?

4

3.4. 设计模式

针对某个熟悉的开源框架里面的设计模式都有哪些?jdk 里面的设计模式如Java io的装饰者模式。

画出一个类图:从字典中选出符合以下三个条件的字符串,1)包含a或者b或者cd 2)以end结尾3)长度大于7

5

3.5. 并发

举例Java线程安全的实现方法,原理、区别

线程同步的方法

线程池原理,使用,调优

ThreadLocal 作用和实现机制

Lock与synchronized 的区别,锁的粒度:类级别和对象级别

读写锁,CountDownLatch等的使用

ConcurrentHashMap get是否需要加锁,是如何保证高并发情况下的性能的?(分段锁,hashEntry的final字段结构,segment中volidate类型的count字段的设计)

分布式锁的实现方式(redis,zk)

代码实现一个读取缓存,缓存失效透传后端的功能。考擦点:如何避免高并发同一key多个同时透传后端,缓存击穿的问题 putifabsent等CAS操作是否会用

java 之DelayQueue,synchronizedQueue原理

普通Java中的ReentrantLock ,countdownLatch实现原理(如何保证高性能),和synchronized 之间的区别。什么时候选择去用它

volitale的作用,为什么要指令重排序

AQS的理解,如何运用

还了解concurrent包下的哪些类,使用场景是什么

死锁如何产生,如何避免

如何理解Java内存模型,及内存可见性

6

3.6. jvm

java的类加载器体系结构和双亲委托机制

Jvm堆内存区,有两个S区有什么作用,谈下java对象在JVM的生命周期

有遇到过OOM么,什么情况,怎么发现的,怎么查原因的

线上JVM参数都怎么设置的,为什么要这么设置,什么时候需要调优。

young gc和full gc触发条件

垃圾回收算法及垃圾回收器的选择

jvm内存结构

FGC的可能原因,以及解决办法。

日常调优的技巧(常见的性能优化策略)

如何判断对象存活

常见让java服务器挂掉的内存溢出(栈,堆, 持久态)以及原因

jvm监控工具

CMS工作原理,相比Paralle GC的优劣

有了CMS,为什么还需要G1 GC

JVM常用参数适用及理解

常见的JVM字节码及含义等

7

3.7. 数据库

数据库事务+事务传播机制

MySQL索引使用的数据结构

MyISAM,InnoDB有什么区别,各有什么特点

慢查询如何分析

使用事务的时候应该注意什么?比如事务中不应该有执行时间过长的业务流程。

充值和提现,事务如何保证的,或者以银行A/B用户之间转账的例子将一下,这个场景中事务是如何保证的。 (两阶段提交,分布式事务 2.本地事务,本地落地,补偿发送)

分布式事务(实时一致性【事务补偿机制】还是【基于消息的最终一致性】最终一致性)

联合索引

为什么使用B+树做索引(磁盘IO+范围搜索)

事务的4个隔离级别?分别存在哪些问题?举例说明

有哪些锁?如何解决幻读?

MVCC机制

分库分表的思路

8

3.8. 性能调优

sql优化。

jvm优化,可以讲下曾经的遇到的问题以及解决方案。

接口调优。

系统调优。

问题排查的方法论

9

3.9. 系统分析设计

设计一个微信红包抢红包的系统。

大key和热key的解决办法

跨机房数据读写和同步的问题的解决方案。

接口流速控制自我保护的实现方式,在一个60s的时间序列上如何保接口的调用流速是均衡的。

设计一个实时流量统计系统。

设计一个直播系统。

设计一个电商秒杀系统

10

3.10. 开源框架【分布式队列,RPC通信 等】

RPC:

你理解的rpc是怎样的。

rpc异步调用的是如何实现的?

rpc调用的可靠性方面是如何保障的?网络超时,闪断,对方进程僵死,处理缓慢情况下是如何保证协议可靠的?

心跳机制。是否懂的ping-pong的双向心跳机制。

重连机制。断掉之后是立即重连么?为什么?(服务端句柄释放需要一定的时间)

客户端和服务端断掉连接之后的,哪些还没有发送玩得消息(应该还在缓存中)是如何处理的?是否有设置缓存上限?

黏包拆包问题有没有遇到,如何解决的?

服务端异常是如何透传到客户端的?

MQ

mq的常用场景

如果让你设计一个MQ,你需要考虑什么问题(rpc,事务,最终一致性,广播,消息确认,负载均衡,存储,流控,错峰,调度),如何设计。

mq是怎么保证高吞吐的?

对于mq存储,通过哪些原理及手段,可以保证mq tps远高于磁盘I/O

如何保证mq消息尽量不丢失

对于各种不确定(超时,down机,消息没有送达,送达后数据没落地,数据落地了回复没收到)如何做到消息不丢失,如何避免重复消费的问题,如何鉴别是重复消费(messageId)并幂等的处理(状态机/版本号,前者更优)

是否有顺序保证?如果需要一个支持顺序保证,应该如何选型和设计,比如kafka只能保证单个partition

怎么避免重复消费。

kafka是如何实现高性能高可靠的。zero copy的原理

kafka副本同步机制

kafka选主机制,是否是类似paxos的算法,答案否。

数据可靠性和一致性如何保证。

kafka副本与leader节点不同步的原因。

kafka isr和osr机制,HW设计理念。

kafka部署的时候如果节点小于和大于partition个数的时候都会有什么现象和结果。

3.10.1. 开源框架(spring ,hbase ,zookeeper等)
aop实现原理,依赖注入。

Spring 事务的实现原理

SpringMVC的原理和机制

hbase架构原理,特性,性能。

hbase row key的设计原则。

openstsdb?

zookeeper原理,客户端类图。内部双层队列设计的思想。

zookeerper observer节点使用场景。

zookeeper 部署的时候需要注意的细节,如何防止脑裂。

11

3.11. 服务治理

服务注册,服务分组 ,服务发现,异常上报,服务降级 ,监控检查,动态upstream(http)

nginx lua openResty zookeeper

四层负载均衡和第七层负载均衡区别和好处

问下大型企业架构他用过哪些,对比优劣。

SOA和微服务的区别。

服务治理如果是使用spring-cloud,可以进一步询问其对相关组件的理解和简单原理描述。Eureka,Zuul, Consul , Feign, Hystrix 都可以自然引入。

如果使用 Dubbo,深入询问

如果网络异常导致服务器请求失败, 需要怎么做(重试)

重试会导致什么后果(雪崩, 幂等)

雪崩怎么解决(限流, 熔断, 隔离)

幂等怎么解决(token, 乐观锁)

SOA与传统ESB消息总线的差异在哪里?各自的应用场景是什么?

12

3.12. Linux

在线查看日志的命令

常用linux命令了解

如何自动ssh登录

13

3.13. 安全

web常见安全问题?如何防范?

14

3.14. 工程能力

是否编写单元测试? 单测覆盖率是多少? 是否编写过TDD

怎么衡量代码质量(sonar 或者其他代码工具), code review

使用过哪些测试框架,Junit?Mockito?Powermock?,使用它们有什么好处

 

15

3.15. 软素质

沟通能力

对干系人的识别、管理。

在团队内主动提起的方案、改进和其中的过程。

团队的会议流程。常见的例会有哪些。

会议的模式、罗伯特议事原则。

学习能力

自驱动力,业余时间写了什么代码。

最近读了什么技术书籍并简要介绍。

社区活动,开源代码库的关注。

知识管理与沉淀

规划能力

项目排期,排期依据,

需求控制。

对开发模型的了解(瀑布模型、敏捷模型等。

项目管理的常见方法论(极限编程、看板方法、丰田方法等)。

领导能力

 

 

4. 系统设计

模块

设计题目

模块

设计题目

订单

设计一个餐饮订单系统
1、开台-》点菜-》下单-》付款-》结账 关键点:订单存储模型、桌台要与订单解耦、订单里需要存储商品的快照信息(如价格、规格属性之类)

2、进一步:有促销活动(菜品维度、订单纬度) 关键点:订单与活动边界(订单优惠谁计算、如何存储优惠信息)

3、再进一步还能支持结账后进行退菜或者加菜 ,有对账需求,关键点:考察候选人是否有意识设计账单的概念,解决钱和帐 对得上问题
租户

设计一种随机商户编号作为商户的唯一标示,为方便记忆,要求编号从4位开始,且要去掉不吉利的数字,如4! 考察点:1、随机不重复
2、分布式 3、要考虑扩容

 

posted @ 2019-02-28 22:18  逍的遥  阅读(378)  评论(0编辑  收藏  举报