专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 大型互联网企业精选Java笔试题目及答案

大型互联网企业精选Java笔试题目及答案

更新时间:2020-05-12 14:02:43 来源:动力节点 浏览1733次

1.set集合从原理上如何保证不重复

  • 在往set中添加元素时,如果指定元素不存在,则添加成功。也就是说,如果set中不存在(e==null?e1==null:e.queals(e1))的元素e1,则e1能添加到set中。
  • 具体来讲:当向HashSet中添加元素的时候,首先计算元素的hashcode值,然后用这个(元素的hashcode)%(HashMap集合的大小)+1计算出这个元素的存储位置,如果这个位置位空,就将元素添加进去;如果不为空,则用equals方法比较元素是否相等,相等就不添加,否则找一个空位添加。

2.HashMap和HashTable的主要区别是什么?,两者底层实现的数据结构是什么?

HashMap和HashTable的区别:

二者都实现了Map接口,是将惟一键映射到特定的值上;主要区别在于:

  • HashMap没有排序,允许一个null键和多个null值,而Hashtable不允许;
  • HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey,因为contains方法容易让人引起误解;
  • Hashtable继承自Dictionary类,HashMap是Java1.2引进的Map接口的实现;
  • Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。Hashtable和HashMap采用的hash/rehash算法大致一样,所以性能不会有很大的差异。

HashMap和HashTable的底层实现数据结构:

HashMap和Hashtable的底层实现都是数组+链表结构实现的

3.HashMap何时扩容,扩容的算法是什么?

HashMap何时扩容:

当向容器添加元素的时候,会判断当前容器的元素个数,如果大于等于阈值---即当前数组的长度乘以加载因子的值的时候,就要自动扩容

扩容的算法是什么:

扩容(resize)就是重新计算容量,向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组的长度,以便能装入更多的元素。当然Java里的数组是无法自动扩容的,方法是使用一个新的数组代替已有的容量小的数组

4.Java的虚拟机JVM的两个内存:栈内存和堆内存的区别是什么?

Java把内存划分成两种:一种是栈内存,一种是堆内存。两者的区别是:

  • 栈内存:在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
  • 堆内存:堆内存用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。

5.Java中对异常是如何进行分类的?

异常整体分类:

  • Java异常结构中定义有Throwable类。Exception和Error为其子类。
  • 其中Exception表示由于网络故障、文件损坏、设备错误、用户输入非法情况导致的异常;
  • 而Error标识Java运行时环境出现的错误,例如:JVM内存耗尽。

6.数据库设计中常讲的三范式是指什么?

第一范式1NF(域的原子性)

如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式

第二范式2NF(表中除主键外的字段都完全依赖主键)

第二范式是在第一范式基础上建立的。第二范式有两个重点:(1)表中必须有主键;(2)其他非主属性必须完全依赖主键,不能只依赖主键的一部分(主要针对联合主键而言)。

第三范式3NF(表中除主键外的字段都完全直接依赖,不能是传递依赖)

不能是传递依赖,即不能存在:非主键列A依赖于非主键列B,非主键列B依赖于主键的情况。第二范式和第三范式区分的关键点:2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。

7.Java中的线程池共有几种?

Java四种线程池

第一种:newCachedThreadPool

创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。

第二种:newFixedThreadPool

创建一个指定工作线程数量的线程池

第三种:newScheduledThreadPool

创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。

第四种:newSingleThreadExecutor

创建一个使用单个worker线程的Executor,以无界队列方式来运行该线程。

8.volatile和synchronized区别

volatile和synchronized简介:

在Java中,为了保证多线程读写数据时保证数据的一致性,可以采用两种方式:

  • 使用synchronized关键字
  • 使用volatile关键字:用一句话概括volatile,它能够使变量在值发生改变时能尽快地让其他线程知道。

两者的区别:

  • volatile本质是在告诉jvm当前变量在寄存器中的值是不确定的,需要从主存中读取,synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住.
  • volatile仅能使用在变量级别,synchronized则可以使用在变量,方法.
  • volatile仅能实现变量的修改可见性,而synchronized则可以保证变量的修改可见性和原子性.
  • volatile不会造成线程的阻塞,而synchronized可能会造成线程的阻塞.

9.Spring的特性

(1)方便解耦,简化开发

通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。

(2)AOP编程的支持

通过Spring提供的AOP功能,方便进行面向切面的编程。

(3)声明事物的支持

在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。

(4)方便程序的测试

可以用非容器依赖的编程方式进行几乎所有的测试工作。例如:Spring对Junit4支持,可以通过注解方便的测试Spring程序。

(5)方便集成各种优秀框架

Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。

(6)降低JavaEEAPI的使用难度

Spring对很多难用的JavaEEAPI(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些JavaEEAPI的使用难度大为降低。

10.springaop的应用场景:

 AOP用来封装横切关注点,具体可以在下面的场景中使用

  • Authentication权限
  • Caching缓存
  • Contextpassing内容传递
  • Errorhandling错误处理
  • Lazyloading懒加载
  • Debugging调试
  • logging,tracing,profilingandmonitoring记录跟踪优化校准
  • Performanceoptimization性能优化
  • Persistence持久化
  • Resourcepooling资源池
  • Synchronization同步
  • Transactions事务

以上就是动力节点java培训机构的小编针对“大型互联网企业精选Java笔试题目及答案”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>