Java面试札记

 在最深的夜里,即使是你的影子也会离你而去。

背景:愿某人在中秋节之前吃上大厂月饼!!!@CDZ

1、Java的八种基本数据类型?

整型:byte、int、short、long;

浮点型:float、double;

布尔类型:boolean;

字符型:char。

2、什么是重入锁?

java.util.concurrent.ReentrantLock,这个是JDK1.5添加的一种颗粒度更小的锁,它完全可以替代synchronized关键字来实现它的所有功能,而且ReentrantLock锁的灵活度要远远大于synchronized关键字。

3、Controller是单例还是多例?

Spring管理的Controller,即加入@Controller注入的类,默认是单例的,因此建议:

1、不要在Controller中定义成员变量;

2、若必须要在Controller中定义一个非静态成员变量,则通过注解@Scope("prototype"),将其设置为多例模式;

4、StringBuffer和StringBuilder的区别?

StringBuffer是线程同步安全的,StringBuilder是非线程安全的一般用于单线程;

5、为什么要加双重锁?

1、为什么要进行第一次判空?

单例模式只有第一次执行create()方法的时候才会走synchronized中的代码,后面再次访问的时候直接返回single对象;如果说我们没有第一次校验,每一个线程都要走sychronized中的代码,

而每一次线程都要去拿到同步锁才能执行;在多线程情况下,每一个线程要拿到single对象都要排队等待同步锁释放,因此第一次校验就是为了提高程序的效率。

2、为什么要进行第二次判空?

举个例子:假如现在没有第二次校验,线程A执行带第一次校验那里,它判断到single==null,此时它的资源被线程B抢占了,B执行程序,进入同步代码块创建对象,然后释放同步锁,此时线程

A又拿到了资源,也拿到了同步锁,然后执行同步代码块,因为之前线程A它判断到single==null,因此它会直接创建新的对象,所以就违反了我们设计的最终目的。

6、5L的桶和3L的桶如何量出4L的水?

把3L的桶装满水,然后全部倒入5L桶中,此时5L桶中有3L水;再把3L桶装满水,然后倒入装有3L水的5L桶中直至满,此时3L桶中有1L水;把5L桶中的水倒完,再把3L桶中剩余的1L水倒入

5L桶中,此时5L桶中有1L水;再把3L桶装满水,全部倒入装有1L水的5L桶中,此时5L桶中有4L水。

7、如何给一条数据库记录加锁?

1、共享锁:select * from table_name where ...... lock in share mode;

2、排他锁:select * from emp where empid > 100 for update;

加锁后其他人不可操作,直到加锁用户解锁,用commit或rollback解锁。

8、如何捕获线程异常?

方式1(setUncaughtExceptionHandler):

Thread t = new Thread(new ExceptionThread());

t.setUncaughtExceptionHandler();

方式2:

使用Executors创建线程时,还可以在ThreadFactory中设置:

t.setUncaughtExceptionHandler(new MyUncheckedExceptionHandler());

该方法还需要提交线程异常:exec.execute(new ExceptionThread());

方式3:

利用线程池提交线程时返回的Future引用:

Integer result = future.get();

9、JDK1.8的日期类有哪些?

获取当前时间:LocalDateTime、LocalTime、LocalDate

LocalDateTime d0 = LocalDateTime.now();
System.out.println(DataConvertUtil.localDateTimeToStr(d0,"yyyy-MM-dd HH:mm:ss"));

10、Redis集群策略

Redis包含三种集群策略:主从复制、哨兵、集群;

主从复制特点:

主数据库负责读写操作,当读写操作导致数据变化时会自动将数据同步给从数据库;从数据库一般是只读的,并且接受主数据库同步过来的数据;一个master可以拥有多个slave,但是一个slave只能对应一个master。

主从复制工作机制:

当slave启动后,主动向master发送SYNC命令,然后将保存的快照文件和缓存的命令发送给slave,slave接收到快照文件和命令后加载快照文件和缓存的执行命令;复制初始化后,master每次接收到的写命令都会同步发送给slave,保证数据库一致性。

主从复制配置:

