java进阶--面试的知识点

面试的知识点

注意:
1、很多问题是没有标准答案的。
2、注意个人发挥和引申。 
3、个人去查找答案。

-----------------------------------------------------------------
主要节点:

个人简介(口述)?
这个非常重要。
体现表达能力。
别人不是先看简历,而是先听你表达。把重点信息,串起来,简单、直接地说出来。
重点信息包括,学历,年限(共几年,每个公司几年),
       哪几家公司,做过哪些项目(项目名称),
       知识体系(操作系统、编程语言、数据库)
       
学习方法(知识图谱,分类法,比较法等),
       最近看什么书(书的种类丰富),
       
个人角色(技术骨干、小组组长、项目负责人等 ),
       个人技能(java、c、linux、mysql、dubbo等),
       
未来目标(架构师、不甘平凡),
       其他可能吸引人的东西(学习小组、技术博客等)。
简单、直接,不要冗长。总体说的时间不要长。
声音洪亮,技术名称语气强调。

你的优点?你的缺点?

做过什么项目?

哪个或哪些项目做的比较好?为什么?

遇到过什么困难,怎么解决的?有何收获?

如果要你做这个系统或功能,你怎么做?为什么?

你公司什么业务?

你公司技术架构是什么样?

你公司技术架构的演进过程?

你的未来目标是?怎么实现?

-----------------------------------------------------------------
技巧:

最重要的一点
一定要能说

别人看重的东西
思维敏捷度、学习能力、技术能力、表达能力、团队协作能力、知识体系、个人理想
重点想一下这些,怎么表达出来,就能打动人心。

表达能力
说话连贯,声音洪亮。吐字清晰。不要怯场。
把重点信息说出来,非重点的可以在后面简单带过。

态度谦虚
不会的东西,就说不太清楚、目前还没学到。不要不懂装懂。
说错了,就要承认说错了,回去查查资料。不要知道说错了,还不承认。
一知半解的东西,不要说绝对了。 
要体现出主动学习的能力。
 

精神集中
面试是个体力活,时间长,不定时,需要精神高度集中。可以先喝杯咖啡。
目光盯着面试官,或者桌面。表现出认真。

随机应变能力
可能会遇到各种未知问题,这个太正常了。
主流程是一样的。把主体把握住。
沉着冷静,不知道的问题积累起来,回去查资料,下次就会了。

重点和引申
知识都有重点,把握了重点就把握了大局。
从一个重点引申出其他重点,就可以引导别人。
比如,java并发,重点是cas、aqs、并发集合、锁、条件变量、原子类等。
          如果问到了并发集合,可以把其他几个都引申一下,说出来。别人就会继续问,你就掌握了主动权。

多锻炼
在面试这个事上,我也经历过很多失败。
用100offer等,多跑几家公司,各种业务,各种陌生人,各种问题,来锻炼情景感觉,说话能力, 随机应变能力。
重点都是从这些锻炼中,总结出来的。 
多锻炼,才能说,一定要能说。

非技术类问题
这个非常多。
你怎么带手下的?怎么codereview?未来目标是什么?最近看了什么书?
和boss聊天,要突出,自己的未来目标,做事的主观能动性,善于学习和分享。 


-----------------------------------------------------------------
知识和重点:

重点的概念?
ioc原理,aop原理
服务化,服务治理
分布式锁,分布式系统
noSql特点
技术选型
高并发,抢购
线程池,
集合,并发
反向代理,负载均衡
读写分离,分库分表分区,主从同步
一致性hash
事务,隔离级别
主键,索引,复合索引 
面向接口编程
序列化,持久化 
反射,动态代理 


重点的技术?
mysql
linux,shell
java,spring(ioc,aop),struts2,mybatis
redis,memcached,mongodb
zookeeper,dubbo,netty
lucene,solr,elasticSearch

个人素质?
表达能力,学习能力,沟通协调能力,主观能动性,长远目标

java?
集合,并发,

java并发?
CAS,AQS,并发集合,线程池,线程锁,原子类

mysql?
存储引擎,sql优化,索引原理,

服务化dubbo?
哪些部分

jvm?
常用参数,故障诊断工具
 
分布式锁?
阻塞式锁,非
阻塞式锁
 

-----------------------------------------------------------------
Java相关:

Java线程池原理?
线程集合(多线程),阻塞队列(多任务)
线程锁,条件变量,线程同步
ExecutorService
ThreadPoolExecutor
Executors

