java 架构师知识体系 & 常见面试题

第一部分 操作系统

1.操作系统有哪些io模型
https://blog.csdn.net/sinat_34990639/article/details/52778562
2.几种进程间的通信方式:管道,信号,消息,信号量,共享内存,socket
3.三次握手与四次关闭
4.osi七层模型
5.tcp粘包与拆包
6.常见进程同步问题
生产者消费者,哲学家就餐,读者写者
7.栈溢出,堆溢出,SEH
8.sysenter,系统调用过程
9.逆向中经常看到的DriverEntry开头的GS代码干啥用的,对应哪个编译选项
10.ntfs文件格式
11.完成端口在内核层怎么表示
12.windows内核中网络部分的spi,tdi,ndis过滤过程
13.windows内核中,LPC和RPC过程
14.windows内核中,打开文件过程。
createfile->NTCreateFile->IoCreateFile
->ObOpenObjectByName->ObpLookupObjectName->ObReferenceObjectByHandle
->IopParseFile->IopParseDevice->Irp到文件系统->IoCallDriver->scsi磁盘操作
15.进程创建在应用层和内核层的具体流程
16.如何进行栈回溯.

第二部分 java

一. java基础

0.java语言的常用规范有哪些
jcp.org. java语言规范,java虚拟机规范,jmx 管理扩展规范,java EE核心 13规范
1.面向对象的三大基本特征和五大基本原则
三大特征:封装,继承,多态
五大原则:单一职责,开放封闭,里氏替换,依赖倒置,接口隔离
2.值传递和引用传递
3.什么是多态,方法重写与重载
4.适合用继承父类的场景,适合用实现接口的场景
5.整数类型中byte,short,int,long的取值范围
6.什么是自动拆装箱
自动装箱,引用valueOf
7.Integer的缓存,Integer的==和equals的区别
Integer内部缓存-128到127之间整数,所以==比较为true,其他值是new新对象,==为false
equals比较的是数值.Integer,Byte,Short,Long,Character都有缓存机制.
8.string,stringbuffer和stringbuilder什么区别
String不可变,做+时,会被优化成StringBuilder的append操作,每次新增字串.string是final,形成字符串池,节省空间,线程安全,提高效率.
StringBuffer和StringBuilder都继承自AbstractStringBuilder.
StringBuffer线程安全,方法前面都加了synchronized关键字,StringBuilder线程不安全
9.为什么金额计算不能用doube,要用BigDecimal
double精度丢失,比如10可能表示为9.99999。和整数10用equals不等,通过instanceof比较,需要转成.doubleValue().
10.字符串拼接的几种方式
"+",concat,join,append
11.String.valueOf和Integer.toString的区别
String.valueOf如果为空的话,返回"null"字串,然后调用Integer.toString()
12.String对+的处理性能问题
转成StringBuilder.append处理
13.transient,instanceof,final,static,volatile,synchronized,const原理
transient关键字在hotspot源码中如何解析处理的,暂时没找到.静态成员不参与序列化.
instanceof在Hotspot中源码位置没找到。注意和getClass比较,instance可以比较继承关系,
getClass不行,只能匹配本身类
final用于定义常量,final的变量引用不能更改,方法不能覆盖,类不能继承.
synchronized用于代码块时用monitorenter指令实现,在hotspot的TemplateTable::monitorenter代码中.
volatile处理缓存一致性问题,MESI协议,保证可见性,禁止重排序.处理单例的Double check lock问题.

