Java面试题

java面试题 当线程 A 持有独占锁a,并尝试去获取独占锁 b 的同时,线程 B 持有独占锁 b,并尝试获取独占锁 a 的情况下,就会发生 AB 两个线程由于互相持有对方需要的锁,而发生的阻塞现象,我们称为死锁。反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。Java 序列化是为了保存各种对象在内存中的状态,并且可以把保存的对象状态再读出来。 阅读详情

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.youkuaiyun.com/ls5718/article/details/51314888

equals相等,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.youkuaiyun.com/ls5718/article/details/51099463

List和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.youkuaiyun.com/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.youkuaiyun.com/ls5718/article/details/52389015

Unchecked 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)

  • JDK动态代理:代理类和目标类实现了共同的接口,用到InvocationHandler接口。
  • CGLIB动态代理:代理类是目标类的子类, 用到MethodInterceptor接口

23. 多线程的实现方式

继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。

24. 线程的状态转换

http://blog.youkuaiyun.com/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.youkuaiyun.com/ls5718/article/details/52396652

主要相同点:Lock能完成synchronized所实现的所有功能 
主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。Lock的锁定是通过代码实现的,而synchronized是在JVM层面上实现的,synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。Lock还有更强大的功能,例如,它的tryLock方法可以非阻塞方式去拿锁。Lock锁的范围有局限性,块范围,而synchronized可以锁住块、对象、类。

30. 多线程如何进行信息交互

  • void 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.youkuaiyun.com/ls5718/article/details/51896159

33. 如何才能产生死锁

产生死锁的四个必要条件:

  • 互斥条件:所谓互斥就是进程在某一时间内独占资源。
  • 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
  • 不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。
  • 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

34. 死锁的预防

打破产生死锁的四个必要条件中的一个或几个,保证系统不会进入死锁状态。

    • 打破循环等待条件,实行资源有序分配策略。采用这种策略,即把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路。所有进程对资源的请求必须严格按资源序号递增的顺序提出。进程占用了小号资源,才能申请大号资源,就不会产生环路,从而预防了死锁。

  • 打破互斥条件。即允许进程同时访问某些资源。但是,有的资源是不允许被同时访问的,像打印机等等,这是由资源本身的属性所决定的。所以,这种办法并无实用价值。
  • 打破占有且申请条件。可以实行资源预先分配策略。即进程在运行前一次性地向系统申请它所需要的全部资源。如果某个进程所需的全部资源得不到满足,则不分配任何资源,此进程暂不运行。只有当系统能够满足当前进程的全部资源需求时,才一次性地将所申请的资源全部分配给该进程。由于运行的进程已占有了它所需的全部资源,所以不会发生占有资源又申请资源的现象,因此不会发生死锁。

35. 什么叫守护线程,用什么方法实现守护线程

守护线程是为其他线程的运行提供服务的线程。 
setDaemon(boolean on)方法可以方便的设置线程的Daemon模式,true为守护模式,false为用户模式。

36. Java线程池技术及原理

http://blog.youkuaiyun.com/ls5718/article/details/52397485

37. java并发包concurrent及常用的类

http://blog.youkuaiyun.com/ls5718/article/details/51785864

38. volatile关键字

http://blog.youkuaiyun.com/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, Kryo

43. 内存溢出和内存泄漏的区别

内存溢出是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory。 
内存泄漏是指分配出去的内存不再使用,但是无法回收。

44. Java内存模型及各个区域的OOM,如何重现OOM

http://blog.youkuaiyun.com/ls5718/article/details/52411211

45. 出现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.youkuaiyun.com/ls5718/article/details/51777322

48. Java类加载器及如何加载类(双亲委派)

阅读文章:https://www.ibm.com/developerworks/cn/java/j-lo-classloader/(推荐) 
或http://blog.youkuaiyun.com/zhoudaxia/article/details/35824249

49. xml解析方式

50. Statement和PreparedStatement之间的区别

51.servlet生命周期及各个方法
http://blog.youkuaiyun.com/ls5718/article/details/51620649

