河源
设为首页
加入收藏
暑假工
首 页 灯饰照明 五金机械 电子电器 商务金融 服装制衣 校园招聘 HR管理 职业指导
现场招聘会
搜索指示图片
当前位置: >> 职业指导 >> >> 正文
程序员最全面试通关秘籍
时间: 2018/7/18 11:19:35     来源: 互联网     编辑: 博天人才网     点击:13199
[字号: ]

一、基础篇

 

    1.1 java基础

        1.面向对象的特征:抽象、继承、封装和多态。

            抽象:抽象是将一系列对象的共同特征总结出来构造类的过程,包括数据抽象(对象的属性)和行为抽象(对象的方法)两方面。

            继承:继承出现在父类和子类之间,子类对象通过extends关键字继承父类的属性和方法,子类和父类是is-a的关系。子类可以通过继承实现对父类方法的重写。

            封装:封装是把数据和数据的方法绑定起来,将实现细节包装隐藏起来。

            多态:多态是指允许不同子对象对同一消息作出不同的响应。多态的实现可以是重载和重写,也可以是相同父类对象指向不同的子类类型

 

        2.final、finally和finalize的区别。

            final:是Java中的关键字,可以用来修饰类、属性和方法。修饰类:该类不能被继承。修饰属性:该属性不能被改变或者仅可被赋值一次,即为常量。修饰方法:该方法不能被重写。

            finally:使用在try-catch语句块后总是执行的代码块,无论正常执行或者是发生异常,只要jvm不关闭总会执行。通常会把释放外部资源的代码写在finally里。

            finalize:Object类定义中的方法,使用finalize()方法在GC将对象从内存中清除出去之前做必要的清理工作。这个方法在垃圾收集器销毁对象时调用的,通过重写finalize方法可以治理系统资源或者执行其它清理工作。

 

        3.Exception、Error、运行时异常与一般异常有何异同。

              Exception和Error都是继承于throwable,runtimeException继承于Exception

            Exception:表示程序可处理的异常,通常需要我们去捕获让程序进行处理。是一种设计或者实现的问题。如果程序正常的话不会出现。

            Error:表示系统级错误和程序不必处理的异常,通常和虚拟机相关,如内存溢出等。

            运行时异常:运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题通常就不会发生。

            受检异常:跟程序运行的上下文环境有关,即使程序设计无误,仍然可能因使用的问题而引发。Java编译器要求方法必须声明抛出可能发生的受检异常,但是并不要求必须声明抛出未被捕获的运行时异常。

 

        4.请写出5种常见的runtime exception。

            1.ArithmeticException 算数异常

            2.ClassCaseException 类型转换异常

            3.IllegalArgumentsException 非法参数异常

            4.IndexOutOfBoundsException   数组下标越界异常

            5.NullPointerException 空指针异常

            6.SecurityException 安全异常

 

       5.int和integer的区别,integer的缓存范围

            int是基本数据类型,Integer是int的包装类。

            int直接存储数值,Integer是对象的引用,指向new出来的Integer对象。

            int默认值为0,Integer默认值为null。

            integer缓存范围为-128~127

 

        6.包装类,装箱和拆箱。

            为了将基本的数据类型当成对象来操作,引入了包装类。八种基本数据类型都有自己的包装类。

 


           自动装箱:指Java将原始的数据类型自动转换为与之相对应的对象,如int转换为Integer。

           自动拆箱:指将数值对象转换为基本的数据类型,如Integer转换为int型。


  


        7.String、StringBuffer和StringBuilder

            String 和StringBuilder/StringBuffer都可以存储和操作字符串。

            String被final修饰,字符串对象是不可变的。StringBuffer和StringBuilder表示字符串对象可以直接进行修改,所以在执行字符串增删操作的时候效率比较高,因为不需要创建新的字符串对象。StringBuilder和StringBuffer的区别在于StringBuffer被Synchronize修饰,是线程安全的,但效率较StringBuilder更低。

 

 

       8.重载(Overload)和重写(Override)的区别。

            方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。

            重载:发生在同一个类中,是拥有相同方法名但参数列表不同(数量或类型或者两者都不同)。

            重写:发生在父类和子类之间,子类方法覆盖父类方法,要求子类方法与父类方法有相同的返回值类型,访问修饰符不能小于父类,不能比父类有更多的异常。

 

        9.抽象类(abstract class)和接口(interface)有什么区别。

            抽象类与接口都是使用abstract修饰,都不能实例化。

            抽象类可以作为一个类的父类,通过extends关键字实现,仅能单继承;接口使用implements关键字实现接口,可以多实现。

            抽象类可以有不同的访问修饰符,如public private protectd 和默认;接口默认用public。

            抽象类中可以有构造器;接口中不能有构造器。

 

        10.说说反射的用途及实现

            反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。

 

        11.说说自定义注解的场景及实现

           

        12.HTTP请求的GET和POST方式的区别

            1.数据传输方式:GET方式通过url传输数据;POST方式,数据放置在HTML HEADER内提交。

            2.传输数据大小:GET方式传输数据通常会受到URL长度限制;POST方式不是通过URL传值,理论上长度不受限制,但实际中可以在服务器中做出限制。

            3.安全性:GET方式可能会暴露一些敏感数据,POST方式不会

 

        13.Session和Cookie区别

            Session是服务器端保存的一个数据结构,用来追踪用户状态,这个数据可以保存在集群、数据库和文件中;

            Cookie可以说是一种Session,它是客户端保存用户信息的一种机制,它可以保存在本地文件中或者是浏览器的缓存中。

 

        14.列出自己常用的JDK包

            java.lang;java.util;java.sql;java.math;java.io;

 

        15.MVC设计思想

            M(model)V(view)C(controller),即把一个应用的输入、数据处理、输出按照模型、展示、控制的方式进行分离,这样一个应用就被分成了模型层,视图层和控制层。

            view层即视图层,用户交互页面。用户通过视图层的操作,把请求发送给服务器,然后服务器根据请求进行想应的操作,并把所请求的数据展示给用户。

            model层即模型层,个人认为可以当成entity、dao和service的集合,是业务流程业务处理和业务规则的制定,通常模型层的操作对其它层是黑箱操作。模型层接受视图请求的数据,经过业务处理,返回处理结果。

            controller层可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做任何的数据处理。

 

        16.equals与==的区别

        17.hashCode和equals方法的区别和联系

        18.什么事Java序列化和反序列化,如何实现Java序列化?或者请解释Serializable 接口的作用

        19.Object类只不过常见的方法,为什么wait和notify会放在Object里面?

        20.Java的平台无关性如何体现出来的

        21.JDK和JRE的区别

        22.Java8有哪些新特性

 

    1.2 Java常见集合

        1.List和Set区别

        2.Set和hashCode以及equals方法的联系

        3.List和Map的区别

        4.ArrayList和LinkList的区别

        5.HashMap和HashTable的区别

        6.HashSet和HashMap的区别

        7.HashMap和ConcurrentHashMap 的区别

        8.HashMap的工作原理及代码实现,什么时候用到红黑树

        9.多线程情况下HashMap死循环的问题

        10.HashMap出现Hash DOS攻击的问题

        11.CocurrentHashMap 的工作原理以及代码实现,如何统计所有的元素个数

        12.手写简单的HashMap

        13.看过那些Java集合类的源码

 

    1.3 进程和线程

        1.线程和进程的概念、并发和并发的概念

        2.创建线程的方式及实现

        3.进程间通信的方式

        4.说说CountDownLatch、CyclicBarrier 原理和区别

        5.说说Semaphore原理

        6.说说Exchanger原理

        7.ThreadLocal原理分析,ThreadLocal为什么会出现OOM,出现的深层次原理

        8.讲讲线程池的实现原理

        9.线程池的集中实现方式

        10.线程的生命周期,状态是如何转移的

        可参考:《Java多线程编程核心技术》

 

    1.4 锁机制

        1.说说线程安全问题,什么事线程安全,如何保证线程安全

        2.重入锁的概念,重入锁为什么可以防止死锁

        3.产生死锁的四个条件(互斥、请求与保持、不剥夺、循环等待)

        4.如何检查死锁(通过JConsole检查死锁)

        5.volatile实现原理(禁止指令重排,刷新内存)

        6.Synchronize实现原理(对象监听器)

        7.Synchronize与lock的区别

        8.AQS同步队列

        9.CAS无锁的概念,乐观锁和悲观锁

        10.创建的原子操作类

        11.什么事ABA问题,出现ABA问题JDK是如何解决的

        12.乐观锁的业务场景及实现方式

        13.Java8并发包下常见的并发类

        14.偏向锁、轻量级锁、重量级锁、自旋锁的概念

        可参考《Java多线程编程核心技术》

 

    1.5 JVM

        1.JVM运行时内存区域划分

        2.内存溢出OOM和堆栈溢出SOE的实例及原因、如何排查与解决

        3.如何判断对象是否何以回收或存活

        4.常见的GC回收算法及其含义

        5.常见的JVM性能监控和故障处理工具类(jps、jstat、jmap、jinfo、jconsole等)

        6.JVM如何设置参数

        7.JVM性能调优

        8.类加载器、双亲委派模型、一个类的生命周期、类是如何加载到JVM中的

        9.类加载的过程,加载、验证、准备、解析、初始化

        10、强引用、软引用、弱引用、虚引用

        11、Java内存模型JMM

 

    1.6 设计模式

        1.常见的设计模式

        2.设计模式的六大原则及含义

        3.常见的单例模式以及各种实现方式的优缺点,哪一种最好,手写常见的单例模式

        4.设计模式在实际场景中的应用

        5.Spring中用到了哪些设计模式

        6.Mybatis中用到了哪些设计模式

        7.你项目中用到了哪些设计模式

        8.说说常见开源框架中设计模式使用分析

        动态代理很重要!!!

 

    1.7 数据结构

        1.树(二叉查找树,平衡二叉树,红黑树,B树,B+树)

        2.深度优先算法,广度优先算法

        3.库鲁斯卡尔算法,普林姆算法、迪克拉斯算法

        4.什么是一致性Hash及其原理,Hash环问题

        5.常见的排序算法和查找算法:快速排序、折半查找、堆排序等

 

    1.8 网络/IO基础

        1.BIO、NIO、AIO的概念

        2.什么是长连接和短连接

        3.Http1.0和2.0相比有什么区别

        4.Https的基本概念

        5.三次握手和四次挥手,为什么挥手需要四次

        6.从浏览器中输入URL到页面加载发生了什么?

 

