欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java面试题记录

程序员文章站 2022-07-10 09:17:29
11.27 实和智能spring里6个常用的注解@transaction注解能否用于所有的类 抽象类,接口json的两种构造Arrays.asList(2,3,4,5).forEach(system.out::print)5.数据库查询135开头的手机号6.数据库查询所有课程分数都是80以上的学生11.26 ea sports外包list 和set的区别list 可以放重复元素,set不能放重复元素。list 是有序的,放进去的元素可以按顺序取出,set不行。set只能有一个n...

11.27 实和智能

  1. 列出Spring里6个常用的注解?
    这题看上去简单其实是间接的考察了,你到底用了多久的Spring…
    @Component 标注在某个类上,以把这个类配置成一个bean
    @Controller 用于控制层,把它标注在某个类上就说明Spring将会扫描到它作为控制器bean
    @RequestMapping 用于控制层的方法前面,使前端有一个路径可以访问
    @Service 用于业务层,把它标注到某个类上,说明这个类是业务层组件bean
    @Repository 用于持久层DAO,把它标注在某个类上说明这个类是用于持久层数据访问bean
    @Resource 给某个属性依赖注入,默认通过查找对应的bean的名字来注入
    @Autowired 给某个属性依赖注入,默认通过查找对应的bean的类型来注入
    @Transational 关于声明式事务管理,加在需要事务管理的方法上,就确保了这个方法里面的事务一致性,而且当事务失败的时候可以进行回滚。
    扩展:SpringBoot里面有哪些常用的注解?

  2. @transactional注解能否用于所有的类, 抽象类,接口?
    可以,一般用于类中public的方法上,不建议用于抽象类和接口,因为可能会不生效

  3. json的两种结构是什么?
    1、对象结构。和map差不多,里面包含了类似key,value的格式,key为名称,value为对应的值,然后外面再用大括号括起来。
    {key:value, key:value,…}
    2、数组结构:和数组差不多,里面包含了各种元素,外面用中括号括起来。
    [element1,element2,element3,…]
    两种结构相结合:

"users":[
        {
            "firstName":"firstname1",
            "lastName":"lastname1",
            "email":"email1"
        },
        {
            "firstName":"firstname2",
            "lastName":"lastname2",
            "email":"email2"
        },
        {
            "firstName":"firstname3",
            "lastName":"lastname3",
            "email":"email3"
        }
    ]
  1. 语句Arrays.asList(2,3,4,5).forEach(System.out::print)可以输出正确的值吗?为什么?
    答案是肯定的,这里面涉及三个知识点。
    一个是Arrays的asList()方法,它是将数组转化成List,其中的参数必须是数组或是数组元素,但是它们必须是包装类类型,而不能是原生的基本数据类型,因为如果直接放入基本类型数组,他就会直接将整个数组对象当成一个元素输出。这里直接填元素2,3,4,5的话,每个元素就可以看成是包装类型的,因此可以正常输出。
    第二个是List的forEach方法,它的作用是遍历一下list,但这里必须得用到lambda表达式来输出列表里的值,即:
    list.forEach(i->System.out.print(i));
    第三个就是方法引用,这个我在面试前从没见过…一上来给我搞懵了, System.out::print其实等价于i->System.out.print(i),是lambda表达式的简写,它是将一个方法来作为一个引用,来传给其他方法来使用,就有函数式编程的感觉。
  2. 数据库删除135开头的手机号的用户
    delete from user where phone_number like “135%”
    一些相关的模糊查询:
    %: 表示0个或多个字符
    _: 表示任意单个字符
    []: 表示括号中所列多个字符的一个字符
    [^]: 表示括号中所列多个字符之外的一个字符
  3. 数据库查询所有课程分数都是80分及以上的学生
    例如:
    | student_name | module | mark |
    |zhangsan| chinese | 85 |
    |zhangsan| math | 79 |
    |lisi| chinese | 82 |
    |lisi| math | 88 |
    |wangwu| chinese | 93|
    |wangwu| math | 85 |
    |wangwu| english | 81 |
    select student_name from student where student.student_name not in (select student_name from student where mark<80)
    思路:先使用子查询查出小于80分的学生姓名,再查出所有学生姓名,最后使用not in即可排除掉小于80分的了,即80分及以上的学生。