Redis默认主数据库,所以master无需配置,只需要修改slave的配置即可;在slave中设置需要连接的master的ip端口:slaveof 10.58.166.207 6379。

哨兵:

哨兵的作用是监控redis系统的运行状况,其功能如下:

1、master出现故障时,自动将slave转化为master;

2、多个哨兵可以监控同一个redis;

3、多哨兵配置时,哨兵之间会自动监控。

集群:

使用Redis集群,只需要将每个数据库节点的cluster-enable配置打卡即可;每个集群中至少需要三个主数据库才能正常运行。

11、快排思想?

快速排序是对冒泡排序的一种改进,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小。

12、桶排序算法?

桶排序是常见排序算法中速度最快的一种,假设有一个大小为n的数组int arr[n] ,遍历数组找到最大值M,然后申请一个大小为M+1的数组int m[M+1],刚开始的时候将m[0]~m[M+1]都值都初始化为0,然后遍历数组n,把对应的arr[n]填入日子m[M+1]都对应位置,如果有重复的元素则在此位置的基础上+1。

13、MySQL的四种读写机制?

1、未提交读 Read Uncommitted:允许脏读,也就是可能读取到其它会话中未提交事务修改的内容;

2、提交读 Read Committed:只能读取到已经提交了的数据;(不重复读,Oracle数据库默认该级别)

3、可重复读 Repeated Read:在同一个事务内的查询都是事务开始一刻一致的,InnoDB默认级别;(MySQL数据库默认该级别)

4、串行读 Serializeble:完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞,级别最高。

14、使用什么方法替代代码中的if-else?

1、使用工厂模式去耦合;

2、尽可能抽象方法、优化代码逻辑,减少判断方法;

3、从业务逻辑上优化减少if-else或用switch。

15、Linux内部命令和外部命令的区别?

内外部命令的功能基本相同,但存在的位置有差异,可以通过type来查看是内部命令还是外建命令。

图.内部命令/外部命令

内部命令:

内部命令是shell程序的一部分命令,包含一些简单的Linux系统命令,内部命令是在bashy源码中,其执行速度通常比外部命令要快;

外部命令:

每个外部命令对应系统中的一个文件,外部命令不包含在shell中,但是其命令执行过程是由shell程序控制的,如管理外部命令执行的路径查找、加载存放和控制命令的执行,外部命令通常存放在/bin、/usr/sbin目录下。

16、JVM算法?

三种算法:标记-清除算法、复制算法、标记整理算法;

标记清除算法:

采用从根集合进行扫描,对存活的对象进行标记,标记完毕后再扫描整个空间中未被标记的对象,并对其进行直接回收;该算法不需要进行对象的移动,并且仅对不存活的对象进行处理,在存活的对象较多的情况下极为高效;但由于该算法只回收不存活的对象,并没有对存活的对象进行整理,因此会导致内存碎片。

复制算法:

将内存划为两个分区,使用此算法时,所有动态分配的对象只能分配其中的一个区间(活动区间),而另外一个区间则是空闲区间;其采用从根集合扫描,将存活的对象复制到空闲区间,当扫描

完毕活动区间后,会将活动区间一次性回收,此时原本的空闲区间变成了活动区间,下次GC的时候又会重复刚才的操作,如此循环;但是,此方法需要克服50%内存的浪费。

标记整理算法:

采用标记-清除算法一样的方式进行对象的标记、清除,但在回收不存活的对象占用的空间后,该算法会将所有存活的对象往左端空闲区间移动,并更新对应的指针,其是在标记-清除算法之上又

进行了对象的移动排序整理,因此成本更高,但也解决了内存碎片的问题。

17、HashMap简单介绍下?

HashMap是用于存储key-value键值对的集合,它是根据键的hashCode值存储数据,可以直接定位到它的值,所以具有很快的访问速度,是非线程安全的;从整体结构上看HashMap是由数组+链表+红黑树实现的。(简单讲下get、put、remove和扩容,扩容为原数组大小两倍的新数组,新数组的索引位置要么在原位置不变,要么是原位置+旧数组长度)

18、常用设计模式?