二、数据库

 

    2.1 数据库

        1.Mysql 索引使用的注意事项

        2.DDL、DML、DCL分别指什么

        3.explain命令

        4.left join 、right join,inner join

        5.数据库事务ACID(原子性、一致性、隔离性、持久性)

        6.事物的隔离级别(读未提交,读已提交,可重复读,可序列化读)

        7.脏读、幻读、不可重复读

        8.数据库的几大范式

        9.说说分库和分表设计

        10.分库和分表带来的分布式困境和应对之策(如何解决分布式下的分库分表,全局表)

        11.说说sql优化之道

        12.Mysql遇到的死锁问题,如何排查与解决

        13.存储引擎的InnoDB与MyISAM的区别,优缺点使用场景

        14.索引类别(B+树索引,全文索引,哈希索引)索引的原理

        15.什么是自适应哈希索引(AHI)

        16.为什么要用B+tree作为MySQL索引的数据结构

        17.聚集索引与非聚集索引的区别

        18.遇到过索引失效的情况没?什么时候可能会出现,如何解决

        19.limit20000加载很慢怎么解决

        20.如何选择合适的数据存储方案

        21.如何选择合适的分布式主键方案

        22.常见的几种分布式ID的设计方案

        23.常见的数据库优化方案,在你的项目中数据库是如何进行优化的

 

    2.2 Redis

        1.Redis有哪些数据类型

        2.Redis内部结构

        3.Redis使用场景

        4.Redis持久化机制

        5.Redis集群方案与实现

        6.Redis为什么是单线程的?

        7.缓存雪崩、缓存穿透、缓存预热。、缓存更新、缓存降级

        8.使用缓存的合理性问题

        9.Redis常见的挥手策略

 

    2.3 消息队列

        1.消息队列的使用场景

        2.消息的重发不唱解决思路

        3.消息的迷瞪性解决思路

        4.消息的堆积解决思路

        5.自己如何实现消息队列

        6.如何保证消息的有序性

我有话说 现在有0人对本文发表评论
暂无评论!
用户名:    验证码:   
请在这里发表您的看法,发言时请遵法守纪注意文明
关于我们 | 求职帮助 | 招聘指南 | 人才派遣 | 联络我们 | 诚聘英才 | 友情链接 | 图站地图
全国客服电话: 0760-22236300 / 0760-22553303 业务电话:0760-22180333 总部地址:中山市小榄镇升平东路1号1310房第2卡
法律顾问:广东香山律师事务所 刘叠律师  中文网址:博天   求职 招聘 博天人才网
增值电信业务经营许可证:粤B2-20110123号 粤ICP备05055544号