面试题收集2

计算机网络相关  
1 TCP三次握手、四次握手
2 TCP滑动窗口机制
3 TCP拥塞控制机制
4 socket模型

C/C++相关  
1 虚析构、模板和宏
2 虚函数实现机制
3  vector与list的区别,map是如何实现的,查找效率是多少
4 extern 关键字有什么用
5 malloc和new的区别,能否malloc(1.2G)

linux以及操作系统相关  
1 内存池实现
2 进程间通信机制
3 Linux ps命令,以及看内存当前使用状态的命令
4   进程与线程的区别,共享的数据
5 进程的内存空间

算法与数据结构   (手写代码实现)  
1 大整数加、减、乘、除、求模运算实现
2 很多整数,找其中出现次数最多的那个数
3   单链表翻转(两个指针如何实现)、查找、删除、插入以及双向链表、有序链表合并
4   判断一个整数是否是2的整数次幂.(n&(n-1))
5   二分查找(注意边界条件)
6   常见排序算法的实现以及稳定性(快排跟归并考的很多)
7 字符串翻转(O(n))、匹配(KMP算法)
8   最长递增子序列(nlogn的算法)
9   链表判断是否有环,环的入口,两个链表是否相交(快慢指针)。
10 指定一个数组,求2个数的和等于指定的和(某一个数),如果是3,4,5,n个等于个的和(某一个数)呢?(可以看作背包问题)

其他  
1 红黑树的性质以及插入和删除
2 解析XML文件
3   千万级的用户,提供一个服务,该服务有很多模块,现在有一个底层模块需要优化,问怎么实现,在不影响其他服务模块以及用户体验的情况下。(面IEG)
4 卡特兰数以及公式推导(应多很多)
5   未知大小的文件,翻转整个文件
6   如果内存中有个cache存储qq号和最近登录时间问怎么样做hit和淘汰
7   检测短信敏感词
8 大数据问题
9 C++、java和PHP有什么本质区别

 

 本人Java开发,3年经验,7月初来到帝都,开启面试经历,前后20天左右,主面互联网公司,一二线大公司或者是融资中的创业公司都面试过,拿了一些offer,最后综合决定还是去360了。不同面试官面试风格一定不同,我这里就是总结这些天面试Java开发过程中的大多数问题,综合分类有Java基础,框架,多线程,网络通信,Linux,数据库,设计模式,算法,缓存等几个模块,由于问题太多,下面先列出问题,之后有时间在写文章解答,或者网上有很多答案,可以自行搜索。
一、Java基础
1.String类为什么是final的。
2.HashMap的源码,实现原理,底层结构。
3.反射中,Class.forName和classloader的区别
4.session和cookie的区别和联系,session的生命周期,多个服务部署时session管理。
5.Java中的队列都有哪些,有什么区别。
6.Java的内存模型以及GC算法
7.Java7、Java8的新特性(baidu问的,好BT)
8.Java数组和链表两种结构的操作效率,在哪些情况下(从开头开始,从结尾开始,从中间开始),哪些操作(插入,查找,删除)的效率高
9.Java内存泄露的问题调查定位:jmap,jstack的使用等等

二、框架
1.struts1和struts2的区别
2.struts2和springMVC的区别
3.spring框架中需要引用哪些jar包,以及这些jar包的用途
4.srpingMVC的原理
5.springMVC注解的意思
6.spring中beanFactory和ApplicationContext的联系和区别
7.spring注入的几种方式
8.spring如何实现事物管理的
9.springIOC和AOP的原理
10.hibernate中的1级和2级缓存的使用方式以及区别原理
11.spring中循环注入的方式

三、多线程
1.Java创建线程之后,直接调用start()方法和run()的区别
2.常用的线程池模式以及不同线程池的使用场景
3.newFixedThreadPool此种线程池如果线程数达到最大值后会怎么办,底层原理。
4.多线程之间通信的同步问题,synchronized锁的是对象,衍伸出和synchronized相关很多的具体问题,例如同一个类不同方法都有synchronized锁,一个对象是否可以同时访问。或者一个类的static构造方法加上synchronized之后的锁的影响。
5.了解可重入锁的含义,以及ReentrantLock 和synchronized的区别
6.同步的数据结构,例如concurrentHashMap的源码理解以及内部实现原理,为什么他是同步的且效率高
7.atomicinteger和volatile等线程安全操作的关键字的理解和使用
8.线程间通信,wait和notify
9.定时线程的使用
10.场景:在一个主线程中,要求有大量(很多很多)子线程执行完之后,主线程才执行完成。多种方式,考虑效率。