52.servlet中如何自定义filter
参考文章http://www.cnblogs.com/javawebsoa/archive/2013/07/31/3228858.html

53.JSP原理
参考文章http://blog.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/ls5718/article/details/51606827

57.MVC概念
参考文章http://www.cnblogs.com/scwyh/articles/1436802.html

58.spring mvc与Struts区别
http://blog.youkuaiyun.com/ls5718/article/details/52274135

59.hibernate/Ibatis两者的区别
参考文章http://blog.youkuaiyun.com/firejuly/article/details/8190229

60.Hibernate一级和二级缓存
http://blog.youkuaiyun.com/ls5718/article/details/52183086

61.简述Hibernate常见优化策略
参考文章http://blog.youkuaiyun.com/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.youkuaiyun.com/ls5718/article/details/51668730

http://blog.youkuaiyun.com/ls5718/article/details/51791758

65.Spring bean注入方式
参考文章http://blessht.iteye.com/blog/1162131

66.Spring的事务管理
这个主题的参考文章没找到特别好的,http://blog.youkuaiyun.com/trigl/article/details/50968079

67.Spring事务的传播特性
参考文章http://blog.youkuaiyun.com/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.youkuaiyun.com/zheng0518/article/details/51607063

http://blog.youkuaiyun.com/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下如何进行进程调度

操作系统:

1. 操作系统什么情况下会死锁

2. 产生死锁的必要条件

3. 死锁预防

数据库:

1. 范式http://blog.youkuaiyun.com/ls5718/article/details/51768920

2. 数据库事务隔离级别http://blog.youkuaiyun.com/ls5718/article/details/51894799

3. 数据库连接池的原理http://blog.youkuaiyun.com/shuaihj/article/details/14223015

4. 乐观锁和悲观锁http://blog.youkuaiyun.com/ls5718/article/details/52130687

5. 如何实现不同数据库的数据查询分页http://blog.youkuaiyun.com/ls_man/article/details/11783813    http://www.cnblogs.com/bluestorm/archive/2012/08/06/2625578.html

6. SQL注入的原理,如何预防http://blog.youkuaiyun.com/ls5718/article/details/52123140

7. 数据库索引的实现(B+树介绍、和B树、R树区别)http://blog.youkuaiyun.com/ls5718/article/details/51769697

8. SQL性能优化http://blog.youkuaiyun.com/ls5718/article/details/51773813

9. 数据库索引的优缺点以及什么时候数据库索引失效http://blog.youkuaiyun.com/ls5718/article/details/52278139

10.Redis的存储结构

网络:

1. OSI七层模型以及TCP/IP四层模型http://blog.youkuaiyun.com/ls5718/article/details/51849854

2. HTTP和HTTPS区别http://blog.youkuaiyun.com/ls5718/article/details/52431277

3. HTTP报文内容http://blog.youkuaiyun.com/ls5718/article/details/51851733

4. get提交和post提交的区别

5. get提交是否有字节限制,如果有是在哪限制的

6. TCP的三次握手和四次挥手http://blog.youkuaiyun.com/ls5718/article/details/51583514

7. session和cookie的区别http://blog.youkuaiyun.com/ls5718/article/details/52431346

8. HTTP请求中Session实现原理

9. redirect与forward区别

10.DNS

11. TCP和UDP区别http://blog.youkuaiyun.com/ls5718/article/details/52141571

安全:

1. 如果客户端不断的发送请求连接会怎样

2. DDos攻击http://blog.youkuaiyun.com/ls5718/article/details/52431369

3. DDos预防

4. 那怎么知道连接是恶意的呢?可能是正常连接

其它:

1. 说一个你参与的项目、其中作为什么角色

2. 遇到最困的问题是什么,怎么解决的

3. 你认为自己有那些方面不足

4. 平常如何学习的

5. 如何评价自己

智力题:

1. 给你50个红球和50个黑球,有两个一模一样的桶,往桶里放球,让朋友去随机抽,采用什么策略可以让朋友抽到红球的概率更高?