14.常用集合类的底层实现,区别不同jdk版本比如ArrayList和LinkedList,SynchronizedList,HashMap和HashTable和
TreeMap和ConcurrentHashMap,HashSet和LinkedHashSet和TreeSet
15.java8的Stream用法,lambda表达式用法
16.Collection和Collections区别.常用的集合工具类有哪些第三方包,apache common,guava
17.使用Arrays.asList有什么需要注意的
18.Enumeration和 Iterator 的区别
19.快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?
20.常用java并发工具包实现原理,比如CopyOnWriteArrayList,ConcurrentSkipListMap
21.Enum怎么实现序列化的,怎么保证线程安全性
22.BIO,NIO,AIO,netty的原理
23.静态,动态代理的原理,实现方式,和AOP的关系
24.序列化的底层原理,安全问题,为什么要设置serialVersionUID
25.自定义注解的用法
26.java的常用注解
27.JMS的消息模型
28.jmx的使用场景
29.泛型的类型擦除原理
30.限定和非限定通配符,extends和super用法
31.通配符,?和TypeReference,ParameterizedType的使用场景
32.junit,mock,mockito的用法
33.spi的原理
34.异常中finally 和 return 的执行顺序
35.Error,Exception,RuntimeException场景
36.格林威治时间、CET,UTC,GMT,CST 几种常见时间的含义和关系
37.SimpleDateFormat的线程安全性
38.URL 编解码、Big Endian 和 Little Endian
39.如何解决乱码问题
40.常用的语法糖
41.线程池原理
32.为什么不能用Executors创建线程池
33.线程如何排查
34.CAS、乐观锁与悲观锁、数据库相关锁机制、分布式锁、偏向锁、轻量级锁、重量级锁、monitor、
锁优化、锁消除、锁粗化、自旋锁、可重入锁、阻塞锁、死锁.
35.synchronized实现原理
36.java 8,9,10,11,增加了什么内容
37.java同步几种方法?threadlocal怎么实现。
38.volatile的实现原理
39.常用并发包的原理,比如AbstractQueuedSynchronizer,ReentrantReadWriteLock,ReentrantLock,CountDownLatch,Executors,Atomic*.
AbstractQueuedSynchronizer:通过双向队列实现线程节点的等待唤醒.在acquire()中调用addWaiter在队列尾部添加节点,然后for死循环进入自旋状态.release()中调用unparkSuccessor唤醒后继节点,然后把后继节点作为首节点,调用sun.misc.Unsafe.unpark()唤醒线程完成出队列操作.
ReentrantLock内部通过Sync实现,属于排他锁,分为公平锁FairSync和非公平锁NonfairSync两个子类.内部有个整数states,存储线程冲入的次数,每次冲入加1,unlock时减一,减到0时释放锁.公不公平主要是获取锁时是否按照FIFO的顺序获取锁.公平锁调用tryAcquire()时多个hasQueuedPredecessors(),判断是不是队列中的第一个,如果不是第一个,直接返回false.
ReentrantReadWriteLock属于读写锁,可重入,内部两个对象ReadLock,WriteLock, 两个内部都通过Sync实现.重入次数通过高16位写状态,低16位读状态判断.
40.java程序的的cpu load过高,内存过高,一般是什么问题,怎么定位.
41.Java中是否可以覆盖(override)一个private或者是static的方法
42.java rmi使用方法

二.jvm底层

1.class文件格式
2.java的对象一定在堆上分配吗?
3.可见性、原子性、顺序性、happens-before先发生于、内存屏障、编译器指令重排和CPU指令重排
4.GC 算法:标记清除、引用计数、复制、标记压缩、分代回收、增量式回收
5.对象存活的判定,可达性分析
6.垃圾收集器(CMS、G1、ZGC、Epsilon)
7.jvm参数调优-Xmx、-Xmn、-Xms、Xss、-XX:SurvivorRatio、
-XX:PermSize、-XX:MaxPermSize、-XX:MaxTenuringThreshold
8.oop普通对象指针,klass格式,对象头格式.java对象在Hotspot中的存储格式.
9.常用性能监控和故障调优工具
jps, jstack, jmap, jstat, jconsole, jinfo, jhat, javap, btrace, TProfiler
Arthas
10.minor gc和full gc区别
11.gc的safe point做什么用?包含哪些?
12.JVM的永久代中会发生垃圾回收么?
13.双亲加载模型
14.常用的ClassLoader
15.常用模块化实现,比如jboss modules、osgi、jigsaw
16.JIT如何优化
17.常用反编译工具,javac,jad,javap,crf
18.如何用位运算实现用位运算实现加、减、乘、除、取余
19.java角度的CPU缓存和伪共享
20.常见的oom类型,HeapOutOfMemory、 Young OutOfMemory、
MethodArea OutOfMemory、ConstantPool OutOfMemory、
DirectMemory OutOfMemory、Stack OutOfMemory Stack OverFlow
21.java程序响应慢如何定位
22.java频繁full gc如何定位
23.如何查看gc 日志
24.如何排查内存泄露
25.hotspot如何进行语法分析,语义分析(LL,递归下降,LR)
26.hotspot编译java代码经历了哪些过程
27.hotspot的设计架构
28.jdb调试命令
jdb Test
stop in Test.main
run
29.hotspot的类加载流程
(1).ClassLoader模块初始化类加载器,加载libjava.so,libzip.(2).通过ClassFile模块的ClassFileParser加载class文件,解析魔数,主从版本号,常量池,访问标识,全限定名的索引,接口,字段,方法,vtable信息.创建对应的klassOop对象.(3).链接.
30.hotspot中new一个对象,具体执行了什么字节码,对应的几个字节码,在hotspot怎么解释执行?
31.happen-before的规则有哪些?
代码执行结果有序,加锁操作的先解锁才能加锁,volatile变量先写后读,传递原则,线程的start最先,线程的中断先interrupt再发中断事件,线程先终止再触发终止事件,对象先初始化,才能析构.如果两个操作不存在上述任何原则,jvm可以进行重排序.如果A happen-before B,则A在内存上的多线程操作对B可见.比如两个线程执行i++;
32.重排序的条件.比如a=1;b=1;c=a+b; 比如a是成员变量,方法writer(){a =1;flag=true} read() {if(falg) {int i = a +a}};多线程执行结果可能不一样.
33.如何获取对象的占用内存大小?如何获取对象的内存地址?
34. public int add() { Integer a = 1; int b= 2; int c = a + b; return c;}  这个加法函数,虚拟机编译成什么字节码,怎么解释执行的. 

