zoukankan      html  css  js  c++  java
  • 京东Java面试题(二)

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

    1)在往set中添加元素时,如果指定元素不存在,则添加成功。也就是说,如果set中不存在(e==null ? e1==null : e.queals(e1))的元素e1,则e1能添加到set中。

    2)具体来讲:当向HashSet中添加元素的时候,首先计算元素的hashcode值,然后用这个(元素的hashcode)%(HashMap集合的大小)+1计算出这个元素的存储位置,如果这个位置为空,就将元素添加进去;如果不为空,则用equals方法比较元素是否相等,相等就不添加,否则找一个空位添加。

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

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

    HashMap何时扩容:

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

    扩容的算法是什么:

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

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

    5、Java中对异常时如何进行分类的?

    异常整体分类:

    1)Java异常结构中定义有Throwable类。 Exception和Error为其子类。

    2)其中Exception表示由于网络故障、文件损坏、设备错误、用户输入非法情况导致的异常;

    3)而Error标识Java运行时环境出现的错误,例如:JVM内存耗尽。

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

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

    Java四种线程池

    第一种:newCachedThreadPool

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

    第二种:newFixedThreadPool

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

    第三种:newScheduledThreadPool

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

    第四种:newSingleThreadExecutor

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

    8、volatile和synchronized区别

    volatile和synchronized简介:

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

      1)使用synchronized关键字

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

    两者的区别:

    1)volatile本质是在告诉jvm当前变量在寄存器中的值是不确定的,需要从主存中读取,synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住.

    2)volatile仅能使用在变量级别,synchronized则可以使用在变量,方法.

    3)volatile仅能实现变量的修改可见性,而synchronized则可以保证变量的修改可见性和原子性.

    4)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.降低Java EE API的使用难度

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

    10、spring aop的应用场景:

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

    Authentication 权限

    Caching 缓存

    Context passing 内容传递

    Error handling 错误处理

    Lazy loading 懒加载

    Debugging 调试

    logging, tracing, profiling and monitoring 记录跟踪 优化 校准

    Performance optimization 性能优化

    Persistence 持久化

    Resource pooling 资源池

    Synchronization 同步

    Transactions 事务

    11、Mybaits中#和$区别

    1)${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。

    2)#{}是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号占位符设置参数值,比如ps.setInt(0, parameterValue),#{item.name}的取值方式为使用反射从参数对象中获取item对象的name属性值,相当于param.getItem().getName()。

    12、排序都有哪几种方法?请列举。用JAVA 实现一个快速排序。

    排序的方法有:

    插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序);

    快速排序的伪代码:

    //使用快速排序方法对a[ 0 :n- 1 ]排序

    从a[ 0 :n- 1 ]中选择一个元素作为middle,该元素为支点;

    把余下的元素分割为两段left 和right,使得left 中的元素都小于等于支点,

    而right 中的元素都大于等于支点;

    递归地使用快速排序方法对left 进行排序;

    递归地使用快速排序方法对right 进行排序;

    所得结果为left + middle + right。

    为了更好的让大家应对笔试,除了以上精选笔试题外,还准备了历年来几百道笔试题,包括:(java,spring、数据结构和算法、mybatis、redis、serlvet、jsp等),供大家学习。

  • 相关阅读:
    Mysql问题1862
    S3TC IAP15F2K61S2点亮一个发光二极管keil和stc-isp软件操作
    .NET练习计算平方根
    求一个整数以内的素数(函数实现)
    判断一个数是不是素数(函数实现)
    #号在进制输出值的作用,美化输出
    分类——决策树模型(附有决策树生成步骤)
    分类:贝叶斯分类之新闻组数据组学习(查看数据类型的方法)(环境:Pycharm)
    分类:K-近邻分类之鸢尾花数据集学习(包含数据预处理中的标准化)(环境:Pycharm)
    编写一个程序,求2~n间的素数,n由键盘输入,循环变量分别 从2到n、2到(int)sqrt(n),分别测出两个循环的所用时间。
  • 原文地址:https://www.cnblogs.com/du-0210/p/8417340.html
Copyright © 2011-2022 走看看