2. 从100个硬币中找出最轻的那个假币?
Java核心面试题——精选36道核心面试题 目录java核心面试题1、java个版本中更新的重要功能1.1 java 14版本中更新的重要功能1.2 java 13版本中更新的重要功能1.3 java12版本中更新的重要功能1.4 java11版本中更新的重要功能1.5 java10版本中更新的重要功能1.6 java9版本中更新的重要功能1.5 java8版本中更新的重要功能2、java面向对象编程的特征3、 [JVM](https://blog.youkuaiyun.com/issunmingzhi/article/details/104774941)4、J 阅读详情

相关推荐

避开ego_planner仿真的第一个坑:深度相机、点云与odom话题配置全指南

本文详细解析了ego_planner仿真中深度相机、点云与odom话题配置的关键问题,帮助开发者避开常见陷阱。从数据流架构到具体配置细节,包括深度相机的内外参匹配、点云数据规范要求以及odom话题的验证方法,提供了全面的实战指南和优化建议。

weixin_30335575的博客 494

JAVA面试问题及答案(上)

1. 面向对象和面向过程的区别 面向过程  优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。  缺点:没有面向对象易维护、易复用、易扩展  面向对象  优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易

jayxu无捷之径的博客 6517

TEC控制器芯片 ADN8835 中文数据手册

ADN8835是一款高集成度的单芯片TEC控制器。它包括线性电压调节模块脉冲宽度调制(PWM) 电压调节模块和两个零漂移、轨到轨斩波放大器。线性控制器和PWM驱动器用于控制H桥配置中的内部功率MOSFET。通过测量热传感器反馈电压,并使用集成的运算放大器作为比例-积分-微分(PID)补偿器来调理信号,ADN8835通过TEC驱动电流,将连接至TEC模块的激光二极管或无源组件的温度稳定到编程的目标温度。

lu2289504634的博客 9542

Java研发方向如何准备BAT技术面试(超级干货)

背景:最近BAT等各大互联网巨头们的校招陆陆续续都准备开始了,可能对于在校的大多数学生来说,不知道如何正确衡量自己掌握的技术,更不知道BAT这样的公司会要求自己必须具备什么样的技术能力。对于Java研发方向的技术面试,这里总结了一些你必须要掌握的技术知识点,考察的内容会比这里总结的多,所以如果想要有一个很不错的offer,下面的知识点需要都具备。社招考察的内容会在此基础上增加项目经验、技术实战经验、

ChasonYang 1721

原形网络(Prototypical Networks)基于PyTorch的实现

我在Jay2coomzz的基础上修改了数据处理方式和evaluation_model()方法,作为初学者若有不当之处恳请大家批评指正,原文链接如下: https://blog.youkuaiyun.com/weixin_38471579/article/details/102631018 数据集和源码链接将放到评论区 文章目录1 数据集一个简单的数据集介绍数据集处理2 搭建网络CNNProtonets 1 数据集 一个简单的数据集介绍 Omniglot数据集一共包含1623 类手写体,每一类中包含20 个样本。其中.

weixin_43872532的博客 6637

学习C++的递归函数(包含汉诺塔讲解)

简单来讲,递归函数就是函数本身自己调用自己,那么函数又是什么呢?#include <stdio.h> //这行是头文件,不同的头文件可以用不同的函数int main() //这里就是一个main函数//这里是你要编写程序的内容return 0;(这是个小细节如下)所以我们平时用来练习的就是一个main函数,而且是一个整型类型的函数,而这也是最后一句话为什么要加一句 return 0;了,因为它最后要返回整数类型,其它整数也可以,但是大家规定为0,这是C++自带的函数。

2302_81032013的博客 2594

【大厂智力题】红球白球问题(红球白球各50个,有两个桶,可以放任意红球白球,求怎么放,从任一个桶取出红球的几率最大)

【大厂智力题】红球白球问题(红球白球各50个,有两个桶,可以放任意红球白球,求怎么放,从任一个桶取出红球的几率最大) 1.要求:球必须放完 ,即使红球白球都在一个桶里也行 解决方案: 一个桶里只放一个红球,把剩余的49个红球和白球都放在另一个桶中,这时候取到只放红球的那一个桶的几率为1/2,在混合桶里取红球的几率为49/99 即1/2+1/2*49/99 即为最大几率取出红球 ...

weixin_43564627的博客 2649

别再只放按钮了!巧用微信小程序‘长按识别’功能,打造无缝加群体验

本文深入探讨了微信小程序'长按识别'功能在社群运营中的创新应用,通过简化加群流程至一步操作,显著提升用户转化率。文章详细解析了技术实现细节、UI/UX设计策略,并对比了与企业微信API的适用场景,为开发者提供打造无缝加群体验的完整解决方案。

weixin_42627853的博客 435

阿里巴巴暑期实习面试经验

拿到阿里巴巴的暑期offer快一周了,一直都没有时间写总结。今天终于有点时间,就把我的经验分享出来,希望能够帮到其他的小伙伴们~题目记不太全了,把我能记住的尽量写出来了。 一面(用时80分钟)(电话面试) 自我介绍未来三年的技术规划,是想继续做技术呢?还是转到别的方向?说说自己的优势?举几个例子说明自己的优势?班上的同学是如何评价你的?举个别人来找你问问题,你帮忙解决的最有成就感的

ys_sarah的博客 4692

影刀rpa的使用一--读取excel表格数据并循环出每一项

1、全部展示2、运行结果展示之后可以按照各自的需求对excel中取出的数据进行处理。

qq_69268437的博客 1万+

手把手保姆级|Python爬取微信公众号文章完整版,反反爬策略拉满,附可运行完整代码(永久可用)

做Python爬虫的朋友都知道,爬取微信公众号文章 绝对是爬虫领域的「香饽饽」也是「硬骨头」。一方面,微信公众号的文章是极具价值的数据源:不管是自媒体从业者做竞品分析、新媒体运营者整理干货、还是个人学习收集资料,都需要批量爬取公众号文章;另一方面,微信的反爬机制堪称全网最严苛之一 ——腾讯对微信生态的风控做到了极致,动态渲染页面、高频IP封禁、Cookie短时效失效、请求头严格校验、自动化工具秒识别、频繁请求直接拉黑,这些反爬手段让90%的爬虫新手望而却步:要么爬了几篇就被封IP,要么Cookie失效爬取中

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2631

Java基础知识面试题

一、JDK 和 JRE 有什么区别? JDK(Java Development Kit),Java开发工具包 JRE(Java Runtime Environment),Java运行环境 JDK中包含JRE,JDK中有一个名为jre的目录,里面包含两个文件夹bin和lib,bin就是JVM,lib就是JVM工作所需要的类库。 二、== 和 equals 的区别是什么? 1、对于基本类型,==比较的是值; 2、对于引用类型,==比较的是地址; 3、equals不能用于基本类型的比较; 4、如果

学Java,找哪吒 6万+

夯爆了!这两组AI漫剧校园风人物三视图(附详细提示词)

生成一张高清8K图像,图像主体是一位亚洲年轻女性,拥有长直黑发和精致的五官,她穿着一套由白色衬衫、深红色领带、深蓝色牛仔外套和深蓝色牛仔百褶短裙组成的制服,搭配灰色长筒袜和黑色厚底皮鞋。图像由四部分组成,左一为女性特写头像,面部表情自然,眼神柔和,右侧三张图分别展示了女性的正面、侧面和背面全身像,整体构图均衡,遵循三分法则。图像整体呈现出一种类似于3D渲染的摄影风格,背景为纯白色,采用高对比度照明,强调主体细节和质感,色彩调色板以深蓝色和白色为主,整体色调清新自然,注重质感和光影效果的呈现。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 161

Java 208 道面试题:Java 基础模块答案

目前市面上的面试题存在两大问题:第一,题目太旧好久没有更新了,还都停留在 2010 年之前的状态;第二,近几年 JDK 更新和发布都很快,Java 的用法也变了不少,加上 Java 技术栈也加入了很多新的框架,比如 Spring Boot、Spring Cloud 等,但类似的面试题却极少。 相比与这些问题,我的这 208 道面试题,包含了以下 4 个特点: 披沙拣金提炼出每个 Java 模块中...

磊哥聊Java 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java高级面试题总结

本文内容涉及中高级面试知识点,涵盖众多大厂面试题

前方一片光明 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

JAVA 面试背 通过_java面试题背不下来怎么办?java面试题总结

Language》一书的附录中给出了一个Java关键字列表,其中有goto和const,但是这两个是目前无法使用的关键字,因此有些地方将其称之为保留字,其实保留字这个词应该有更广泛的意义,因为熟悉C语言的程序员都知道,在系统类库中使用过的有特殊意义的单词或单词的组合都被视为保留字)。最近有很多java人员反映,说java面试题太多根本就背不下来,这可急坏了他们,毕竟要去面试java工作的,那么接下来,我们就来给大家讲解一下java面试题背不下来的解决方法。可以正确编译,因为s1+= 1;