11.26 EA sports外包

  1. list 和set的区别?
    list 可以放重复元素,set不能放重复元素。
    list 是有序的,放进去的元素可以按顺序取出,set不行。
    set只能有一个null 而list可以有多个null,

  2. 什么是一致性哈希?
    这个太大了,得慢慢学,以后再补
    它的性质和java哈希表里面的哈希算法差不多,但是普通的哈希取模太小了,我们如果按照哈希算法来插入记录到数据库中,那么每当新增数据库的时候,就必须修改哈希算法,消耗大量的资源。因此,

  3. tomcat怎么配置?
    修改端口:打开conf/server.xml xml <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" uriEncoding="utf-8"/>
    部署:直接把Web项目放在webapps下,Tomcat会自动将其部署
    conf/server.xml里面修改连接数,关闭客户端dns查询也能进行优化

  4. 怎么检测是哪个线程发生了死锁?
    我们可以使用JDK里面自带的Jstack工具。先获取到java程序的进程id,然后输入命令jstack -l 进程id 可以将线程信息输出到文件,最后分析文件即可找出哪里发生了死锁。

  5. JavaScript中== 和 === 的区别?
    = =代表相等,= = =代表恒等,就是说===的更加严格一些
    三个等于号的只有两边类型相等,且内容相等,才返回true,否则返回false
    两个等于号的,若是类型相等,则比较内容,若是类型不相等,js会将两边的内容转换为数值类型,再进行比较。

  6. 有没有用过集群?
    需要用到redis,zookeeper等,得慢慢学,以后再补

  7. 为什么java里面的泛型是伪泛型?
    我当时听他说就愣住了,泛型是伪泛型?然后百度搜了一下还真是这样。因为java的泛型只是相当于在编译的时候作一个提示,阻止我们放进去其他类型的元素,可是如果我们使用反射机制,真的可以放进去各种各样的元素,此时泛型就失效了。

之前初学java必会的基础面试题

  1. java的八大变量?
    byte, short, int, long, float, double, char, boolean

  2. HashMap的线程安全?
    HashMap并不是线程安全的,主要是因为当两个线程同时往一个hashMap里面添加元素,都需要扩容的时候,即调用resize方法时,其中的rehash方法在并行情况下可能会出现环形链表,程序出现死循环。我们可以使用ConcurrentHashMap来保证线程安全。

  3. StringBuilder和StringBuffer的区别?
    StringBuilder并非线程安全,因此在单线程的情况下效率更高,StringBuffer恰好相反。

  4. 一条sql查出两个表中不同的数据?
    这时候要使用全外连接,可以查出两个表不同的数据:full join
    例如: select * from user as a full join stu as b on a.name = b.name

  5. 什么是hash碰撞?
    如果某两个元素计算出的hash值一样,那么这两个元素就发生了hash碰撞,处理hash碰撞一般有两种方法:开放寻址法和链接法。开放寻址法就是,插入时如果这个地址满了,就继续探查下一个地址,直到有一个地址可以放进去为止。链接法就是,把所有地址都链接一个链表,这样哈希值在同个地址上的元素就可以加到链表里,解决了冲突。

  6. HashMap如何解决hash碰撞?
    HashMap是使用链接法解决hash碰撞的,若是插入的两个元素的hash值相同,则按照实际情况,将元素插入到该地址链接的链表或红黑树中。

  7. Mysql的四种事务隔离级别?
    1.read-uncommitted
    2.read-committed
    3.repeatable-read
    4.serializable

  8. 高并发如何解决?

  9. Spring bean作用域?

  10. MySQL的链接查询、如何去重?

  11. Mybatis # $的区别?

  12. 唯一索引和主键索引的区别?

  13. 抽象类和接口的区别?

本文地址:https://blog.csdn.net/kagamkuro/article/details/110232947

相关标签: java 面试