###前言

打算换个工作,近一个月面试了不少的公司,下面将一些面试经验和思考分享给大家。另外校招也快要开始了,为在校的学生提供一些经验供参考,希望都能找到满意的工作。

刚开始面试的几家公司,就是备受各种打击、就是一顿狂问,结果答上来的问题没几个,开始给自己的信心造成了一定的影响,后来经过调整后,又恢复到了信心满满的状态。一方面是工作经验有限,另一方面是没有进行系统的复习。后者占主要地位。所以如何复习好技术要点是找到好工作的必要前提(但也有很大一部分的运气成分在里面)。对于应届生而言,由于在校能学的技术有限,所以在开始面试完几家公司后,感觉备受打击是很正常的,这时一定不要灰心,要从每次面试中总结自己的不足,把自己不会的知识都弥补上,到后来你就会发现,找工作其实没那么难的,问来问去就那些东西。

我也不具体说哪家公司的面试,那样对公司不好。首先,总结一些最主要的知识点;然后,分析部分知识点;最后,列出能够回忆起来的面试题和笔试题。希望对大家有所帮助。

###重点知识

由于我面试的Java开发工程师,针对于JAVA,需要理解的重点内容有:

  • JVM内存管理机制和垃圾回收机制(基本每次面试都会问,一定要搞得透彻)

  • JVM内存调优(了解是怎么回事,一般做项目过程中使用较多)

  • 设计模式(熟悉常见设计模式的应用场景,会画类图,实在不行背几个也是有用的)

  • 多线程(每次都会问,包括线程和进程、线程状态、线程并发的操作等,需要深入复习)

  • JAVA集合类框架(理解框架图、HashMap、ArrayList、HashSet等的关系和区别,其中HashMap的存储机制几乎每次都有问)

  • JAVA的异常处理机制(异常的分类、常见的异常有哪些、Try catch finally的使用)

  • JVM运行机制(理解JVM是如何运行的)

  • Linux基础(面试笔试中对linux也有一定的要求,建议最好搭建一个linux虚拟机,并练习常用的命令)

###数据结构和算法

常见的排序算法就不说了,需要理解其原理和会写代码,还有时间空间复杂度也要知道

  • 队列、栈:需要理解其存取结构,并能在某些场景下使用

  • 二叉树:树的遍历、树的深度、按层次输出、平衡二叉树、逆序打印树等

  • 链表:逆序、合并两有序的链表、判断链表是否又环、链表倒数第K个元素等

  • 字符串:KMP算法、动态规划(这个是重点,需要好好理解动态规划,常见的题有:求解最长回文子串、求解最长公共子串等)

海量数据处理:现在好多大公司都会问海量数据的处理,所以需要掌握常见的处理方法,比如Bit-map、分而治之、hash映射等,可以百度看看相关的文章,加深理解

###数据库相关(数据库是面试的重点,每家公司都会问)

  • 最基本的数据库CRUD操作要熟悉,能够根据表写出需要的SQL语句

  • 事务、零时表、索引、表锁、行列锁、视图、存储过程等都要深入理解

  • 互联网公司处理的数据量都很大,所以有必要对数据库优化和大数据的处理进行了解和熟悉

  • 建议看看Nosql和Redis等非关系数据库相关的书籍和资料

###开源框架

像SSH等的开源框架在面试过程中问的很少,但是也是有必要了解SSH的运行原理和使用。面试主要考察的是基础,所以更加偏向于考察数据结构、算法、数据库、JAVA基础知识等。所以,如果你时间有限,可以把精力放在基础知识的学习和复习上,如果你时间充裕,可以学习和复习开源框架相关知识。对于开源框架:最好还是看看源码,对自己的好处是很大的。

###个人建议

上面比较详细地列出和分析了最近面试过程中的问题,由于时间长久,不可能全部都回忆起来,但是大体上相差不大。对于面试,个人的一些建议:

(1)心态要放好,不能着急。不要看到被人拿到offer,自己没有就抱有心里压力,其实工作谁都可以找到,就看满意不满意,所以着急也是没有用。

(2)身体很重要。不要熬通宵复习、学习,把身体搞垮了得不偿失。保持良好的睡眠。

(3)善于总结面试中的问题。每一次笔试、面试完后,需要进行总结,将自己不会的知识点一定要搞清楚,如果不搞清楚,下次还有可能会问的。其实找工作的过程就是积累知识的过 程,所以善于总结很重要。