m0_74825409的博客 1428

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java面试题及答案2024,java2024最新面试题及答案(之一)

== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。

码界云仓 1526

2020最新Java面试题

@TOC1、面试题模块汇总 面试题包括以下十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所示: 可能对于初学者不需要后面的框架和 ...

java开发郭靖 3064

Java面试题(最新最全Java面试题汇总)

Java面试题(最新最全Java面试题汇总)JAVA相关基础知识Java面试题集-Java面试题,J2EE面试题集J2EE面试题集(附答案)Java常见面试题集--面试题全面综合(一)Java常见面试题集--面试题全面综合(二)Java面试题集(欢迎大家踊跃提供) 最全的C/C++面试题集(C/C++试题和部分答案)最全的C/C++面试题集(最全的C/C++试题集和答案)(续)一道有趣的C#考试题

首席技术执行官CTO(Chief Technology Officer)|技术总监--邓斌博客 3027

Java基础面试题汇总

java基础面试题整理

个人博客,欢迎收藏。 1万+

Java线程面试题

Java线程面试题 Top 50 下面是Java线程相关的热门面试题,你可以用它来好好准备面试。 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程提供了卓越的...

ANGEL CITY 1919

java 入门面试题

基础:JDK 和 JRE 的区别== 和 equals 的区别基本类型和包装类对象使用 == 和 equals进行比较的结果?什么是装箱?什么是拆箱?装箱和拆箱的执行过程?常见问题?hashCode()相同,equals() 也一定为 true吗?final 在 java 中的作用final finally finalize()区别finally语句块一定执行吗?final 与 static 的区别return 与 finally 的执行顺序对返回值的影响String对象中的replace和replaceA

