面试总结,资源来自牛客网
资源链接:https://www.nowcoder.com/discuss/28072?type=2&order=0&pos=10&page=2
直接上面试经验:
1,java数据结构,HashMap原理,自定义类型可以作为Key吗,(10分钟都在说HashMap),java内存模型,知道的排序算法,重点问了快排,快排的优化,Java多线程实现方式,Java线程与进程区别。
2,java线程与进程差别、JVM内存模型+垃圾回收算法、Java HashMap实现原理、操作系统同步方式、通信方式、计算机网络三次握手四次分手以及wait_time三种差别、Http post和get差别,http状态吗,在线写了一个判断单链表有没有环。
3,数据库引擎类型与差别,数据库索引类型,唯一索引和普通索引差别,在线算法,找出增序排列中一个数字第一次和最后一次出现的数组下标,数据去重,海量数据去重,找出海量数据中前10个最大的数(数据有重复)。
4,单例模式、内推时的相同算法+多线程创建;java 范围关键public以及其他几个;线程与进程差别;java抽象类与接口差别(二面)给定区间[1,3],[2,5],[5,8],[12,55],[3,6],[7,8],最后给出合并后的结果[1,8],[12,15],在线编程,(三面)自我介绍+项目经历,linux查看线程,linux vim 。
5,java 多线程、线程池,java 网络编程解决并发量,java内存模型,数据库的隔离级别,Mysql 存储引擎以及差别。
6,抽象类与接口的差别,抽象类可以有实例吗?String类可以继承吗?synchronizated 和lock差别?HashMap实现原理,同步还是异步?java地址和值传递的例子,Collection集合类中只能在Iterator中删除元素的原因,Mysql 存储引擎类别以及差别。
7,Mysql索引实现原理,Mysql ACID具体,隔离级别,隔离级别如何实现,Java多线程,线程池有哪几类,每一类的差别,synchronized 实现原理,HasnMap实现原理,扩容因子过大过小的缺点,扩容过程。在线程序二分查找,HashMap实现原理,Java Nio,自己个人职业规划,实习城市要求,个人兴趣爱好。
书籍:书籍如下《深入理解Java虚拟机》、《Effective Java》、《深入分析Java web技术内幕》、《高级数据库原理》、《剑指Offer》+牛客在线编程、《Java并发编程实战》、《Java编程思想》
参考:https://www.nowcoder.com/ta/nine-chapter
1,给定N张扑克牌和一个随机函数,设计一个洗牌算法 : 在54张牌中每次产生一个随机数,但每次产生的随机数跟以前不相关。int index = i+random()%(n-i);
2,100亿个整数,内存足够,如何找到中位数?内存不足,如何找到中位数? 1)用quick sort 找出中位数。2)内存不足时,可以用分桶法、归并排序。
3,设计一个多终端日志打印的接口,使得它可以动态支持不同终端的日志打印:可以采用工厂方法模式和策略模式,如果采用工厂方法模式的话,需要一个基类A,保存着需要打印的日志文件和打印的虚函数的方法,后面创建两个方法的子类B,C分别继承了基类A,然后实现打印的虚函数方法,如果是策略模式做到这一步就够了,但是如果采用工厂方法模式的时候,还需要建立抽象工厂方法,然后建立B,C类的工厂,分别实例化B,C类的方法。
4,设计并实现一个LRU Cache:用双链表+hashmap。双链表用于存储访问节点,hashmap用于查找节点,时间复杂度由O(n)降低为O(1)。
http://www.kuqin.com/shuoit/20150623/346719.html
5,设计一个Query suggestion的服务:设计合理即可,下面是一个参考思路:
• 使用Trie树记录每个Query出现的频次(或其他权值)
• 在每个Trie树的节点设置一个最小堆,记录以当前节点的字符串为前缀的query中出现topK次数的 query
• 更新query频次时,沿着trie树中的路径更新路径上节点中的最小堆
• 用户输入query时,直接返回对应trie树节点的最小堆中topK的query即可
6,给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?
与上题条件相同,如何找到top K的IP?如何直接用Linux系统命令实现?
答:用hashmap的分桶法,将100G文件分成1000份,将每个IP地址映射到相应文件中:file_id = hash(ip) % 1000
• 在每个文件中分别求出最高频的IP,再合并 Hash分桶法:
• 使用Hash分桶法把数据分发到不同文件
• 各个文件分别统计top K
• 最后Top K汇总
Linux命令,假设top 10:sort log_file | uniq -c | sort -nr k1,1 | head -10
7,给定100亿个整数,设计算法找到只出现一次的整数 :分桶法,加入把100亿个数映射到1000个区域,每个区域找出只出现一次的整数,然后再放在一起找出最后只出现一次整数。
8,给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集:答:使用hash函数将第一个文件的所有整数映射到1000个文件中,每个文件有1000万个整数,大约40M内存,内存可以放下,把1000个文件记为 a1,a2,a3…a1000,用同样的hash函数映射第二个文件到1000个文件中,这1000个文件记为b1,b2,b3…b1000,由于使用的是相同的hash函数,所以两个文件中一样的数字会被分配到文件下标一致的文件中,分别对a1和b1求交集,a2和b2求交集,ai和bi求交集,最后将结果汇总,即为两个文件的交集。http://www.cnblogs.com/z-sm/p/6238977.html 大数据汇总:http://www.cnblogs.com/qingjiaowoxiaoxioashou/p/6042571.html