三.设计模式与软件架构

1.设计模式的六大原则
2.三类设计模式,创建型,结构型,行为型
3.reactor和proactor模型什么区别?
4.单例模式的七种写法:懒汉-线程不安全,懒汉-线程安全,饿汉,饿汉-变种,静态内部类,枚举,双重检验锁
5.谈谈如何提高代码的扩展性。
6.列举几种软件架构,
7.什么是领域驱动设计,DDD
8.类结构的几种关系,is a 继承, has a 聚合, like a 组合
9.多个模块组成的系统,设计时注意什么?调用解耦,减少重复代码,边界清晰,模块内代码遵循设计模式或者算法,
代码规范。注意负载均衡,分库分表,缓存,幂等性,分布式事务,锁的问题。
10.常用架构图的怎么画.

第三部分 java web

一.http协议

1.http的get和post区别.区分@RequestParam,@RequestBody使用场景
2.常用的web请求返回的状态码
3.http报文格式,1.0和1.1版本的区别
4.http和https区别
5.常用的java的http库,HttpClient
6.cookie与session区别。cookie禁用,怎么实现session
7.什么是DNS污染,DNS劫持
8.正向代理和反向代理应用场景

二.应用服务器
1.tomcat架构
https://blog.csdn.net/feivirus/article/details/85948673
connector和container组成。
connector处理socket连接。.container解析处理具体的http请求报文,由外到内主要包括Engine引擎,Host主机,Context上下文,Wrapper四部分.Host主要用来区分同一个server上的多个虚拟主机。Context用来区分同一主机上的多个网站。wrapper用来区分同一网站的不同的Servlet请求.
2.nginx架构

三.servlet
1.servlet的生命周期
2.filter用法,filter和aop区别
3.web.xml常用配置
4.sendRedirect()和forward()区别?
5.jsp常用指令

四.spring/springmvc
1.aop原理
2.ioc原理
3.url请求从浏览器,到tomcat,到servlet,到springmvc,到入库的处理过程
4.spring security原理
5.Spring支持的事务管理类型
6.spring的四中依赖注入方式(byName, byType,contructor,autodetect)
7.解释Spring框架中bean的生命周期
8.spring boot的starter原理
9.spring boot自动配置的顺序,比如文件,注解
10.shiro默认有哪些拦截器
11.通过shiro怎么实现一个对用户是否登录的验证?它是怎么实现的?

五.mybatis
1.常用OR Maping方式,hibernate和mybatis区别
2.hibernate的懒加载
3.hibernate的缓存机制
4.Mybatis的插件运行原理
SqlSessionFactory,SqlSession,Executor,BoundSql,StatementHandler
5.mybatis中#和$区别
6.mybatis中Dao接口里的方法,参数不同时,方法能重载吗?


第四部分 数据库