m0_74824755的博客 1183

最新Java面试题,常见面试题及答案汇总

Java最新常见面试题 + 答案汇总 原文地址:https://blog.youkuaiyun.com/sufu1065/article/details/88051083 1、面试题模块汇总 面试题包括以下十九个模块: Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate...

JustDI0209的博客 570

Java经典面试题

这份面试题,包含的内容了十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM。下面一起来看 208 道面试题,具体的内容。以下是网上整理的非常全面的面试题,当然,绝大多数人不可能全部用到,但是都罗列在此,大家可根据自己的情况,选择对应的模块进行阅读。

2401_87878486的博客 1350

【面试题】-java面试题总目录

前言:先吐槽一下面试吧,相信不少人都有这样的经历,其实你对某项技术已经掌握的很OK了,但在面试的时候却未必能发挥到很好,让面试官觉得你确实已经很好的掌握该技术,也就是说你实际对该技术掌握的程度有90%,但面试时表现出来的却只有30%甚至更少,这可能是表达能力的问题,但也可能很大程度是因为你没有刷面试题,有些平时几乎很少会用到地方没有涉及到刚好被问到了.就好生活中有些人开车开得很好,甚至是一些开车多...

老汉健身的博客 580
下一篇: Ajax的详解和使用?
nigel-wang
博客等级 码龄10年 6粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值