面试记录

1、String、StringBuilder、StringBuffer的区别:

1.操作数量较少的字符串用String,不可修改的字符串;
2.在单线程且操作大量字符串用StringBuilder,速度快,但线程不安全,可修改;
3.在多线程且操作大量字符串用StringButter,线程安全,可修改。

2、Switch case中能使用long、short、byte吗?

可以的,但不能使用String。

3、List、Map、Set的区别

list:1.可以允许重复的对象   

       2.可以插入多个null元素

       3.是一个有序的容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序

       4.常用的实现类有  ArrayList、LinkedList和Vector。ArrayList最流行,它提供了使用索引的随意访问,而LinkedList则对于经常需要从List中添加或删除元素的场合更为适合

Set: 1.不允许重复对象

       2.无序容器,你无法保证每个元素的存储顺序,TreeSet通过Comparator 或者 Comparable 维护了一个排序顺序。

       3.只允许插入一个null元素

      4.Set接口最流行的几个实现类是 HashSet、LinkedHashSet和TreeSet。最流行的是基于HashMap实现的HashSet。TreeSet还实现了SortedSet接口,因此TreeSet是一个根据其compare()和compareTo()的定义进行排序的有序容器。

4、Mysql中UnionUnion all的区别?

union去重,排序;union all不去重,无序。

5、经典JVM中,堆栈和线程的关系

JVM,堆栈和线程的关系

6、ArrayList和Linkedlist的区别

ArrayList:底层采用动态数组的方式,查询快增删慢

LinkedList:底层采用双向链表,增删快查询慢

7、set和list的区别

set:集合,继承Collection,无序并且元素不允许重复,检查元素效率低下,删除和插入的效率高,插入和删除不会引起元素的位置变化

List:列表,继承Collection,有序且允许元素重复,和数组类似,List可以动态增长,查找元素的效率较高,插入元素和删除元素效率低,因为会引起其他元素位置发生变化


8、死锁的相关知识

定义:死锁是指多个进程在运行过程中竞争资源时造成的一种僵局,如果没有外界干涉将无法继续运行。原因:竞争资源。当系统中供多个进程共享的资源如打印机、公用队列等,其数目不足以满足诸进程的需要时,会引起诸进程对资源的竞争而产生死锁。 进程间推进顺序非法:进程在运行过程中,请求和释放资源的顺序不当,也同样会产生进程死锁。必要条件:互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。环路等待条件:在发生死锁时,必然存在一个进程--资源的环形链。预防死锁方法:1、资源一次性分配:一次性分配所有资源,这样就不会再有请求了:(破坏请求条件)2、 只要有一个资源得不到分配,也不给这个进程分配其他的资源:(破坏请保持条件)3、可剥夺资源:即当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源(破坏不可剥夺条件)4、资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)

9、多线程的创建

继承Thread类和实现Runnable接口

10、MySQL查询第二页的五条数据

select * from userInfo LIMIT 2,5;

11、多态的必要条件

有继承、有重写、父类的引用指向子类的对象


12、堆栈多线程的关系

链接地址

13、线程安全的单例模式

    /**
     * 第一种饿汉式
     */
    private static SingleTon instance = new SingleTon();
    private SingleTon(){}
    public  static  SingleTon getInstance(){
        return instance;
    }

     /**
     * 第二种懒汉式
     */
    private  static  SingleTon instance;
    private  SingleTon(){}
    public  static  synchronized SingleTon getInstance(){
        if (instance == null){
            instance=new SingleTon();
        }
        return  instance;
    }

14、怎么判断索引

使用explain关键字

15、redis的应用

前端传递请求给后台,查询数据时首先查询redis中是否存在,如果没有再查询数据库,查询到数据之后将数据存到redis中,下次查询时将可以直接查询redis中的数据。


16、@data

Data注解是lombok提供的,可以为类提供get和set方法, 还有 equals()、hashCode()、toString() 、isXxx()等方法


17、for updte

如果遇到存在高并发并且对于数据的准确性很有要求的场景,是需要了解和使用for update的。比如涉及到金钱、库存等。一般这些操作都是很长一串并且是开启事务的。如果库存刚开始读的时候是1,而立马另一个进程进行了update将库存更新为0了,而事务还没有结束,会将错的数据一直执行下去,就会有问题。所以需要for upate 进行数据加锁防止高并发时候数据出错。

使用方法:select * from table  where xxx  for update.

注意:for update 仅适用于InnoDB,并且必须开启事务,在begin与commit之间才生效。

18、mybatis中的$和#

1、在 MyBatis 中提供了两种方式读取参数的内容到SQL语句中,分别是:

(1)#{参数名} :实体类对象或则 Map 集合读取内容

(2)${参数名} :实体类对象或则 Map 集合读取内容

2、两者的区别:

(1)#{} : 采用预编译方式,可以防止 SQL 注入

(2)${}: 采用直接赋值方式,无法阻止 SQL 注入攻击

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值