你离BAT之间,只差这一套Java面试题
最近,各大公司开始了春招,很多人已经开始在准备面试了,特地来总结下初中级程序员应该掌握的面试题目。这篇面试指南,只适用于初中级程序员,其中不涉及分布式等问题。关于中高级的程序员问题,我后面可能再出一篇文章。
对于一个初中级程序员来说,面试问题不仅仅涉及到Java语言,还会包括很多其他知识,比如计算机基础知识(数据结构、计算机网络、操作系统等)、C语言基础、Java底层知识以及一些框架相关知识等。本文几乎覆盖到了所有领域。
- 计算机基础知识
- C语言基础
- Java基础
- Java高级
- Java Web
- 设计模式
- 知识的综合能力
- 工具使用
- 项目相关
- 技术热情
- 表达能力
- 思考方式
- 其他
- 推荐阅读
还有,我知道很多人会问关于这些题目的答案问题。答案我都有,由于篇幅有限没办法直接贴上来。这些题目的答案我会在我的公众号及知识星球中给出,感谢关注。
为了方便,我把他们分了类,有一些是必看的,我用!标注,有一些进阶型的我用%标注,有一些需要了解的,我用?标注。
必会关键字
voidbyteintlongcharshortfloatdoubleStringStringBufferStringBuilderArrayCollectionCollectionsListArrayListLinkedListVectorSetHashMapTreeMapLinkedHashMapConcerrentHashMapSetTreeMapHashMapsynchronizedvolatiletransientimplementsextendspublicprivateprotectedthissuperstaticfinalconstrunstartthreadenmustackqueuelistheapthrowthrowstrycatchfinallybreakcontinueinstanceof
计算机基础知识
数据结构
!1、什么是队列、栈、链表
!2、什么是树(平衡树,排序树,B树,B+树,R树,红黑树)、堆(大根堆、小根堆)、图(有向图、无向图、拓扑)
!3、栈和队列的相同和不同之处
?4、栈通常采用的两种存储结构
%5、两个栈实现队列,和两个队列实现栈
算法
!1、
排序都有哪几种方法?!2、会写常用的排序算法,如快排,归并等。
%3、各种排序算法的
时间复杂度和稳定性,重点快排。!4、单链表的遍历和逆序
!5、
深度优先搜索和广度优先搜索?6、最小生成树
!7、常见Hash算法,哈希的原理和代价
%8、全排列、贪心算法、KMP算法、hash算法
?9、一致性Hash算法
操作系统
?1、虚拟内存管理
?2、换页算法
!3、进程间通信
?4、进程同步:生产者消费者问题、哲学家就餐问题、读者写者问题
!5、死锁的四个必要条件,避免方法
!6、Linux的一些基本命令,如
ls、tail、chmod等
计算机网络
!1、tcp,udp区别
!2、HTTP请求和响应的全过程
!3、HTTP常见响应码:200、301、302、404、500
!4、get和post的区别
!5、forward和redirect的区别
!6、
osi七层模型!7、
tcp/ip四层模型及原理!8、TCP和UDP区别
!9、TCP的三次握手,四次关闭
%10、丢包,粘包,
?11、容量控制,拥塞控制
?12、子网划分
%13、IPV4和IPV6
?14、HTTPS和HTTP/2
数据库:
!1、
范式!2、数据库事务和隔离级别
!3、为什么需要锁,锁定分类,锁粒度
%4、
乐观锁,悲观锁的概念及实现方式!5、
分页如何实现(Oracle,MySql)!6、Mysql引擎
?7、MYSQL语句优化
%8、从一张大表读取数据,如何解决性能问题
!9、
内连接,左连接,右连接作用及区别!10、
Statement和PreparedStatement之间的区别%11、
索引以及索引的实现(B+树介绍、和B树、R树区别?12、什么是数据库连接池
海量数据处理
%1、海量日志数据,如何提取出某日访问淘宝次数最多的IP
%2、上亿数据,统计其中出现次数最多的前N个数据
%3、5亿个int,找出他们的中位数
%4、两个文件,各存放50亿条URL,每个URL占64字节。内存限制是4G,找出两个文件中相同的URL
%5、有40亿个不重复的unsigned int的整数,没排过序,现在给一个数,如何快速判断这个数是否在这40亿个数当中。
?6、提示:分治、Hash映射、堆排序、双层桶划分、Bloom filter、bitmap、数据库索引、mapreduce
C语言基础
构造函数、析构函数
!1、构造函数和析构函数
%2、为什么不要在构造器中调用虚函数
%3、为什么不要在析构函数中抛出异常
c++相关
!1、面向对象的三大基本特征,五大基本原则
%2、C++继承的内存布局
!3、C++多态的实现机制
!4、new/deletr和malloc/free的区别
其他
!1、为什么使用补码
%2、C语言中的内存泄漏
!3、进制转换
% 4、自己编写strlen/strcpy/strcmp
! 5、C、C++以及Java之间的区别和各自优缺点
Java基础
封装、继承、多态
!1、Java中实现多态的机制是什么,动态多态和静态多态的区别
!2、接口和抽象类的区别,如何选择
!3、Java能不能多继承,可不可以多实现
%4、
Static Nested Class和Inner Class的不同!5、重载和重写的区别。
!6、是否可以继承
String类!7、构造器是否可被
override?!8、
public,protected,private的区别?
集合相关
!1、列举几个Java中
Collection类库中的常用类!2、
List、Set、Map是否都继承自Collection接口?存储特点分别是什么?!3、
ArrayList、LinkedList和Vector之间的区别与联系!4、
HashMap和Hashtable、TreeMap以及ConcurrentHashMap的区别!5、
Collection和Collections的区别%6、其他的集合类:
treeset,linkedhashmap等。
异常相关
!1、
Error和Exception的区别!2、异常的类型,什么是运行时异常
!3、
final、finally和finalize的区别%4、
try-catch-finally中,如果在catch中return了,finally中的代码还会执行么,原理是什么?!5、列举3个以上的
RuntimeException!6、Java中的异常处理机制的简单原理和应用
其它
!1、
String和StringBuffer、StringBuilder的区别!2、
==和equals的区别%3、
hashCode的作用,和equals方法的关系!4、
Input/OutputStream和Reader/Writer有什么区别!5、如何在字符流和字节流之间转换?
!6、
switch可以使用那些数据类型%7、Java的四种引用
!8、序列化与反序列化
!9、正则表达式
!10、
int和Integer的区别,什么是自动装箱和自动拆箱
Java高级
多线程
!1、进程和线程的区别
!2、并行和并发的区别和联系
!3、同步与异步
!4、多线程的实现方式,有什么区别
!5、什么叫
守护线程%6、如何停止一个线程?
!7、什么是
线程安全?!8、
synchronized和lock的区别!9、当一个线程进入一个对象的一个
synchronized方法后,其它线程是否可进入此对象的其它方法?!10、启动一个线程是用
run()还是start()?!12、wait和sleep的区别
%13、notify和notifyAll的区别
%14、线程池的作用
%15、Java中线程池相关的类
JVM底层技术
!1、
gc的概念,如果A和B对象循环引用,是否可以被GC?%2、jvm gc如何判断对象是否需要回收,有哪几种方式?
!3、Java中能不能主动触发GC
!4、JVM的内存结构,堆和栈的区别
!5、JVM堆的分代
%6、
Java中的内存溢出是什么,和内存泄露有什么关系!7、Java的类加载机制,什么是双亲委派
!8、ClassLoader的类加载方式
IO
! 1、NIO、AIO和BIO 之间的区别
?2、
IO和NIO常用用法
其它
?1、
hashcode有哪些算法!2、反射的基本概念,
反射是否可以调用私有方法!3、Java中
范型的概念?4、JVM启动参数,
-Xms和-Xmx%5、
代理机制的实现!6、
String s = new String("s"),创建了几个对象。
Java Web
Servlet
!1、
JSP和Servlet的区别,Servelt的概念。!2、
Servlet的生命周期!3、Servlet中的
session工作原理 ,以及设置过期时间的方式!4、Servlet中,
filter的应用场景有哪些??5、JSP的动态
include和静态include%6、web.xml中常用配置及作用
%7、Servlet的线程安全问题
MVC框架
!1、介绍几个常用的MVC框架
!2、什么是MVC
!3、
Struts中请求的实现过程%4、
Spring mvc与Struts mvc的区别?5、
Service嵌套事务处理,如何回滚!6、struts2 中拦截器与过滤器的区别及执行顺序
%7、struts2拦截器的实现原理
http相关
!1、
session和cookie的区别!2、HTTP请求中
session实现原理?%3、如果客户端禁止Cookie能实现Session吗?
!4、http中
get和post区别!5、
redirect与forward的区别!6、常见的web请求返回的状态码。404、302、301、500分别代表什么
SSH相关
?1、
Hibernate/Ibatis/MyBatis之间的区别?2、什么是
OR Mapping%3、hibernate的缓存机制、一级和二级缓存
!4、使用Spring的好处是什么,Spring的核心理念
!5、什么是
AOP和IOC,实现原理是什么!6、spring bean的初始化过程
!7、Spring的
事务管理,Spring bean注入的几种方式%8、spring四种依赖注入方式
容器相关
!1、什么是web服务器、什么是应用服务器
!2、常用的web服务器有哪些?
?3、
Tomcat和weblogic的区别
web安全
!1、什么是
SQL注入,如何避免。%2、什么是XSS攻击,如何避免
%3、什么是CSRF攻击,如何避免
动态代理
!1、Java的动态代理的概念
%2、Java的动态代理的实现
编码问题
!1、常用的字符编码
!2、如何解决中文乱码问题
其它
%1、XML的解析方式,以及优缺点。
%2、什么是ajax,
Ajax如何解决跨域问题
设计模式
%1、谈一下自己了解或者熟悉的
设计模式!2、
Singleton的几种实现方式,实现一个线程安全的单例。?3、
工厂模式和抽象工厂模式之间的区别
知识的综合能力
!1、请介绍一下一个http请求的全过程,描述的越全面越好
!2、当你在浏览器地址栏输入www.taobao.com,敲下回车之后都发生了什么
工具使用
!1、知道git/svn是干什么的吗?用过吗
!2、知道maven/gradle是干什么的吗?用过吗
!3、平常使用什么IDE,为什么
!4、平常使用什么浏览器,为什么
!5、平常开发机器是什么操作系统的
!6、会在Linux上开发吗。Linux常用命令会吗
项目相关
!1、请简单介绍一下你的这个项目
!2、你在这个项目中充当什么角色
!3、这个项目的技术选型有做过么。
!4、选择某项技术做过哪些调研和对比
!5、这个项目中遇到的最大的问题是什么?你是如何解决的。
!6、项目中是否考虑过性能、安全性等问题
技术热情
!1、当前Java的最新版本
!2、Java8的lambda表达式
%3、Java8的stream API
%4、Java9的模块化
%5、Java10的局部变量类型推断
%6、Spring Boot2.0
%7、HTTP/2
%8、会FQ么,知道FQ的原理吗
!9、你最近在读什么书
表达能力
!1、能不能简单做一个自我介绍。
!2、能不能描述一下杭州给你的印象。用三句话概括一下。
思考方式
!1、如何估算杭州有多少软件工程师
!2、你最近读过的印象最深的文章是什么
!3、这篇文章中有几个观点,你最赞成哪一个,最不赞成哪一个
其他
!1、你对加班怎么看
!2、你还有什么问题要问我(面试官)的么
推荐阅读
程序员面试笔试宝典
程序员面试金典
Java编程思想
Effective Java
深入理解Java虚拟机
大话数据结构
剑指Offer
!个人公众号(Java团长)
最近,我公众号的粉丝,部分拿到了阿里、京东、58等offer<,均表示这套题目覆盖率几乎可以达到80%。快来关注我的公众号吧。一起进步。
我有一个微信公众号,经常会分享一些Java技术相关的干货;如果你喜欢我的分享,可以用微信搜索“Java团长”或者“javatuanzhang”关注。
你离BAT之间,只差这一套Java面试题的更多相关文章
- 你与优秀源码之间只差一个 Star
fir.im Weekly - 你与优秀源码之间只差一个 Star 说起开源社区,Github 是一个不可缺少的存在.作为全球最大的同性交友网站,上面有太多优秀的开源代码库和编程大神,让无数开发者 ...
- fir.im Weekly - 你与优秀源码之间只差一个 Star
说起开源社区,Github 是一个不可缺少的存在.作为全球最大的同性交友网站,上面有太多优秀的开源代码库和编程大神,让无数开发者心生向往.那么如何正确的使用 Github,也许是编程学习之必要.来看下 ...
- 你与BAT只差这一套面试题
1.Linux如何挂载windows下的共享目录?mount.cifs //IP地址/server /mnt/server -o user=administrator,password=123456l ...
- java类和对象之间的差
java类和对象之间的差别是一个普遍的问题,刚开始学习java当它来到与类和对象接触.今天就来总结一下它们之间的差异. 先说说class和object差异.事实上,词:object是全部class的父 ...
- Jquery计算时间戳之间的差值,可返回年,月,日,小时等
/** * 计算时间戳之间的差值 * @param startTime 开始时间戳 * @param endTime 结束时间戳 * @param type 返回指定类型差值(year, month, ...
- 通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小
题目描述: 有两个序列a,b,大小都为n,序列元素的值任意整数,无序:要求:通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小.例如:var a=[100,99,98, ...
- BAT及各大互联网公司2014前端笔试面试题--Html,Css篇
很多面试题是我自己面试BAT亲身经历碰到的.整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习前端基础更是大有裨益. 而更多的题目是我一路以来收集的,也有往年的,答案不确保一定正 ...
- 面试题2:BAT及各大互联网公司2014前端笔试面试题:HTML/CSS篇
BAT及各大互联网公司2014前端笔试面试题:HTML/CSS篇 Html篇: 1.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? IE: trident内核 Firefox:gecko内 ...
- BAT及各大互联网公司2014前端笔试面试题:HTML/CSS篇
BAT及各大互联网公司2014前端笔试面试题:HTML/CSS篇 2014/08/03 · Web前端, 开发 · CSS, HTML, 技术面试 分享到: 188 MongoDB集群之分片技术应用 ...
随机推荐
- 【Detection】R-FCN: Object Detection via Region-based Fully Convolutional Networks论文分析
目录 0. Paper link 1. Overview 2. position-sensitive score maps 2.1 Background 2.2 position-sensitive ...
- nginx的坑-org.apache.http.TruncatedChunkException: Truncated chunk( expected size: 7752; actual size: 4077)
org.apache.http.TruncatedChunkException: Truncated chunk 项目中使用请求远程接口报错 ,项目是Spring-boot的,两个项目(A和B) , ...
- Android -- 网络图片查看器,网络html查看器, 消息机制, 消息队列,线程间通讯
1. 原理图 2. 示例代码 (网络图片查看器) (1) HttpURLConnection (2) SmartImageView (开源框架:https://github.com/loopj/an ...
- UWP C# 调用 C++/CX
创建一个UWP项目 然后创建一个通用C++运行时项目 右键点击C++项目,添加一个C++类 在头文件中定义一个类 #pragma once namespace ImageFactoryRT { pub ...
- 【Python】更优的字符串格式化方式 -- "format"替代"%s"
背景 前段时间看了一篇介绍Python的代码技巧的文章,建议格式化字符串时使用"format"代替使用"%",但是没有说明原因.各博客网站介绍相关用法的博客很多 ...
- maven笔记(1)
maven环境搭建:http://www.cnblogs.com/fnng/archive/2011/12/02/2272610.html 项目管理利器(Maven)——常用的构建命令1. mvn - ...
- RotateCard(自定义旋转view)
使用方法Demo package com.example.displaydemo; import java.util.ArrayList; import com.example.displaydemo ...
- 图 Graph-图的表示及其遍历
2018-03-05 16:19:46 图是计算机科学中的一个非常重要的概念,图是一种多对多的关系.从某种角度上来说树和链表都是图的一种特例. 一.图的抽象数据类型 二.表示图的方法 图是由结点和边构 ...
- linux加域退域
realm list realm leave od.com realm join -U Administrator od.com
- 21.线程池ThreadPoolExecutor实现原理
1. 为什么要使用线程池 在实际使用中,线程是很占用系统资源的,如果对线程管理不善很容易导致系统问题.因此,在大多数并发框架中都会使用线程池来管理线程,使用线程池管理线程主要有如下好处: 降低资源消耗 ...