JAVA面试问题及答案(上)
2016-08-30 16:25
411 查看
1. 面向对象和面向过程的区别
面向过程优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展
面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低
2. Java的四个基本特性(抽象、封装、继承,多态)
抽象:就是把现实生活中的某一类东西提取出来,用程序代码表示,我们通常叫做类或者接口。抽象包括两个方面:一个是数据抽象,一个是过程抽象。数据抽象也就是对象的属性。过程抽象是对象的行为特征。 封装:把类中的数据和操作封装起来,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行封装隐藏。封装分为属性的封装和方法的封装。
继承:父类的意义在于抽取多类事物的共性。子类继承父类可以增强代码复用。
多态:允许不同类的对象对同一函数做出响应。方法的重载、类的覆盖正体现了多态。
3. 重载和重写的区别
重载:发生在同一个类中,方法名必须相同,参数类型不同、个数不同,方法返回值和访问修饰符可以不同,发生在编译时。重写:发生在父子类中,方法名、参数列表必须相同,返回值等于父类,抛出的异常小于等于父类,访问修饰符更易访问;如果父类方法访问修饰符为private则子类中就不是重写。
4. 构造器Constructor是否可被override
构造器不能被继承,所以不能被重写。
5. 访问控制符public,protected,private,以及默认的区别
private只有在本类中才能访问; public在任何地方都能访问;
protected在同包内的类及包外的子类能访问;
默认不写在同包内能访问。
6. 是否可以继承String类
String类是final类故不可以继承,一切由final修饰过的都不能继承
7. String和StringBuffer、StringBuilder的区别
http://blog.csdn.net/ls5718/article/details/51899027可变性:
String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。
StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[] value,这两种对象都是可变的。
线程安全性:
String中的对象是不可变的,也就可以理解为常量,线程安全。
AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。
性能:
每次对String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象。StringBuffer每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用 StirngBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。
8. hashCode和equals方法的关系
http://blog.csdn.net/ls5718/article/details/51314888equals相等,hashcode必相等;hashcode相等,equals可能不相等。
9. 抽象类和接口的区别
http://www.cnblogs.com/dolphin0520/p/3811437.html语法层次:
抽象类和接口分别给出了不同的语法定义
设计层次:
抽象层次不同,抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
跨域不同,抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在”is-a” 关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的,仅仅是实现了接口定义的契约而已,”like-a”的关系。。
设计层次不同,抽象类是自底向上抽象而来的,接口是自顶向下设计出来的。
10. 自动装箱与拆箱
装箱:将基本类型用它们对应的引用类型包装起来;拆箱:将包装类型转换为基本数据类型;
Java使用自动装箱和拆箱机制,节省了常用数值的内存开销和创建对象的开销,提高了效率,由编译器来完成,编译器会在编译期根据语法决定是否进行装箱和拆箱动作。
11. 什么是泛型、为什么要使用以及泛型擦除
泛型,即“参数化类型”。 创建集合时就指定集合元素的类型,该集合只能保存其指定类型的元素,避免使用强制类型转换。
Java编译器生成的字节码是不包涵泛型信息的,泛型类型信息将在编译处理是被擦除,这个过程即类型擦除。 泛型擦除可以简单的理解为将泛型java代码转换为普通java代码,只不过编译器更直接点,将泛型java代码直接转换成普通java字节码。
类型擦除的主要过程如下:
将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。
移除所有的类型参数。
12. Java中的集合类及关系图
http://blog.csdn.net/ls5718/article/details/51099463List和Set继承自Collection接口。
Set无序不允许元素重复。HashSet和TreeSet是两个主要的实现类。
List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。
Map也属于集合系统,但和Collection接口没关系。Map是key对value的映射集合,其中key列就是一个集合。key不能重复,但是value可以重复。 HashMap、TreeMap和Hashtable是三个主要的实现类。
SortedSet和SortedMap接口对元素按指定规则排序,SortedMap是对key列进行排序。
13. HashMap实现原理
具体原理一句两句也说不清楚,网络文章:http://zhangshixi.iteye.com/blog/672697
http://www.admin10000.com/document/3322.html
14. HashTable实现原理
具体原理一句两句也说不清楚,网络文章: http://www.cnblogs.com/skywang12345/p/3310887.html
http://blog.csdn.net/chdjj/article/details/38581035
15. HashMap和HashTable区别
HashTable的方法前面都有synchronized来同步,是线程安全的;HashMap未经同步,是非线程安全的。HashTable不允许null值(key和value都不可以) ;HashMap允许null值(key和value都可以)。
HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。
HashTable使用Enumeration进行遍历;HashMap使用Iterator进行遍历。
HashTable中hash数组默认大小是11,增加的方式是 old*2+1;HashMap中hash数组的默认大小是16,而且一定是2的指数。
哈希值的使用不同,HashTable直接使用对象的hashCode; HashMap重新计算hash值,而且用与代替求模。
16. ArrayList和vector区别
ArrayList和 Vector都实现了List接口, 都是通过数组实现的。Vector是线程安全的,而ArrayList是非线程安全的。
List第一次创建的时候,会有一个初始大小,随着不断向List中增加元素,当 List 认为容量不够的时候就会进行扩容。Vector缺省情况下自动增长原来一倍的数组长度,ArrayList增长原来的50%。
17. ArrayList和LinkedList区别及使用场景
ArrayList底层是用数组实现的,可以认为ArrayList是一个可改变大小的数组。随着越来越多的元素被添加到ArrayList中,其规模是动态增加的。LinkedList底层是通过双向链表实现的, LinkedList和ArrayList相比,增删的速度较快。但是查询和修改值的速度较慢。同时,LinkedList还实现了Queue接口,所以他还提供了offer(), peek(), poll()等方法。
LinkedList更适合从中间插入或者删除(链表的特性)。 ArrayList更适合检索和在末尾插入或删除(数组的特性)。
18. Collection和Collections的区别
java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
19. Concurrenthashmap实现原理
具体原理一句两句也说不清楚,网络文章: http://www.cnblogs.com/ITtangtang/p/3948786.html
http://ifeve.com/concurrenthashmap/
20. Error、Exception区别
Error类和Exception类的父类都是throwable类,他们的区别是:Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。
21.Unchecked Exception和Checked Exception,各列举几个
http://blog.csdn.net/ls5718/article/details/52389015Unchecked Exception:
指的是程序的瑕疵或逻辑错误,并且在运行时无法恢复。
包括Error与RuntimeException及其子类,如:OutOfMemoryError, UndeclaredThrowableException,IllegalArgumentException,IllegalMonitorStateException, NullPointerException, IllegalStateException, IndexOutOfBoundsException等。
语法上不需要声明抛出异常。
Checked Exception:
代表程序不能直接控制的无效外界情况(如用户输入,数据库问题,网络异常,文件丢失等)
除了Error和RuntimeException及其子类之外,如:ClassNotFoundException, NamingException, ServletException, SQLException, IOException等。
需要try catch处理或throws声明抛出异常。
22. Java中如何实现代理机制(JDK、CGLIB)
http://blog.csdn.net/yakoo5/article/details/9099133/http://blog.csdn.net/mhmyqn/article/details/48474815
JDK动态代理:代理类和目标类实现了共同的接口,用到InvocationHandler接口。
CGLIB动态代理:代理类是目标类的子类, 用到MethodInterceptor接口
23. 多线程的实现方式
继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。24. 线程的状态转换
http://blog.csdn.net/ls5718/article/details/51553698一张图让你看懂JAVA线程间的状态转换
25. 如何停止一个线程
这个问题简单总结不一定说的清,看一篇网络文章:http://www.cnblogs.com/greta/p/5624839.html
26. 什么是线程安全
线程安全就是多线程访问同一代码,不会产生不确定的结果。27. 如何保证线程安全
对非安全的代码进行加锁控制;使用线程安全的类;
多线程并发情况下,线程共享的变量改为方法级的局部变量。
28. Synchronized如何使用
synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;
修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。
29. synchronized和Lock的区别
http://blog.csdn.net/ls5718/article/details/52396652主要相同点:Lock能完成synchronized所实现的所有功能
主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。Lock的锁定是通过代码实现的,而synchronized是在JVM层面上实现的,synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。Lock还有更强大的功能,例如,它的tryLock方法可以非阻塞方式去拿锁。Lock锁的范围有局限性,块范围,而synchronized可以锁住块、对象、类。
30. 多线程如何进行信息交互
http://blog.csdn.net/ls5718/article/details/51878770void notify() 唤醒在此对象监视器上等待的单个线程。
void notifyAll() 唤醒在此对象监视器上等待的所有线程。
void wait() 导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法。
void wait(long timeout) 导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法,或者超过指定的时间量。
void wait(long timeout, int nanos) 导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。
31. sleep和wait的区别(考察的方向是是否会释放锁)
sleep()方法是Thread类中方法,而wait()方法是Object类中的方法。 sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态,在调用sleep()方法的过程中,线程不会释放对象锁。而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备
32. 多线程与死锁
http://blog.csdn.net/ls5718/article/details/5189615933. 如何才能产生死锁
产生死锁的四个必要条件:互斥条件:所谓互斥就是进程在某一时间内独占资源。
请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。
循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
34. 死锁的预防
打破产生死锁的四个必要条件中的一个或几个,保证系统不会进入死锁状态。打破循环等待条件,实行资源有序分配策略。采用这种策略,即把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路。所有进程对资源的请求必须严格按资源序号递增的顺序提出。进程占用了小号资源,才能申请大号资源,就不会产生环路,从而预防了死锁。
打破互斥条件。即允许进程同时访问某些资源。但是,有的资源是不允许被同时访问的,像打印机等等,这是由资源本身的属性所决定的。所以,这种办法并无实用价值。
打破占有且申请条件。可以实行资源预先分配策略。即进程在运行前一次性地向系统申请它所需要的全部资源。如果某个进程所需的全部资源得不到满足,则不分配任何资源,此进程暂不运行。只有当系统能够满足当前进程的全部资源需求时,才一次性地将所申请的资源全部分配给该进程。由于运行的进程已占有了它所需的全部资源,所以不会发生占有资源又申请资源的现象,因此不会发生死锁。
35. 什么叫守护线程,用什么方法实现守护线程
守护线程是为其他线程的运行提供服务的线程。 setDaemon(boolean on)方法可以方便的设置线程的Daemon模式,true为守护模式,false为用户模式。
36. Java线程池技术及原理
http://blog.csdn.net/ls5718/article/details/52397485
37. java并发包concurrent及常用的类
http://blog.csdn.net/ls5718/article/details/5178586438. volatile关键字
http://blog.csdn.net/ls5718/article/details/51788326
39. Java中的NIO,BIO,AIO分别是什么
BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。NIO:同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
AIO:异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理.AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。
40. IO和NIO区别
IO是面向流的,NIO是面向缓冲区的。IO的各种流是阻塞的,NIO是非阻塞模式。
Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。
41. 序列化与反序列化
把对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为对象的过程称为对象的反序列化。
对象的序列化主要有两种用途:
把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
在网络上传送对象的字节序列。
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。
42. 常见的序列化协议有哪些
xml、json、Protobuf, Thrift, Hessian, Kryo43. 内存溢出和内存泄漏的区别
内存溢出是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory。内存泄漏是指分配出去的内存不再使用,但是无法回收。
44. Java内存模型及各个区域的OOM,如何重现OOM
http://blog.csdn.net/ls5718/article/details/5241121145. 出现OOM如何解决
可通过命令定期抓取heap dump或者启动参数OOM时自动抓取heap dump文件。通过对比多个heap dump,以及heap dump的内容,分析代码找出内存占用最多的地方。
分析占用的内存对象,是否是因为错误导致的内存未及时释放,或者数据过多导致的内存溢出。
46. 用什么工具可以查出内存泄漏
Memory Analyzer-是一款开源的JAVA内存分析软件,查找内存泄漏,能容易找到大块内存并验证谁在一直占用它,它是基于Eclipse RCP(Rich Client Platform),可以下载RCP的独立版本或者Eclipse的插件。JProbe-分析Java的内存泄漏。
JProfiler-一个全功能的Java剖析工具,专用于分析J2SE和J2EE应用程序。它把CPU、执行绪和内存的剖析组合在一个强大的应用中,GUI可以找到效能瓶颈、抓出内存泄漏、并解决执行绪的问题。
JRockit-用来诊断Java内存泄漏并指出根本原因,专门针对Intel平台并得到优化,能在Intel硬件上获得最高的性能。
YourKit .NET & Java Profiling业界领先的Java和.NET程序性能分析工具。
AutomatedQA -AutomatedQA的获奖产品performance profiling和memory debugging工具集的下一代替换产品,支持Microsoft, Borland, Intel, Compaq 和 GNU编译器。可以为.NET和Windows程序生成全面细致的报告,从而帮助您轻松隔离并排除代码中含有的性能问题和内存/资源泄露问题。支持.Net 1.0,1.1,2.0,3.0和Windows 32/64位应用程序。
Compuware DevPartner Java Edition-包含Java内存检测,代码覆盖率测试,代码性能测试,线程死锁,分布式应用等几大功能模块
47. Java内存管理及回收算法
http://blog.csdn.net/ls5718/article/details/51777322
48. Java类加载器及如何加载类(双亲委派)
阅读文章:https://www.ibm.com/developerworks/cn/java/j-lo-classloader/(推荐) 或http://blog.csdn.net/zhoudaxia/article/details/35824249
49. xml解析方式
http://blog.csdn.net/ls5718/article/details/51834656
50. Statement和PreparedStatement之间的区别
http://blog.csdn.net/ls5718/article/details/5212314051.servlet生命周期及各个方法
http://blog.csdn.net/ls5718/article/details/51620649
52.servlet中如何自定义filter
参考文章http://www.cnblogs.com/javawebsoa/archive/2013/07/31/3228858.html
53.JSP原理
参考文章http://blog.csdn.net/hanxuemin12345/article/details/23831645
54.JSP和Servlet的区别
(1)JSP经编译后就变成了“类servlet”。
(2)JSP由HTML代码和JSP标签构成,更擅长页面显示;Servlet更擅长流程控制。
(3)JSP中嵌入JAVA代码,而Servlet中嵌入HTML代码。
55.JSP的动态include和静态include
http://blog.csdn.net/ls5718/article/details/51553919
(1)动态include用jsp:include动作实现,如<jsp:include page="abc.jsp" flush="true" />,它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。会先解析所要包含的页面,解析后和主页面合并一起显示,即先编译后包含。
(2)静态include用include伪码实现,不会检查所含文件的变化,适用于包含静态页面,如<%@ include file="qq.htm" %>,不会提前解析所要包含的页面,先把要显示的页面包含进来,然后统一编译,即先包含后编译。
56.Struts中请求处理过程
http://blog.csdn.net/ls5718/article/details/51606827
57.MVC概念
参考文章http://www.cnblogs.com/scwyh/articles/1436802.html
58.Spring mvc与Struts区别
http://blog.csdn.net/ls5718/article/details/52274135
59.Hibernate/Ibatis两者的区别
参考文章http://blog.csdn.net/firejuly/article/details/8190229
60.Hibernate一级和二级缓存
http://blog.csdn.net/ls5718/article/details/52183086
61.简述Hibernate常见优化策略
参考文章http://blog.csdn.net/shimiso/article/details/8819114
62.Spring bean的加载过程(推荐看Spring的源码)
参考文章http://geeekr.com/read-spring-source-1-how-to-load-bean/
63.Spring bean的实例化(推荐看Spring的源码)
参考文章http://geeekr.com/read-spring-source-two-beans-initialization/
64.Spring如何实现AOP和IOC(推荐看Spring的源码)
http://blog.csdn.net/ls5718/article/details/51668730
http://blog.csdn.net/ls5718/article/details/51791758
65.Spring bean注入方式
参考文章http://blessht.iteye.com/blog/1162131
66.Spring的事务管理
这个主题的参考文章没找到特别好的,http://blog.csdn.net/trigl/article/details/50968079
67.Spring事务的传播特性
参考文章http://blog.csdn.net/lfsf802/article/details/9417095
68.springmvc原理
参考文章http://blog.sina.com.cn/s/blog_7ef0a3fb0101po57.html
69.springmvc用过哪些注解
参考文章http://aijuans.iteye.com/blog/2160141
70.Restful有几种请求
参考文章,http://www.infoq.com/cn/articles/designing-restful-http-apps-roth
71.Restful好处
(1)客户-服务器:客户-服务器约束背后的原则是分离关注点。通过分离用户接口和数据存储这两个关注点,改善了用户接口跨多个平台的可移植性;同时通过简化服务器组件,改善了系统的可伸缩性。
(2)无状态:通信在本质上是无状态的,改善了可见性、可靠性、可伸缩性.
(3)缓存:改善了网络效率减少一系列交互的平均延迟时间,来提高效率、可伸缩性和用户可觉察的性能。
(4)统一接口:REST架构风格区别于其他基于网络的架构风格的核心特征是,它强调组件之间要有一个统一的接口。
72.Tomcat,Apache,JBoss的区别
Apache:HTTP服务器(WEB服务器),类似IIS,可以用于建立虚拟站点,编译处理静态页面,可以支持SSL技术,支持多个虚拟主机等功能。
Tomcat:Servlet容器,用于解析jsp,Servlet的Servlet容器,是高效,轻量级的容器。缺点是不支持EJB,只能用于java应用。
Jboss:应用服务器,运行EJB的J2EE应用服务器,遵循J2EE规范,能够提供更多平台的支持和更多集成功能,如数据库连接,JCA等,其对Servlet的支持是通过集成其他Servlet容器来实现的,如tomcat和jetty。
73.memcached和redis的区别
(1)性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。
(2)内存使用效率对比:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。
(3)Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。
74.如何理解分布式锁
http://blog.csdn.net/zheng0518/article/details/51607063
http://blog.csdn.net/nicewuranran/article/details/51730131
75.你知道的开源协议有哪些
常见的开源协议有GPL、LGPL、BSD、Apache Licence vesion 2.0、MIT,详细内容参考文章
http://blog.jobbole.com/44175/
http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html
76.json和xml区别
XML:
(1)应用广泛,可扩展性强,被广泛应用各种场合;
(2)读取、解析没有JSON快;
(3)可读性强,可描述复杂结构。
JSON:
(1)结构简单,都是键值对;
(2)读取、解析速度快,很多语言支持;
(3)传输数据量小,传输速率大大提高;
(4)描述复杂结构能力较弱。
77.设计模式
参考文章http://www.cnblogs.com/beijiguangyong/archive/2010/11/15/2302807.html#_Toc281750445
78.设计模式的六大原则
参考文章http://www.uml.org.cn/sjms/201211023.asp
79.用一个设计模式写一段代码或画出一个设计模式的UML
参考文章http://www.cnblogs.com/beijiguangyong/archive/2010/11/15/2302807.html#_Toc281750445
80.高内聚,低耦合方面的理解
参考文章http://my.oschina.net/heweipo/blog/423235
算法:
1. 深度优先、广度优先算法 2. 排序算法及对应的时间复杂度和空间复杂度 3. 写一个排序算法 4. 查找算法 5. B+树和二叉树查找时间复杂度 6. KMP算法、hash算法 7. 常用的hash算法有哪些 8. 如何判断一个单链表是否有环? 9. 给你一万个数,如何找出里面所有重复的数?用所有你能想到的方法,时间复杂度和空间复杂度分别是多少? 10. 给你一个数组,如何里面找到和为K的两个数? 11. 100000个数找出最小或最大的10个? 12. 一堆数字里面继续去重,要怎么处理?
数据结构:
1. 队列、栈、链表、树、堆、图 2. 编码实现队列、栈
Linux:
1. linux常用命令 2. 如何查看内存使用情况 3. Linux下如何进行进程调度
操作系统:
http://blog.csdn.net/ls5718/article/details/518961591. 操作系统什么情况下会死锁 2. 产生死锁的必要条件 3. 死锁预防
数据库:
1. 范式http://blog.csdn.net/ls5718/article/details/51768920 2. 数据库事务隔离级别http://blog.csdn.net/ls5718/article/details/51894799 3. 数据库连接池的原理http://blog.csdn.net/shuaihj/article/details/14223015 4. 乐观锁和悲观锁http://blog.csdn.net/ls5718/article/details/52130687 5. 如何实现不同数据库的数据查询分页http://blog.csdn.net/ls_man/article/details/11783813 http://www.cnblogs.com/bluestorm/archive/2012/08/06/2625578.html 6. SQL注入的原理,如何预防http://blog.csdn.net/ls5718/article/details/52123140 7. 数据库索引的实现(B+树介绍、和B树、R树区别)http://blog.csdn.net/ls5718/article/details/51769697 8. SQL性能优化http://blog.csdn.net/ls5718/article/details/51773813 9. 数据库索引的优缺点以及什么时候数据库索引失效http://blog.csdn.net/ls5718/article/details/52278139 10.Redis的存储结构
网络:
1. OSI七层模型以及TCP/IP四层模型http://blog.csdn.net/ls5718/article/details/51849854 2. HTTP和HTTPS区别http://blog.csdn.net/ls5718/article/details/52431277 3. HTTP报文内容http://blog.csdn.net/ls5718/article/details/51851733 4. get提交和post提交的区别 5. get提交是否有字节限制,如果有是在哪限制的 6. TCP的三次握手和四次挥手http://blog.csdn.net/ls5718/article/details/51583514 7. session和cookie的区别http://blog.csdn.net/ls5718/article/details/52431346 8. HTTP请求中Session实现原理 9. redirect与forward区别 10.DNS 11. TCP和UDP区别http://blog.csdn.net/ls5718/article/details/52141571
安全:
1. 如果客户端不断的发送请求连接会怎样 2. DDos攻击http://blog.csdn.net/ls5718/article/details/52431369 3. DDos预防 4. 那怎么知道连接是恶意的呢?可能是正常连接
其它:
1. 说一个你参与的项目、其中作为什么角色 2. 遇到最困的问题是什么,怎么解决的 3. 你认为自己有那些方面不足 4. 平常如何学习的 5. 如何评价自己
智力题:
1. 给你50个红球和50个黑球,有两个一模一样的桶,往桶里放球,让朋友去随机抽,采用什么策略可以让朋友抽到红球的概率更高? 2. 从100个硬币中找出最轻的那个假币?
相关文章推荐
- 200个最常见的JAVA面试问题(附答案)
- Java异常的面试问题及答案
- 40个Java集合面试问题和答案
- 转:40个Java集合面试问题和答案
- 华为JAVA(面试问题及答案节)
- Java异常的面试问题及答案-Part 1
- 40个Java集合面试问题和答案
- 疯狂Java学习笔记(61)-----------40个Java集合面试问题和答案
- Java面试问题和答案(二)
- 转:40个Java集合面试问题和答案
- Java异常的面试问题及答案
- 转:40个Java集合面试问题和答案
- Java异常的面试问题及答案-Part 1
- Java 40个集合面试问题和答案
- Java面试的问题附带答案 .
- Java异常的面试问题及答案-Part 1
- 40个Java集合面试问题和答案
- 40个Java集合面试问题和答案
- 40个Java集合面试问题和答案
- 40个Java集合面试问题和答案