一、spring的缓存,mybatis缓存
a、基于注解的方式 三种注解
b、mybatis分为一级session和二级缓存mapper
c、采用LRU算法(近期最少使用) http://www.iteye.com/topic/1112327/ 对缓存并发同步采用jdk的ReadWriteLock 读写锁
源码:mapper调用、代理mapper调用、mapper的方法、sqlsession、缓存(二级没有到一级,一级没有到数据库搜)
二、介绍下dubbo。A服务调用B服务,B服务又调用C服务,这种状况怎么办
client一个线程调用远程接口,生成一个惟一的ID(好比一段随机字符串,UUID等),Dubbo是使用AtomicLong从0开始累计数字的
将打包的方法调用信息(如调用的接口名称,方法名称,参数值列表等),和处理结果的回调对象callback,所有封装在一块儿,组成一个对象object
向专门存放调用信息的全局ConcurrentHashMap里面put(ID, object)
将ID和打包的方法调用信息封装成一对象connRequest,使用IoSession.write(connRequest)异步发送出去
当前线程再使用callback的get()方法试图获取远程返回的结果,在get()内部,则使用synchronized获取回调对 象callback的锁, 再先检测是否已经获取到结果,若是没有,而后调用callback的wait()方法,释放callback上的锁,让当前线程处于等待状态。
服务端接收到请求并处理后,将结果(此结果中包含了前面的ID,即回传)发送给客户端,客户端socket链接上专门监听消息的线程收到 消息,分析结果,取到ID,再从前面的ConcurrentHashMap里面get(ID),从而找到callback,将方法调用结果设置到 callback对象里。
监听线程接着使用synchronized获取回调对象callback的锁(由于前面调用过wait(),那个线程已释放 callback的锁了),再notifyAll(),唤醒前面处于等待状态的线程继续执行(callback的get()方法继续执行就能拿到调用结果 了),至此,整个过程结束。
循环依赖: check="false" 来不检查依赖
三、JVM监控工具备哪些,区别又是什么(如能追上各个命令的使用监控,显得更好),如何调优的(就那么几个内存参数和GC参数何时配置什么样的)?如何定位问题的?(就说各类命令,gc日志,快照,监控工具)
一、jstack 能够定位到具体的线程堆栈,定位cpu冲高 结合top
二、jmap查看堆内存使用状况
三、jstat统计堆的使用状况
四、vivalueVM MAT
四、GC日志 PrintGCDetails 每次GC记录日志
四、使用过Solr?说说(有面试特地想遵从luence发展而来的可独立部署)
五、用过哪些MQ,各个MQ的区别不一样点在哪(阿里还问了协议;采用哪一种语言开发的也说说比较好,由于一些面试为了好跟踪问题确实考虑了这一方面),总之,多说为益,再就是apache新一代推出的MQ:apollo说说彻底是加分项阿里面试者也不知道
。
六、根据你作过的东西,让你说说某一功能或者模块
七、java8了解过吗(阿里问的,时间API,集合的处理,lambda怎么用的说说,函数式编程,不少集合底层代码都有变更能详细说出来加分如hashMap,集合底层代码变更网上是没有的别查了,看JDK7,8,9源码就行)(本人建议最好把JDK7,8,将要推出的9各类新特色熟记并所有动手编写下,9暂时不能编写呢),JDK9特性说上绝逼加分,他也极可能不知道,再就是CMS+新生代并行收集器JAVA8不建议使用了(不多有面试官知道),java9淘汰掉了还有永生带被元空间代替即便阿里他也不知道绝逼加分。
八、说说memcached(直接上原理,说分配的过程,再说注意点优缺点,和哈希一致算法能联系起来更好,前提一致算法要理解要能用代码实现,不然面试着好追问,你要不懂到起副作用了)
九、有几种锁,各个区别,多说有益,多说上底层的更好,阿里还问了原理
十、sleep和await()的区别(补充上condition给本身加分)
condition实例被绑定到一个Lock对象上,经过newCondition()来达到这个目的. condition提供三个方法来达到同步;await(),相似wait() sginal() 相似notify
signalAll()相似notifyAll
十一、线程池说说几种(最好搞懂源码里的原理起码用的哪些队列能说说各自的使用场景说说都是加分的地方,有什么注意点,什么keepalivatime其余的什么的细的问题,多多益善)
十二、哪些锁,不一样的地方在哪(说的越多越详细越深越好)
1三、Threadlocal,上来讲原理,再举个例子用用哪些状况为益
1四、线程池线程池如何解决死锁问题如何诊断,必定要说上具体命令如何定位阿里还特地追问的(从避免这种状况出发说如定时锁,锁粒度等再谈一些监控工具和命令,诊断啥的都会是加分)
1五、常见的序列化方式(面试官想让你说hession,多说为益)
1六、mysql与mongoDB如何选型,何时用谁
1七、A,B两个线程同时启动,但让A结束后B在结束,如何实现(多种,多说为益,他想问join,其余不少方式一些面试官都不知道绝对加分)
1八、redis中wacth以后,以后有事务提交未执行,返回信息吗,返回什么
1九、memcached和redis的区别,不少,把重点说出来,及各自优缺点,从原理上分析对比必是加分项可能redis原理他不懂的,几乎家家公司必问
20、mongoDB的干什么的(在说说内存文件映射引擎,持久化的2个过程必是加分项)
2一、python了解吗,主要用来作什么,实现爬虫能实现吗(爬虫技术知道的话多扯些有益而无害)
2二、JVM的各个带说说(说的越详细越好各个参数都说上什么状况下怎么设置参数更好,和GC结合起来必加分),JVM的GC为何选择分带收集(最好各个算法说上,为何这个带使用这个,和G1的各个方面扯上必装逼成功加分由于几乎他也不懂,由于G1也是采用化整为0的这种分开治理的思想)
2三、ngnix,正向代理,反向代理,阿里特地问了ngnix原理和apache的区别以及出个问题故意让你答和lua脚本结合,而后会继续问你会不会写?ngnix与tomcat的区别
2四、zookeeper干什么的说说(多说为益扯上补充上如何实现分布式锁,同步流程,watcher机制代码流程选举算法绝对装逼99分),分布式锁怎么实现(额外说上尽量避免分布式锁怎么避免为何避免绝逼加分)。阿里直接让说了选举算法(描述大致过程和关键点便可不须要太详细了)
2五、redis两种持久化方式(过程,优缺点最好说上)
2六、复合索引的使用,何时走何时不走,举例
2七、如何实现session共享
2八、多线程下如何实现惟一ID(多种技术,多说为益,越高大尚越好)
2九、js闭包
30、说说我游览器输入www.baidu.com以后怎么一个数据传输过程,主要考网络模型
3一、7层模式都是那几个,有哪些协议,怎么传输的,丢包问题,粘包问题,楚楚街特地问的
3二、java里有哪些集合接口,这些集合的区别是什么,说的越多越深越好,再就是LinkedList的扩容机制,hashmap的扩容机制,注意JDK6,7,8好像都有变化说上绝逼加分项由于他也不知道也没注意过只是停留在JDK6上那个机制。
3三、java有几种基本类型,挑出一种多大字节,取值范围,一个汉字多大空间占(注意根据不一样编码说并且不一样的汉字如复杂汉字就特殊也是加分点我是根据UTF-8,还追问了GBK)
3四、sql执行的过程说说(当时我只说了是9个过程,但具体记不清了,并且会有几个过程缓存住)
3五、什么是笛卡尔积,一个SQL语句where后边有不少and和组后group,limit怎么执行的具体说说
3六、设计模式你熟悉哪些,而后挑出几个来讲说具体怎么设计(最好能画类图,有6大关系搞懂,扩展说上都是加分项,再想加分,就说对某个模式如单例有不少种最牛逼的一种是哪一个牛逼的面试官有时也不知道)
3七、说说mybatis的原理,若是让你设计持久层,你会怎么设计(本人从扩展、灵活、性能几方面切入的)
3八、让你画架构,各类负载集群的那种,特地问若是没有f5怎么着
3九、秒杀中超卖问题有多种方式实现让说说(阿里那本书和一些博客中介绍的不少)
40、各类GC算法必定要熟记整个过程一丝不挂的搞熟练,阿里让画画各个过程,不少都问为何这么作,为何分带收集(按我前边说的,把G1具体过程捎带扯上绝逼加分由于他们不多懂)
4一、一些算法递归,二叉树都要懂,常常性的会面试的差很少了最后问你些数据结构方面熟悉吗,本身要会园上。
4二、100阶乘几个零思考会快速回答上来(面试第一次彻底卡住了,主要是否看真那么钻研问题,阿里的,其实想一想也挺简单,只不过那种场景让你快速答出我是思惟有点乱了)
4三、内存资源颇有限,可是相同的操做不断的分配和释放内存,内存已经被这种频繁的操做被分配不少了,怎么优化(说实话,题目我也没真正搞懂说了下缓存区他说是一方面说其余的什么多线程看样子不是那样的,阿里的)
4四、很大的字符串文件,怎么统计某个字符串出现的频率(其实考你拆分思想用多线程去处理,具体怎么拆分阿里的人也只说用脚本说主要考你拆分的思想,说让JAVA API和Guava处理这种简短字符串状况的API绝对是加分的)
4五、Guava用过哪些API,具体说说
4六、JVM的各个带说说画画,说的越具体越好,结合上调优和GC,各个命令和参数配置绝逼加分,越细越好,细的他都不知道必加分(阿里的人具体还追问了参数怎么写辛亏我知道常见就那几个)
4七、倒水问题,5升和3升如何称出4升水,其余技术都回答的差很少最后问的逻辑题
4八、mysql中2个引擎的区别,几乎家家必问
4九、mysql中char与varchar的区别,什么状况下用char比较好,int(5)类型字段若是存的数据超出大小会怎么样
50、悲观锁、悲观锁解释解释,还有脏读和什么读一堆挂读的概念问我怎么理解他们,醉了,还有事务ACID分别说说,什么叫原子性,什么叫一致性,事务的隔离级别哪几种
5一、redis的事务,watcher,当watcher事务提交失败会返回信息吗,返回什么信息
5二、链接池用过哪些,阿里特地问了druid的特色(特色好多,多说为益),为何采用链接池
5三、dubbo的整个调用过程,让画画,就是那4个,服务端启动注册消费端订阅那个,RPC的过程最好能顺口说出加分项。还有问dubbo服务端和消费端都配置了那个生效?dubbo里的jetty干啥用的?
5四、zk除了作分布式锁和注册中心,还能用来干啥
5五、重载和重写的区别,越详细越好,说的越多越好
5六、接口和抽象类区别,越详细越好,及为何须要抽象类
5七、时间片解释下,上下文切换解析下,什么状况下会影响上下文切换,怎么避免过多的上下文切换
5八、一个线程,从链接池里获取一个链接connection后,而后这个线程开辟了2个子线程,把这个connection传给它俩个,提交数据会有影响吗,为何(如今想一想本身解释的有点牵强,应该从事务的传播行为和级别入手,也可能其余,确定面试官本身使用不当遇到的bug问题,若有合理解释的或者特地能作了实验的,必定要告诉你们一声)
5九、什么叫复制构造函数,构造函数的重载
60、JVM的内存分配?(要熟记,越细越好)
6一、TCP的三次握手四次拜拜要熟记
6二、浮点类型为何有时候不精确,详细说出来,怎么解决
6三、int类型在32位和64位有什么不一样
6四、zk分布式锁具体怎么实现(58,美团的都问了,最好亲自用代码编写下,思路搞懂)
6五、给一个字符串类型的数字,不调用java直接转的API写一个方法转换出来(58的不知道那个技术老大想考啥思路就是转字符数组利用ASSII编码,问他弄这个干啥他也不说)
6六、给我几张表,写几个个SQL(我以前利用子查询,后来他说不利用子查询一条sql查出来,其实就是链接查询group,和count而后再利用统计的数过滤下,其中count(*)和count(1)和面试官争辩了起来,他也不肯定后来就过了,美团的)
6七、写个单例模式(其余有不少种,我也知道他想考啥,可是想加分,写最好的2点兼顾的利用私有静态内部类,网上提到的不多,优化书中的,面试官认为我是错的让我肯定下,后来给他讲通了)
6八、熟悉哪些设计模式(而后让你简单说说,58让写的代理,把各个类图之间的关系说清楚及接口的设计加分的)
6九、代理有几种?静态代理和动态代理有什么区别?什么状况下用什么具体说说?
70、让我说下OOP里的单一原则的定义(他说这个定义很是重要,非要我说出定义),我拿出具体的设计实例说明哪些地方设计体现单一原则(他仍是让说定义,美团的,醉了,定义我确定没仔细推敲过,你们能够推敲下)
7一、JVM的内存分配,内存溢出,内出调优,GC调优,GC算法,G1收集器,还有参数经常使用参数名(美团的那我的一直让我说哪一个具体参数名字,我说JVM虚拟机参数列表一查就知道了知道那是工具就行,我看他的样子可能也没记住,仍是拿着笔记本查呢,醉了,最好几个经常使用的记住看样子也是有意而无害的我都记个大概的样子),如何调优如何具体优化举例子越细越好什么阀值具体到什么GC算法在什么状况下怎么设置他的什么样的参数越细越好,还有问题诊断,具体怎么定位,最好前提你说上基于java的哪一个版本规范,哪一个虚拟机,由于不一样版本不一样虚拟机确定有所不一样,能说出来必加分(呵呵,装的你多严谨,如装逼成功确定加分)
7二、NIO与IO的区别,什么状况下用谁,具体说说例子
7三、dubbo支持几种协议,协议的区别,容错机制,什么状况用什么,RPC的过程,dubbo是如何实现负载均衡的(源码级别),负载均衡策略,改过监控的中心吗,如何优化调用,怎么部署,zk挂掉3个挂掉2个会怎么样,为何,看过dubbo源码吗
7四、哈希一致算法具体描述下(最后本身用java实现下或理解了),为何要用hash一致算法
7五、在CPU不考虑的状况下内存有限的状况下计算最大并发数大概多少(linux下有不少注意事项会约束给他说说他可能也想不到都是加分的,而后再让你不考虑这些因素怎么计算说说,也和系统位数有关,也有对应的计算公式)
7六、在内存不考虑,8核CPU,挂起时间(好像是单个线程执行任务时间)30ms,CPU满负载最大多少并发(其实他当时也没说清楚,后来追问下补充了响应时间1S)
7七、给你写出2个数组,在纸上写个方法查出相同的元素(想考细节,把大致写出来以后给他说明一些特殊状况的处理),继续追问如何优化这个方法(说说本身的看法,如相同元素不少的状况用什么瞎吹呗),最好把JDK,commons,guava的相关API说下再说名你的理由啥的都是加分的
7八、linux命令用过哪些,说的越高大尚越好,经常使用的确定要说上
7九、乐观锁问题,通常不直接问,给你说个分布式场景(用时间戳版本号啥的解决)
80、CAS知道吗,说说(多多益善,说上ABA问题必加分有时面试官也不知道,扯上volite和锁区别什么场景下用谁必加分)
8一、让画ER图,时序图
8二、一个类里几个静态方法和几个普通方法,几个静态方法里有几个加synchronized,普通方法里有几个也加synchronized,这4种方法组合状况各个状况下同一个实例在多个线程里用到时阻塞不阻塞问题
8三、tomcat里有几个端口的配置?同一个tomcat能同时配置2个端口吗?
8四、tomcat里如何禁止服务端自动建立session
8五、servlet和过滤器,监听器,servlet启动顺序是什么样的
8六、spring的核心配置文件名是什么,具体描述一下里边的重要的配置,spring和mybatis集成的后的配置文件又怎么配置,须要配置什么,spring和springMVC的区别
8七、mybatis的配置文件怎么组织的,如何配置
8八、spring的AOP和IOC具体描述下,干什么的,怎么实现解偶的,它们是底层经过什么实现的
8九、类加载有哪些,机制是什么,类初始化的时机(那4个)有哪些
90、一个对象为null必定会被GC掉吗(确定不会,至少有2个过程,给他描述下,越细越好,他可能也不知道,楚楚街问的)
9一、final static 和static初始化都是何时初始化的?
9二、静态代码块和普通代码块有什么区别,什么场景下使用
9三、shell脚本写过吗?(就一家问到了就简答追问了下开头的声明干啥的)
9四、看过哪些书籍,日常怎么学习这些知识的
9五、conncurrentHashMap和hashmap的区别(6,7,8可能都所不一样,能说出来必加分他可能也没注意过,不说也不要紧)
9六、mongoDB,redis分片,主从,有问到,问到了都是简单问问,通常都是本身补充上其余东西,最好都要清楚,加分的,也以防万一,redis持久化2种方式有哪些问到有,而后你追加一些注意事项
9七、日常你遇到的一些不规范性问题,能再优化的问题,具体说说例子
9八、ngnix具体怎么配置切换服务器和负载均衡策略,说说具体的配置地方
9九、那些并发工具就不说了,最好都知道干啥用的,问到也有可是不多不知道到问啥
100、netty和mina到时有提到的,可是就是简单问问知道吗,用过吗这些问题,固然本身对它们越熟练越清除越好
10一、tomcat具体在哪配置链接池,能配置哪些信息
10二、java反射类的私有方法与普通方法相比,须要多处理什么?
10三、java中有哪些集合?这些集合有什么区别,arrayList和HashMap的扩容机制(集合说的越多越好,各个集合都有什么区别,什么场景下用什么,注意些什么,有些6,7,8有不一样,能说出来更好)
10四、zk有哪几种类型的节点,又有哪些监听事件,具体说说?
10五、用过哪几种抓包工具?报文结构?
10六、如何中断一个线程?线程在那种状态才能够中断?
分库分表原则,具体什么场景采用什么举例子,分布式事务问题,AIO,索引原理等还有不少问题没问到,不过若是熟练掌握以上知识,即便一些其余的不懂也会是瑕疵不影响总体印象,再结合下边几点做为补充,技术面试国内任何一家公司包括阿里都是没问题的,吹的有点大,只适合装逼人士,一本正经者吹毛求疵者勿看。若是你已面试,欢迎补充面试技术点,你我码农共同进步!
一、Spring.mvc的优点,原理,流程
二、Mybatis的原理优点
三、集合里面那些对象的原理
四、扩容原理,特别是map的底层
五、Hashmap、Hashtable和cocurrentHashMap的区别,要讲出它们各自的实现原理才行,好比Hashmap的扩容机制、cocurrentHashMap的桶分割原理、多线程安全性。
六、几种造线程池的方法,区别
七、Rpc原理
八、Nio和netty,经常使用的接口
九、Redis和数据库的持久化的
十、Memached过程和原理
十一、多线程时间复杂度
十二、Redis作队列的原理
1三、zk作订阅的原理,底层
1四、Juc里面的锁原理
1五、实现本身的hashmap
1六、treemap红黑树
1七、jvm调优
1八、jvm内存模型
1九、类加载器机制
20、数据库索引
2一、数据破坏索引
2二、手写快排
2三、js闭包
2四、nio是否了解 阻塞以后通知机制是怎样的?
2五、Java 的序列化作什么用的 序列化id会出现哪些问题?
2六、 在Java中Executor和Executors的区别?
2七、 为何使用Executor框架比使用应用建立和管理线程好?
2八、怎么经过linux命令去分析jvm里面那个线程阻塞了
2九、Java中用到的线程调度算法是什么?
30、什么是多线程中的上下文切换?
3一、classloader结构,是否能够本身定义一个java.lang.String类,为何? 双亲代理机制。
3二、有没有作过jvm内存调优,如何作的,举例子,用过哪些工具?
3三、Java中的volatile关键是什么做用?怎样使用它?在Java中它跟synchronized方法有什么不一样?
3四、面试官从简历里抽了一个较感兴趣的项目,让把项目简单介绍了下,针对项目问了几个技术问题
3五、 介绍Java中垃圾回收机制,程序员平时须要关注这个吗?为何?请举例说明。
3六、数据库隔离级别介绍、举例说明。
3七、override和overload的区别。
3八、求二叉树的最大距离(即相距最远的两个叶子节点),写代码。
3九、 两个栈实现一个队列,写代码。
40、 你以为你的优点是什么?有什么技术薄弱点吗?
4一、数据库sql调优,慢sql定位
4二、索引有哪几种,区别,使用场景
4三、mysql引擎,哪几种,区别使用场景
NIO原理,内存模型,GC,锁机制
传统IT外企干了8年,两年前转互联网的,面的和被面的都很多。
这几天项目空档期,闲的蛋疼,随手写的, 不喜勿拍。
1. 算法基础
写java的基本上都是作应用系统的,用到算法的机会几乎没有,因此通常不会考。可是若是工做年限比较长,保不齐面试官怀疑你的编程能力,故意要考考,因此快排、堆排、逆转链表、遍历二叉树之类的基础仍是复习复习吧。
若是面的是bat核心部门,担忧遇见装逼人士的话,也能够提早复习下《编程之美》之类的。
2. java基础
hashmap面试官最喜欢考,必定要搞明白原理。
treemap知道就能够,应该没人闲的蛋疼考红黑树。
threadlocal面试官也喜欢考,要搞明白原理
反射、动态代理、ioc、aop复习下吧,几乎必考
nio、aio几乎都会问,抽空写写例程,知道netty mina
class loader: 知道双亲委派,若是知道tomcat、jetty class loader异同更佳
3. gc
gc不少面试官都喜欢考
面试前背熟各类gc算法的区别,理解原理。
G1不少面试官本身都不明白,没时间就不用管。
4. 高并发
传统IT通常接触不到高并发,不过不要紧按下面说的作,应付面试问题不大
把java.util.concurrent下面全部的包和类通读一遍,理解原理、记住核心代码、写例程,网上有不少concurrent相关类原理解析的文章,对着文章看源代码理解起来问题不大。
有些类代码很复杂好比aqs,看不明白就算了,也不用太花功夫,记住原理便可,由于大部分面试官也不明白。
必定要写例程,例程最好跟你的业务能扯上一点点关系,这样面试的时候就是你实际项目里面的代码了。
面试官喜欢考的类有:ConcurrentHashMap、读写锁、Condition、线程池、Barrier、CountDownLatch、Callable、BlockingQueue
5. hdfs和mr
传统IT通常也接触不到,若是不想准备就算了,若是想准备的话,就在本身的开发机上撘3个linux虚机, 按照网上的教程本身一步一步撘一个hadoop环境出来,而后找几个实际业务中生成出来的log,写几个mr程序处理一下。
面试的时候就能够很谦虚的说,实际项目里面用过,可是用的很少
6. application server
websphere、weblogic、jboss之类的就不用准备了,应该没人问你这些啦。
有时间的话,看看tomcat和jetty的源代码,重点看线程模型和io,这将是一个很好的加分项
7. 数据库
oracle、sybase、db2不会有人关心了,若是以前没用过mysql的话,找本介绍innodb原理的书好好通读一遍吧。
理解myisam和innodb的区别
理解关系型数据库索引的原理,理解一些简单的索引优化的原则。
面试官很喜欢给出一堆where子句,考索引、复合索引什么状况下起做用
8. 缓存
一致性哈希不少面试官喜欢考,提早准备下吧。
9. ssh框架
这些没搞过就没搞过吧,这种框架层面的东西,对于一个有经验的java码农,学起来也就是分分钟的事情。
不过你也能够说这些我没用过,可是我知道原理,而后说一堆动态代理、cglib的原理出来,也是加分。
但愿这些对传统IT想转互联网的朋友有帮助。
not in 与 not exists 有什么区别? in查询不对null进行处理
二分,递归,还有冒泡,就差很少了java
做者:头条号 / 技术领地
连接:http://toutiao.com/i6315908502707503618/
来源:头条号(今日头条旗下创做平台)
著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。python
一、关于spring的aop的实现方法
二、关于分布式消息队列,分布式缓存
三、关于rpc方面
四、关于hashmap源码实现
五、关于Java异常的续承层次结构,讲述异常的续承关系
六、关于https握手过程
七、关于java数据库问题定位和性能调优
八、关于设计模式,uml,jvm?内存回收机制问题
九、java中重载和重写有什么区别?分别用什么关键字??
十、java线程如何启动??
十一、java中加锁的方式有哪些,怎么个写法??
十二、乐观锁和悲观锁解释一下?
1三、ORACLE中的SQL如何进行优化,都有哪些方式??
1四、java中类的加载机制
1五、说一下有哪些经常使用的设计模式?
1六、事务有哪些特性,在ORACLE中隔离有哪些级别?
1七、使用memcached是一个什么样的原理?
1八、如何存放数据到memcached集群中,介绍一下这个过程。一致性哈希算法的实现原理。mysql