(4)不要盲目投递简历。不要看见大公司就投递,也不要投递自己不想去的城市,那样就是在瞎折腾,公司就算要你了,你也不去,还不如把时间放在自己想去的地方呢。

(5)复习需要持续。由于记忆过后会遗忘,所以复习过程中,需要反复进行,一边理解一边记忆,达到闭上眼就能看见知识的体系结构。

###主要详细知识点
####常用算法考察

  • 冒泡排序

  • 快速排序

  • 插入排序

  • 希尔排序

  • 归并排序

  • 堆排序

  • 桶排序

  • 动态规划

  • 最长公共子串

  • 最长回文子串

  • 数组的最大k个值

  • 数字的最大连续子数组之和

  • 左旋转字符串

  • 字符串匹配算法:KMP算法

  • 二分查找

####链表

  • 单链表逆序

  • 两个有序单链表合并

  • 两个单链表是否相交

  • 相交处的节点

  • 单链表倒数第K个数

  • 单链表排序

####栈和队列

  • 设计包含min函数的栈

  • 两个队列实现栈

  • 两个栈实现队列

  • 一个数组实现栈和队列

####树

  • 前序、中序、后续遍历

  • 求二叉树的深度

  • 按层次遍历二叉树

  • 判断二叉树是否为完全二叉树

  • 判断二叉树是否镜面对称

  • 判断两颗树是否相等

  • 卡特兰数

  • 出栈顺序

  • n个节点构成的二叉树个数

  • 括号化

  • 凸多边形三角划分

####设计模式

  • Java源码中有哪些设计模式

http://www.iteye.com/news/18725

  • 常见的设计模式类图

http://blog.sina.com.cn/s/blog_8cc6ff5c0101d4cp.html

  • 常见的设计模式的示例:

http://www.jb51.net/article/27973.htm

####数据库

  • 数据库的crud语句的书写

  • 数据库优化策略、如何优化

  • 海量数据优化

  • 事务

  • 事务中锁分类

  • 事务特性

  • 数据库表锁

  • 行列锁

  • 临时表

  • 索引

  • 存储空间

  • 视图

####Linux常用命令(最好实战)

http://www.php100.com/html/webkaifa/Linux/2009/1106/3485.html

####linux上搭建服务器

http://www.cnblogs.com/dudu/archive/2012/12/09/linux-apache-git.html

####常用的网络端口

http://www.360doc.com/content/11/1202/09/8209768_169068538.shtml

####Nosql、redis等的熟悉、了解

http://www.yiibai.com/redis/redis_quick_guide.html

####海量数据的处理

Bit-map、分而治之、hash映射、分布式处理(Hadoop)、Trie树、双层桶排序等

####Java基础

  • HashMap的存储机制(很重要,必看)

  • Set、map区别

  • Set、list区别

  • Arraylist、LinkedList区别

  • String、Stringbufer、StringBuilder区别

  • HashSet、LinkedHashSet区别

  • HashMap、TreeMap、LinkedHashMap

  • 熟悉Java集合类的框架图

  • HashMap、ArrayList、StringBuffer、String等源码的熟悉

  • 线程和进程

  • 线程的特性

  • 线程的状态

  • 多线程并发的实现

  • 线程的创建方式

  • 线程池的使用

  • Java作用域

  • final、static、native、等特殊关键字的使用

  • Java按值传递的过程

  • 重构和重载

  • 抽象类和接口

  • 内部类的使用:匿名内部类、静态内部类等

  • Java多线程并发、生产者消费者的实现

  • Java连接数据库的过程

####JVM内存管理和存储机制

http://blog.csdn.net/lengyuhong/article/details/5953544

####JVM垃圾回收机制,垃圾回收算法

http://jbutton.iteye.com/blog/1569746

####JVM加载类过程

http://www.cnblogs.com/sunada2005/p/3577799.html

####JVM内存调优

http://www.cnblogs.com/jackyrong/archive/2010/01/21/1653163.html

http://blog.csdn.net/cutesource/article/details/5907418

####框架相关

  • 对框架的熟悉:SSH (面试过程中问的很少,像jsp、servlet基本不问)

  • spring框架组成、AOP、IOC 、用到的设计模式

  • hibernate运行机制、缓存的使用、最好看看源码

  • 熟悉和了解JavaScript和jQuery