Java并发包的组成?
java.util.concurrent
CAS,AQS 
并发容器,线程池,线程锁, 原子类

Java并发容器(常用的)?
ConcurrentHashMap
CopyOnWriteArrayList
CopyOnWriteArraySet
LinkedBlockingQueue
PriorityBlockingQueue
DelayQueue
LinkedBlockingDeque
ConcurrentSkipListMap
ConcurrentSkipListSet

ConcurrentHashMap的原理?  
完全并发读,部分并发写。 
锁分段技术。分而治之,全部数据分成许多段segment,每个段一把锁。
不变性(final)和易变性(volatile)。用final、volatile,结合特殊的写流程。

spring IOC原理? 
容器
控制反转,依赖注入
工厂模式,
反射机制,动态代理
运行时创建、组装对象
对象的关系解耦,用配置文件

spring用到的设计模式?
工厂模式,单例模式,原型模式等

非阻塞锁和阻塞锁?
阻塞锁,锁的状态和等待队列,线程阻塞
非阻塞锁,原子CAS操作,线程循环

CAS和AQS?
CAS,CompareAndSwap,原子操作,比较和替换
AQS,AbstractQueuedSynchronizer,基于队列的同步器
这2个是java并发包的基础。

LinkedBlockingQueue、ArrayBlockingQueue的比较?
都是BlockingQueue的实现。使用锁和条件变量。
LinkedBlockingQueue,基于列表,用Node包装元素,大小可填可不填。
         头尾2把锁(
takeLock、putLock ),读和写不会相互竞争。并发性能高。
ArrayBlockingQueue,基于数组,用takeIndex、putIndex构建环状队列,必须指定大小。
         单线程性能好。1把锁( lock),读和写会相互竞争。 并发性能略低。

自己写个锁?
1、阻塞锁,写个AQS的子类和包装类
2、非阻塞锁,使用原子类和CAS

线程死锁,避免线程死锁?
2个线程,使用多个资源,加锁顺序不同,导致相互等待
梳理业务逻辑,顺序执行
把大逻辑拆分成小逻辑

spring用到的设计模式?
工厂模式,单例模式,原型模式

常用的设计模式?
工厂模式,
单例模式,
门面模式,统一对外接口,如 在线支付的入口只有一个,参数是订单号和具体支付方式
策略模式,多种策略灵活由某种原则来自动选择,如 在线支付根据
具体支付方式来选择支付方式处理类
责任链模式,多个处理节点,窜起来,方式多样,递归法,循环法。
            方式1:处理器对象,有处理方法和下个处理器的引用,在处理方法中判断是处理还是调用下个处理器来处理。
            方式2:servlet的Filter和FilterChain,ApplicationFilterChain


-----------------------------------------------------------------
JVM相关:

内存模型?
分代法,新生代,老生代,永久代

GC原理?
分代法,youngGC,fullGC
引用计数法

jvm问题诊断的常用命令?
jmap
jstack
jstat

如何处理空白页问题?
查看linux状态
查看jvm状态

jvm常用参数配置?
在tomcat的目录下,找到bin/catalina.sh
在catalina.sh的头部添加如下内容(具体值根据linux的内存容量修改)
# set jvm memory param 
JAVA_OPTS='-Xms256m -Xmx2048m  -XX:PermSize=128m -XX:MaxPermSize=728m'

-----------------------------------------------------------------
Linux相关:

查看系统负载?
uptime,vmstat,top等

常用命令?
略。

epoll原理和使用?
略。

-----------------------------------------------------------------
数据库相关:

数据库索引的原理?
平衡树BTree,3或4层结构,多叉数,节点数据有序,2分查找
平衡树变体

sql优化?
使用explain查看解释计划,从上往下,从左往右
核心是索引,减少全表查询
注意索引字段,某些操作导致索引失效。如or(用union),in(用exists),not in(用not exists),!=,
        在左侧字段用函数,like没有用左前缀
少用外连接,多用内连接
减少关联查询,减少子查询
只取出需要的列
用小结果集驱动大结果集
尽量在索引中完成排序

mysql的存储引擎和区别?
主要是InnoDB,MyISAM
InnoDB支持事务和行级锁,MyISAM则不支持。
MyISAM的读写性能更高,有表级锁。
MyISAM是Mysql自带的,InnoDB是第三方公司的。

mysql的优点?
开源、免费,定制化
简单、高效
性能高、功能全
模块化、插件化,第三方组件多 