单例模式、工厂模式、代理模式、观察者模式、装饰者模式、适配器模式、模版模式、策略模式、访问者模式。

 在最深的夜里,即使是你的影子也会离你而去。

Java面试札记的更多相关文章

  1. Java_面试札记

    Java_面试札记  为了不死,我愿献出生命 背景:记录下寄几和friend在2020年Java面试中遇到的problem. 1.MySQL索引结构? 基本上所有的索引都是B-Tree结构,还有一部分 ...

  2. JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结

    我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和 ...

  3. 转:最近5年133个Java面试问题列表

    最近5年133个Java面试问题列表 Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来 ...

  4. java面试宝典(蓝桥学院)

    Java面试宝典(蓝桥学院) 回答技巧 这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的学生在笔试/面试时更好地赢得好的结果.由于这套试题涉及的范围 ...

  5. JAVA面试精选【Java基础第一部分】

    这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对于那些正打算找工作JAVA软件开发工作的童 ...

  6. Java面试必备知识

    JAVA面试必备知识 第一,谈谈final, finally, finalize的区别. 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可 ...

  7. java面试和笔试大全 分类: 面试 2015-07-10 22:07 10人阅读 评论(0) 收藏

    2.String是最基本的数据类型吗? 基本数据类型包括byte.int.char.long.float.double.boolean和short. java.lang.String类是final类型 ...

  8. 近5年133个Java面试问题列表

    Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入. 在我 ...

  9. java 面试

        115个Java面试题和答案——终极列表(上) 本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的章节分为上下两篇,第一 ...

随机推荐

  1. [linux] 权限问题

    权限问题一直蒙蒙的,下面就是总结一下!(原文链接:http://www.cnblogs.com/chengJAVA/p/4319420.html) 指令名称:chmod 使用权限 : 所有使用者 使用 ...

  2. 嵌入式-01-LinuxC语言

    一.必备Linux命令和C语言基础 1.Linux环境搭建(在第一阶段有提及). 2.文件和目录相关命令(一) (1)Linux的文件系统结构 /bin./boot./dev./etc./home./ ...

  3. 通过 Swoole\Table 实现 Swoole 多进程数据共享

    第三方存储媒介 前面我们介绍了基于 Swoole 的 Process 及 Process\Pool 模块在 PHP 中实现多进程管理,但是多进程模式下进程间是相互隔离的,无法共享数据和变量,即便是通过 ...

  4. BI报表分析和数据可视化,推荐这三个开源工具!

    开源篇 一.Superset 1.技术架构:Python + Flask + React + Redux + SQLAlchemy 2.使用人群: (1)开发/分析人员做好看板,业务人员浏览看板数据 ...

  5. Java中基础类基础方法(学生类)(手机类)

    学生类: //这是我的学生类class Student { //定义变量 //姓名 String name; //null //年龄 int age; //0 //地址 String address; ...

  6. 高级数据结构---赫(哈)夫曼树及java代码实现

    我们经常会用到文件压缩,压缩之后文件会变小,便于传输,使用的时候又将其解压出来.为什么压缩之后会变小,而且压缩和解压也不会出错.赫夫曼编码和赫夫曼树了解一下. 赫夫曼树: 它是一种的叶子结点带有权重的 ...

  7. tp5--相对路径和绝对路径

    首先,我们要先明白相对路径和绝对路径的理论: 绝对路径:是从盘符开始的路径,形如C:\windows\system32\cmd.exe相对路径:是从当前路径开始的路径,假如当前路径为C:\window ...

  8. jQuery dataTables四种数据来源[转]

    2019独角兽企业重金招聘Python工程师标准>>> 四种数据来源 对于 dataTables 来说,支持四种表格数据来源. 最为基本的就是来源于网页,网页被浏览器解析为 DOM ...

  9. OSChina 清明节乱弹 ——准备好纸巾了看乱弹

    2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2017)请戳(这里) [今日歌曲] @亚麻仔 :分享 范忆堂 的歌曲<酡颜 (夏热版)> 同一个 ...

  10. 通过express框架为前端提供api(数据),妈妈再也不用担心后端不给我数据了~

    个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教! 首先,确保自己安装了express框架. 没有安装的同学可以参照下面这篇博 ...