四、网络通信
1.http是无状态通信,http的请求方式有哪些,可以自己定义新的请求方式么。
2.socket通信,以及长连接,分包,连接异常断开的处理。
3.socket通信模型的使用,AIO和NIO。
4.socket框架netty的使用,以及NIO的实现原理,为什么是异步非阻塞。
5.同步和异步,阻塞和非阻塞。

五、Linux
1.常用的linux下的命令
2.大的log文件中,统计异常出现的次数、排序,或者指定输出多少行多少列的内容。(主要考察awk)
3.linux下的调查问题思路:内存、CPU、句柄数、过滤、查找、模拟POST和GET请求等等场景
4.shell脚本中#!的作用

六、数据库MySql
1.MySql的存储引擎的不同
2.单个索引、联合索引、主键索引
3.Mysql怎么分表,以及分表后如果想按条件分页查询怎么办(如果不是按分表字段来查询的话,几乎效率低下,无解)
4.分表之后想让一个id多个表是自增的,效率实现
5.MySql的主从实时备份同步的配置,以及原理(从库读主库的binlog),读写分离
6.写SQL语句。。。
7.索引的数据结构,B+树
8.事物的四个特性,以及各自的特点(原子、隔离)等等,项目怎么解决这些问题

七、设计模式(写代码)
1.单例模式:饱汉、饿汉。以及饿汉中的延迟加载
2.工厂模式、装饰者模式、观察者模式。

八、算法
1.使用随机算法产生一个数,要求把1-1000W之间这些数全部生成。(考察高效率,解决产生冲突的问题)
2.两个有序数组的合并排序
3.一个数组的倒序
4.计算一个正整数的正平方根
5.说白了就是常见的那些查找排序算法(排序转载:http://mp.weixin.qq.com/s?__biz=MjM5MTAzMTE4Nw==&mid=204838393&idx=2&sn=e9b50c8ef689e2cb6436110a8dc148a3&scene=5#rd)

九、缓存
1.为什么用缓存,用过哪些缓存,redis和memcache的区别
2.redis的数据结构
3.redis的持久化方式,以及项目中用的哪种,为什么
4.redis集群的理解,怎么动态增加或者删除一个节点,而保证数据不丢失。(一致性哈希问题)

 

 

Java基础知识:

三家公司都问了java集合类的相关概念,各种集合结构之间内在区别:

ArrayList,Vector,LinkList区别

HashMap,HashTable,ConCurrentHashMap区别

Collections.synchronizedXX 方法的原理

设计模式,这种问题感觉没啥意义,工作中用哪个模式还是靠感觉和经验

Java某些原理:RPC,注解,反射,内存,GC,其中Java内存模型和GC过程几乎必问,通常也比较深入,有时候甚至会跳到其他语言的内存机制上,JVM参数以及相关调优,不过还遇到要求JVM调优经验的(-。-)

Java多线程:对多线程包java.util.concurrent的了解,多线程设计模式Future,ThreadLocal使用及原理,多线程协同demo(纸上代码)

Java新技术:NIO,Java 8、9,如果对这方面很熟悉,能够给人一种geek范,也许会有加分(如果之前基础知识不好就变成自黑了)

 

数据库知识:

SQL语句的书写,由于某些支付公司采用oracle数据库,所以对这个数据库最好有一定的了解。

数据库基础知识,join操作,数据库锁,数据库事物特性ACID

NOSQL,memcache,redis区别,使用时数据一致性的解决,负载均衡

数据库索引,索引的添加修改对性能有何影响,其内在数据结构,联合查询的索引使用,为了配合索引sql语句书写规范。

数据库锁,悲观锁乐观锁,锁的粒度以及相应SQL语句,锁隔离界别

企业开发相关框架

这部分各个公司通常都会考察spring-AOP/IOC,然后考察在工作中的使用,这部分是我的弱点,因为实在是没用过。

Tomcat性能调优,相关参数

Nginx,负载均衡

Memcache 一致性Hash

Zookeeper master/slave协同

SSH使用,MyBatis使用,基本框架与原理

如果所在公司内部有开源框架并且工作中涉及到,看过源码并且比较熟悉,框架很有特点,那可以和面试官侃一会,如果框架各种黑点就不要提了。

 

总体上,对于一个高级Java工程师的要求还是蛮多的,首先是Java基础知识,这点不需要多说了;

其次是互联网工作中用到的各种技术,数据库,框架,如果了解内在原理最好,如果读过源码就赞了;

最后如果面试外企或是核心部门,对纸上代码还是有要求的,而且如果面试算法,最好用C/C++   写,拿java写算法总是感觉别扭,python写就太偷懒了,面试官表示你这么机智又不肯老老实实滚让我们很为难啊。。。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值