####java中IO、NIO

Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。 Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。

IO流包括字节流和字符流:

  • 字节流:对应抽象类为InputStream(输入流)和 OutputStream(输出流)。 FileInputStream、FileOutputStream

  • 字符流:对应抽象类为Reader(输入流)和Writer(输出流)。BufferedReader、InputStreamReader、 StringReader

####java中异常的分类及结构

Java中的异常类,包括内置的异常类以及自定义的异常类,都直接或者间接地继承至java.lang.Throwable类。在java.lang包中,Throwable类有两个直接子类:Error类和Exception类,Error类及其子类描述了java运行时系统的内部错误和资源耗尽错误。出现这样的错误的,除了通知用户,并接尽力使程序安全地终止之外,没有更好的办法。Exception类的层次结构又分为两个分支:一个分支由RuntimeException派生,另外一个分支包含除RuntimeException类之外的异常类。

运行时异常、非运行时异常

  • 运行时异常:RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException、classCastException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

  • 非运行时异常:RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,不处理程序不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常。

####动态代理机制

动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实。代理一般会实现它所表示的实际对象的接口。代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统的实际功能,代理对象对客户隐藏了实际对象。客户不知道它是与代理打交道还是与实际对象打交道。动态代理主要包含以下角色:动态代理类(以下简称为代理类)是一个实现在创建类时在运行时指定的接口列表的类,该类具有下面描述的行为。代理接口 是代理类实现的一个接口。代理实例 是代理类的一个实例。每个代理实例都有一个关联的调用处理程序 对象,它可以实现接口 InvocationHandler。通过其中一个代理接口的代理实例上的方法调用将被指派到实例的调用处理程序的 Invoke 方法,并传递代理实例、识别调用方法的java.lang.reflect.Method 对象以及包含参数的 Object 类型的数组。调用处理程序以适当的方式处理编码的方法调用,并且它返回的结果将作为代理实例上方法调用的结果返回。

try catch finally的使用

  1. finally 里 始终会被执行到, System.exit(0); 除这种被执行外。

  2. 即使try中有return ,也是先执行 return 后面的语句完了之后,不立马return,而是去执行finally中的语句。

  3. 当try中与finally里,同时出现return , 则只会返回 finally 中的return 结果。

  4. finally中的值不能影响try中 即将返回的结果值。
    注意: 若finally中没有return在try或catch中有return,那么在执行return跟着语句之后,会把语句的结果新开辟一内存空间,直接把结果的存放此内存空间中。所以,finally中的值不能影响try或catch中即将return的结果。

####静态成员、非静态成员

(1)类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。

(2)在一个类的静态成员中去访问其非静态成员之所以会出错是因为在类的非静态成员不存在的时候类的静态成员就已经存在了,访问一个内存中不存在的东西当然会出错

####抽象类遵循的原则

(1)abstract关键字只能修饰类和方法,不能修饰字段。

(2)抽象类不能被实例化(无法使用new关键字创建对象实例),只能被继承。

(3)抽象类可以包含属性,方法,构造方法,初始化块,内部类,枚举类,和普通类一样,普通方法一定要实现,变量可以初始化、不初始化但不能初始化后在抽象类中重新赋值或操作该变量(只能在子类中改变该变量)。

(4)抽象类中的抽象方法(加了abstract关键字的方法)不能实现。

(5)含有抽象方法的类必须定义成抽象类。

####扩展:抽象类和接口的区别:

(1)接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。

(2)abstractclass 在Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface,实现多重继承。接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。

(3)在abstractclass 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法默认都是 public abstract 类型的。

(4)abstractclass和interface所反映出的设计理念不同。其实abstractclass表示的是"is-a"关系,interface表示的是"has-a"关系。

(5)实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。抽象类中可以有非抽象方法。接口中则不能有实现方法。

(6)接口中定义的变量默认是publicstatic final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。抽象类中的变量默认是friendly 型,其值可以在子类中重新定义,也可以在子类中重新赋值

转自: http://blog.csdn.net/pistolove/article/details/46753275