1.mysql设计架构
连接处理,sql词法和语法解析,sql优化,sql执行(存储引擎).
https://blog.csdn.net/feivirus/article/details/83716680
2.InnoDB引擎架构
3.mysql是怎么解析sql语句解析的,词法,语法分析过程
4.Hash索引、B树索引的过程
5.索引的最左前缀原则
6.组合索引的生效原理
7.事务的4种隔离级别
8.行锁,表锁实现原理
9.乐观锁,悲观锁原理
10.binlog的日志格式的种类和分别
11.MySQL的主从复制原理以及流程.
12.MySQL数据库cpu飙升到100%的话怎么处理
13.select count(*) 和select count(1) 和select count(列名)什么区别
14.现在有一张正在使用的表,数据量为1500W,你如何做查询优化?
15.表中有大字段X(例如:text类型),且字段X不会经常更新,以读为为主,请问
(1)、您是选择拆成子表,还是继续放一起;
(2)、写出您这样选择的理由。
16.分库分表的场景
17.数据库连接池原理
18.mysql的选取,投影,连接分别实现什么.
19.mysql的查询语法树结构是什么样子的
https://blog.csdn.net/feivirus/article/details/83716680

第五部分  中间件框架


一.分布式理论
1.cap理论
2.2pc和3pc
3.tcc
4.base

二.zookeeper
1.测试和生产公用一套zookeeper,怎么保证消费不冲突
2.paxos算法原理
3.zookeeper的应用场景有哪些
4.zookeeper的leader选举过程
5.zookeeper的监听机制

三.微服务与dubbo
1.dubbo的设计架构
service,config,proxy,registry,cluster,monitor,protocol,,exchange,transport,
serialize模块
2.dubbo的服务注册,服务发现,服务治理怎么实现的。
3.负载均衡
Random LoadBalance(随机均衡算法)、;RoundRobin LoadBalance(权重轮循均衡算法)、LeastAction LoadBalance(最少活跃调用数均衡算法)、ConsistentHash LoadBalance(一致性Hash均衡算法)
4.dubbo运行时,突然所有的zookeeper全部宕机,dubbo是否还会继续提供服务.
5.service mesh


四.kafka
1.kafka的设计架构是什么?

五.rabbit MQ
1.RabbitMQ除了direct exchange还有哪些exchange。为什么要用channel,不直接用tcp连接

六.redis
1.缓存雪崩
2.内存管理模型


七.mongo


八.spring cloud
1.spring cloud各层的常用组件
服务发现与注册:Eureka,zookeeper,consul
负载均衡:feign,spring cloud loadbalance,
服务配置:spring cloud config
服务限流与熔断:hystrix,sentinal
服务链路追踪:dapper
服务网关zuul,安全,消息

九.分布式数据库mycat

十.shardingsphere

十一.docker和kubernets

十二.分布式链路追踪skywalking,dapper

十三.openstack/kvm

十四.spring state machie 与squirrel
1.状态机应用场景
2.如何实现一个状态机.
https://blog.csdn.net/feivirus/article/details/85370385

十五.日志
1.log4j和slf4j的区别

十六.disruptor

十七.akka


第六部分 数据结构与算法

1.栈的两种存储结构
2.二叉树,字典树,平衡树,排序树,
B树,B+树,R树,多路树,红黑树
3.大根堆,小根堆
4.有向图,DAG,有向无环图,拓扑
5.稳定和不稳定的排序算法
6.深度和广度优先搜索
7.海量数据处理算法原理:分治,hash映射,堆排序,双层桶划分,
bloom filter
8.机器学习算法
9.在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b.
10.怎么判断一字符串是不是对称的,如:abccba.
11.1000万次险企报价记录,,险企名称255字节内。怎么查询报价次数最多的10家险企.
12.flex/bison过程

第七部分 大数据


一.hdfs 
二.map reduce
三.hbase
四.hive
五.yarn
六.spark
七.storm
八.flink
九.lucene
十. ElasticSearch
十一.mahout
十二.solr

第八部分 网络安全


一.web安全top10
1.sql注入
2.xss
3.csrf


第九部分 前端


1.定义和使用一个freemarker的宏。
2.说几个常用的bootstrap组件?怎么做分页?怎么选时间?为什么是12栅格?
3.velociy中的#include和#parse有什么区别
4.webx中的screen,action,control是怎么渲染到页面中的?

第十部分 运维 


1.常用的配置比如mysql.properties,在开发环境、测试环境、生产环境里面的值肯定不一样,你是如何用自动化构建工具解决这里面内容的修改问题?
2.如何部署一个jar包到maven仓库,使用什么命令?
3.常用代码扫描插件,FindBugs,阿里代码规范插件,PMD,check Style,Lint,
4.代码扫描插件原理
5.dapper
6.LVS负载均衡原理
7.HA Proxy原理

你可能感兴趣的:(开发技术)