面试题笔记

网上面试题总结:
1.StringBuffer,StringBuilder,String 的区别?
2.说说HashMap。
3.为什么要设计出迭代器?
4.Java单机并发控制?
5.多线程创建的方式及其区别?
6.怎么防止前端的表单重复的提交?
7.往MYSQL中导入1000万条数据该怎么导入?
解答:
1.分别从线程安全,执行效率,存储空间,使用场景来作答
1.线程安全,这是很基础的,String和StringBuilder是线程不安全的,然后StringBuffer是线程安全的。
2.执行效率:StringBuilder>StringBuffer>String .
3.存储空间:String的值是不能变的,每次对String的操作都会导致新的内存地址(新的String对象)的产生。效率低然后内存消耗大,可能会导致GC溢出。其他两个都是可变的。
4.使用场景:操作少量的数据使用String。
单线程操作字符串缓冲区下的大量数据,使用StringBuilder。
多线程操作字符串缓冲区下的大量数据时,使用StringBUffer。
2.关于HashMap你要说的。
1.存储的结构,(JDK8)内部默认的存储结构:数组+链表+红黑树。
2.默认容量和默认的转载因子:默认容量为16,默认装载因子为0.75.
3.key和value都是泛型,key可以为null,放在table[0]。
4.hashcode是来计算存储信息的数组下标,equals()用于判断某一个下标中当前键和该链表下的键是否相同。
3.迭代器本身是一种设计模式,是为了解决为不同的集合类提供的一种同一的遍历操作接口(遍历和集合本身分离了)。
Iterable:实现这个接口的集合对象支持迭代,是可以迭代的。实现了这个可以配合foreach使用。
Iterator:迭代器,提供迭代机制的对象,具体如何迭代是这个Iterator接口规范的。
迭代出来的元素都是原来集合元素的拷贝。

    Java集合中保存的元素实质是对象的引用,而非对象本身。

    迭代出的对象也是引用的拷贝,结果还是引用。那么如果集合中保存的元素是可变类型的,那么可以通过迭代出的元素修改原集合中的对象。

4.使用同步方法synchronized,使用同步块synchronized,重入锁

5.多线程
1.继承Thread类,创建线程。
定义其子类,并重写run()方法。该run()方法里面的方法体就是该线程的执行体。创建了该子类的实例,即创建了该线程对象。调用该线程start()方法就是调用了线程。
2.实现runnable接口,创建线程。
定义实现runnable接口的实现类,并且重写run()方法。该方法体就是线程的执行体。创建该类的实例对象,并且通过该实例的做为Thread的target来创建Thread对象,该Thread才是线程对象,同样调用start()表示线程开始。
3.实现callable接口通过Future Task包装器来创建Thread线程。
定义Callable的实现类,重写call()方法,该方法时线程执行体,有返回值。创建该类的对象,在通过FutureTask来包装Callable类。FutureTask类中封装了Callable对象的call()返回值。使用FutureTask做为Thread的target来创建Thread对象从而创建并启动线程。调FutureTask的get()来获取线程的返回值。
区别:
采用实现接口的方式,还可以继承别的类。在这样方式下,多个线程共享一个target,适合多个线程处理一份资源的情况。但是编程稍微复杂,如果要访问当前线程,则必须使用Thread.currentThread()方法。
使用继承类的方法的话,编写简单,访问线程也只需要this便可以,十分便捷,但是线程类不能再继承别的类了(单一继承原则)。
6.防止表单的重复提交。
1.提交按钮之后,前端要屏蔽提交按钮。
2.前端产生唯一的id,后端通过该唯一索引。
3.利用session防止重复提交。
7.SQL操作
1.一条sql语句中插入多条数据
2.在事物中添加处理(分批处理),不要插入一条数据提交一次,因为在进行一个insert操作时,MySQL内部会建立一个事务,在事务内才能进行真正的插入处理操作,这样可以减少创建事务的消耗,让插入在执行后进行提交操作。
3.数据有序插入,减少索引的维护压力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值