特别完善的面试知识总结相关推荐

  1. ❤『面试知识集锦100篇』1.面试技巧篇丨HR的小心思,你真的懂吗?

    作者:不吃西红柿 简介:CSDN博客专家.蓝桥签约作者.大数据&Python领域优质创作者. 目录 一.企业考察要点 技巧一:了解自己的专业技能与 JD 中的匹配点 技巧二.把控好企业「味道」 ...

  2. 安卓高级面试知识整理

                                                    安卓高级面试知识整理 Android 四大组件:这是一份全面 & 详细的Activity学习指南 ...

  3. *Java软件开发面试知识整理*

    Java软件开发面试知识整理 围绕以下几点回答问题:是什么.为什么.什么时候用.项目实现.解决什么问题.遇到的困难 谈谈你对Java和C的理解? Java: 面向对象.Unicode:可以跨平台(JV ...

  4. iOS开发面试知识整理 – OC基础 (二)

    iOS | 面试知识整理 – OC基础 (二) 1.C和 OC 如何混编 xcode可以识别一下几种扩展名文件: .m文件,可以编写 OC语言 和 C 语言代码 .cpp: 只能识别C++ 或者C语言 ...

  5. C语言 C++基础面试知识大集合

    C语言 / C++基础面试知识大集合 const 作用 修饰变量,说明该变量不可以被改变: 修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const p ...

  6. C C++ 面试知识总结,包含STL,数据结构等

    五万字长文 C C++ 面试知识总结(上) https://juejin.im/post/5cbd7603e51d456e2446fcaf 五万字长文 C C++ 面试知识总结(中) https:// ...

  7. 【持续..】WEB前端面试知识梳理 - CSS部分

    传送门: WEB前端面试知识梳理 - CSS部分 WEB前端面试知识梳理 - JS部分 最近在看大厂的一些面试题,发现很多问题都是平时没有在意的,很多知识都是知道一点但又很模糊说不出个所以然来,反思自 ...

  8. Hadoop之Yarn面试知识复习

    Hadoop之Yarn面试知识复习 目录 简述hadoop1与hadoop2 的架构异同 为什么会产生 yarn,它解决了什么问题,有什么优势? Hadoop之Yarn工作机制详解 HDFS的数据压缩 ...

  9. Hadoop之MapReduce面试知识复习

    Hadoop之MapReduce面试知识复习 目录 谈谈Hadoop序列化和反序列化及自定义bean对象实现序列化? FileInputFormat切片机制 在一个运行的Hadoop 任务中,什么是I ...

最新文章

  1. 大话IT职场之工作和生活的平衡
  2. visual studio 多行编辑 列编辑
  3. UA MATH567 高维统计专题1 稀疏信号及其恢复1 L0-norm minimization
  4. 网络安全公司奇安信集团是如何基于 Flink 构建 CEP 引擎实时检测网络攻击【未来不可忽视的网络安全】
  5. 常用的开始→运行→输入命令集锦
  6. 【假期福利】用尺子丈量宇宙:古人竟是这样理解我们的地球
  7. Android长时间后台运行Service
  8. idea自动下载gradle_如何在IDEA中下载Gradle项目的依赖源?
  9. mysql安装位置_MySQL 5.7安装图文教程
  10. Python3安装Crypto模块
  11. NFT平台Chair.finance获得Polygon Grant及生态支持
  12. 华为云,奔跑的感觉爽吗?
  13. 以人工智能和大数据为核心的第四次工业革命已经悄然而至
  14. Win10无法访问网上邻居共享设备及共享文件夹错误代码(0x80004005)
  15. 二级域名配置以及nginx解析二级域名到html页面
  16. 【毫米波雷达】理解IQ信号调制与解调
  17. springboot文献综述
  18. cad如何批量转换成pdf?
  19. 百度百科创建词条参考资料问题汇总
  20. 如何避免程序媛被叫做“程序员鼓励师”?

热门文章

  1. c++新特性11 (9)智能指针一”_Compressed_pair类“
  2. 排序 (4)插入排序
  3. 近世代数--内外直积--本质是一样的
  4. 近世代数--内直积--内直积是什么?充要条件?
  5. 2021中青杯数学建模A题 汽车组装车间流水线物料配送问题
  6. optee3.12.0 qemu_v8的环境搭建篇(ubuntu20.04)
  7. travis-ci中的checkpatch工具使用
  8. 2020-11-25(多级页表的补充)
  9. 2020-11-19(栈帧)
  10. 【网络安全】Metasploit 生成的 Shellcode 的导入函数解析以及执行流程分析(1)