mysql的联合索引(复合索引、多值索引、多列索引)? 
 
左前缀原则。
全部字段都有,或左边的字段有。
如 inx(a,b,c,d)
a=x and b=x and c=x and d=x 使用索引
a=x  使用索引
a=x and b=x 使用索引
c=x and d=x 不使用索引  

事务的特性?
ACID,原子性,一致性,持久性,隔离性

事务的隔离级别?
事务并发,可结合java并发编程理解,并发实现高性能,同时很难。
可能的问题,脏读,不能重复读,幻读。
4个级别
Read uncommitted (读未提交)
Read committed (读提交),Oracle默认
Repeatable read (重复读),MySQL默认
Serializable (序列化)

数据库的分库、分表、分区?
分库,一个数据库分解为多个数据库。
分表,大表分解为多个子表。如order分成order_1,order_2,order_3
分区,一个表,多个存储文件,上层透明。区间法(数值区间、时间区间),散列法
垂直切分,按模块划分。如商家DB,商品DB,用户DB。
水平切分,一个表的数据按某规则(如散列)分散到多库多表。
带来的问题,事务问题,jion问题,上层复杂度。

-----------------------------------------------------------------
noSql:


主要的noSql产品?
Redis,MongoDB,Memcached,Hbase,

为何使用noSql?
速度快,半结构化,使用灵活,支持复杂业务逻辑,集群,分布式

Redis和Memcached的异同?
线程模型,单线程和多线程
事件驱动IO,epoll
数据结构,丰富和简单
内存模型,即时分配和内存池slab
持久化,有和无
集群

Redis和Memcached的内存管理的区别?
略。

-----------------------------------------------------------------
架构:

系统架构?
nginx,mysql,dubbo,zookeer,redis,mongodb,solr等
模块化,分布式,服务化,应用无状态
高内聚,低耦合,面向接口
数据库分库分表,缓存集群
时间换空间,空间换时间

dubbo架构?
分层结构,service,config,proxy,registry,cluster,monitor,protocol,exchange,transport,serialize
主要,注册,提供方,使用方,协议,通信,序列化,多线程,负载均衡。
NIO netty,对象序列化,线程池,动态代理类,
dubbo网络协议,注册管理器zookeeper,
服务提供者列表,服务消费者列表,节点故障检测等

dubbo配置?
服务提供方,服务使用方,
zookeeper
version,timeout,retries等

dubbo LoadBalance负载均衡算法?
com.alibaba.dubbo.rpc.cluster.loadbalance.XXX
Random随机算法,random.nextInt(XX),按列表大小或总权重设置随机概率,默认
ConsistentHash一致性哈希算法,很多个虚拟节点
RoundRobin轮询算法,按权重设置轮询比例
LeastActive最少活跃算法,慢的提供者接收更少请求

zookeeper原理?
目录树结构,znode节点和子节点,
观察者模式,事件监听,主动通知,回调
永久节点(persistent),临时节点(session),顺序节点(sequence)
数据的强一致性,原子性

怎么负载均衡?
总体上,模块化,服务化,分布式,多节点,缓存集群,静态数据分离
细节上,精简逻辑,同步转异步,请求队列,线程池

设计个抢购系统?
同步转异步
前置校验,后置校验
请求编号,检查数量大小,放入请求队列
缓存


-----------------------------------------------------------------
分布式:

什么是分布式?
分布式存储,分布式计算
突破单机瓶颈,提倡水平扩展
多点故障,容错
统一配置管理zookeeper
hbase,元数据和具体数据
mapreduce,任务分解和合并

分布式锁?
1、用redis的cas操作实现
2、用zookeeper的临时序列节点实现
锁节点和请求节点,
请求节点 序列号递增
请求节点,正序排,最小的获得锁

分布式事务?
分布式系统的数据一致性?
不考虑分布式事务,采用弱一致性
局部实时一致,全局最终一致
把事务过程拆分成多个中间状态,定时器扫描,中间状态都一致就都成功,否则都失败
两阶段提交法,协调者,事务参与者,请求阶段,提交阶段
错误补偿机制

-----------------------------------------------------------------
web相关:

页面重定向的过程?
1、浏览器端,发起页面请求,如"http://baidu.com"
2、服务器端,写入状态码301或302,写入一个header location,值为新的url,如
"http://www.baidu.com"
3、浏览器端,发现是301或302,就把header location取出来,跳转到这个location


-----------------------------------------------------------------

完。 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值