3.16记一次失败面试

Dear 丶 2023-07-15 15:28 163阅读 0赞

1.Java的深克隆浅克隆区别

浅克隆是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象。

深克隆不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象。

参考资料:https://blog.csdn.net/lovezhaohaimig/article/details/80372233

2.隔离级别,事物特性

事务隔离级别共有几种?由低至高都是什么?
事务隔离级别共四种,隔离的程度由低至高就是:1)READ-UNCOMMITTED(读取未提交内容)级别 2)READ-COMMITTED(读取提交内容)级别 3)REPEATABLE-READ(可重读)级别 4)SERIERLIZED(串行化) 。
资料参考:https://www.cnblogs.com/xrq730/p/5087378.html

3.分布式锁是这么做的

单机的话:常见的诸如synchronize,lock,volatile,c.u.t包等等。

参考资料:https://www.cnblogs.com/shoshana-kong/p/9581557.html

4.aop应用

AOP,面向切面编程,就是把可重用的功能提取出来,然后将这些通用功能在合适的时候织入到应用程序中,比如事务管理、权限控制、日志记录、性能统计等。

参考资料:https://blog.csdn.net/weixin_37020977/article/details/81007286

5.线程生命周期(状态),线程的配置参数

新建(new),可运行(runnable),运行(running),阻塞(blocked)销毁(dead)

从源码中可以看出,线程池的构造函数有7个参数,分别是corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、threadFactory、handler。下面会对这7个参数一一解释。

一、corePoolSize 线程池核心线程大小

线程池中会维护一个最小的线程数量,即使这些线程处理空闲状态,他们也不会 被销毁,除非设置了allowCoreThreadTimeOut。这里的最小线程数量即是corePoolSize。

二、maximumPoolSize 线程池最大线程数量

一个任务被提交到线程池后,首先会缓存到工作队列(后面会介绍)中,如果工作队列满了,则会创建一个新线程,然后从工作队列中的取出一个任务交由新线程来处理,而将刚提交的任务放入工作队列。线程池不会无限制的去创建新线程,它会有一个最大线程数量的限制,这个数量即由maximunPoolSize来指定。

三、keepAliveTime 空闲线程存活时间

一个线程如果处于空闲状态,并且当前的线程数量大于corePoolSize,那么在指定时间后,这个空闲线程会被销毁,这里的指定时间由keepAliveTime来设定

四、unit 空间线程存活时间单位

keepAliveTime的计量单位

五、workQueue 工作队列

新任务被提交后,会先进入到此工作队列中,任务调度时再从队列中取出任务。jdk中提供了四种工作队列:

①ArrayBlockingQueue

基于数组的有界阻塞队列,按FIFO排序。新任务进来后,会放到该队列的队尾,有界的数组可以防止资源耗尽问题。当线程池中线程数量达到corePoolSize后,再有新任务进来,则会将任务放入该队列的队尾,等待被调度。如果队列已经是满的,则创建一个新线程,如果线程数量已经达到maxPoolSize,则会执行拒绝策略。

②LinkedBlockingQuene

基于链表的无界阻塞队列(其实最大容量为Interger.MAX),按照FIFO排序。由于该队列的近似无界性,当线程池中线程数量达到corePoolSize后,再有新任务进来,会一直存入该队列,而不会去创建新线程直到maxPoolSize,因此使用该工作队列时,参数maxPoolSize其实是不起作用的。

③SynchronousQuene

一个不缓存任务的阻塞队列,生产者放入一个任务必须等到消费者取出这个任务。也就是说新任务进来时,不会缓存,而是直接被调度执行该任务,如果没有可用线程,则创建新线程,如果线程数量达到maxPoolSize,则执行拒绝策略。

④PriorityBlockingQueue

具有优先级的无界阻塞队列,优先级通过参数Comparator实现。

六、threadFactory 线程工厂

创建一个新线程时使用的工厂,可以用来设定线程名、是否为daemon线程等等

七、handler 拒绝策略

当工作队列中的任务已到达最大限制,并且线程池中的线程数量也达到最大限制,这时如果有新任务提交进来,该如何处理呢。这里的拒绝策略,就是解决这个问题的,jdk中提供了4中拒绝策略:

①CallerRunsPolicy

该策略下,在调用者线程中直接执行被拒绝任务的run方法,除非线程池已经shutdown,则直接抛弃任务。

参考资料:https://blog.csdn.net/ye17186/article/details/89467919?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

7.hashmap 原理解释一下,底层结构。

什么时候会扩容:加载因子的系数小于等于1,意指 即当 元素个数 超过 容量长度*加载因子的系数 时,进行扩容。

继承map,非线程安全,可以储存null key 和null键,以键值对的形式存在,底层结构是,数组和链表结构

8.like模糊查询是否走索引 %在左在右的区别

1、模糊查询

  1. 后通配 走索引
  2. 前通配 走全表
  3. 2where条件用inor 不会走索引
  4. 索引的本质是平衡b+数,是为了方便查询的
  5. 平衡多路查找树
  6. B-Tree相比,B+Tree有以下不同点:
  • 每个节点的指针上限为2d而不是2d+1;
  • 内节点不存储data,只存储key;
  • 叶子节点不存储指针

    B+Tree比B-Tree更适合实现外存储索引结构

9.==和===的区别

简单来说: == 代表相同, ===代表严格相同

比较过程:

  双等号==:

  (1)如果两个值类型相同,再进行三个等号(===)的比较

  (2)如果两个值类型不同,也有可能相等,需根据以下规则进行类型转换在比较:

    1)如果一个是null,一个是undefined,那么相等

    2)如果一个是字符串,一个是数值,把字符串转换成数值之后再进行比较

  

  三等号===:

  (1)如果类型不同,就一定不相等

  (2)如果两个都是数值,并且是同一个值,那么相等;如果其中至少一个是NaN,那么不相等。(判断一个值是否是NaN,只能使用isNaN( ) 来判断)

  (3)如果两个都是字符串,每个位置的字符都一样,那么相等,否则不相等。

  (4)如果两个值都是true,或是false,那么相等

  (5)如果两个值都引用同一个对象或是函数,那么相等,否则不相等

  (6)如果两个值都是null,或是undefined,那么相等

发表评论

表情:
评论列表 (有 0 条评论,163人围观)

还没有评论,来说两句吧...

相关阅读

    相关 失败面试经历

    出来找实习工作也差不多半个月了,前后面试了几家公司,基本上都由失败告终 还误打误撞到几家培训机构 总结了这几次的面试情况: 一、 专业技能掌握太少,只会一些基础,而

    相关 3.16失败面试

    1.Java的深克隆浅克隆区别 浅克隆是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象。 深克隆不仅拷贝对象本身,而且拷贝对象包含的

    相关 社招面试

    自从2月份决定离职后,我就一直没有投简历,直到交接完手头工作后才开始投简历。而我又偏向于去深圳,所以打算先在上海投一些小公司练练手,积累一下面试经验,毕竟自己也没有参

    相关 面试经历

    都说大三下学期的后半段是收获的季节,是的,因为这个时候的计算机专业学生的技术基础,知识储备等都有些成熟,或者说,基本达到用人单位培养使用的标准。 于是乎,抱着试一试的心态

    相关 网易前端面试

    很幸运地能收到网易的面试通知,就毫不犹豫翘了课去面试了 hhhh~三点的面试,因为从来没去过那个中关村西北旺区,吃完饭早早就去了, 想象中那里应该是繁华的地方 hhhh,到了发

    相关 面试

        2019.7.16日  天气:暴热暴晒,撑着伞都顶不住...   今天去面试前端实习生,到公司后就直接开始写笔试题目,然后写完后,与面试官进行交谈,发现自己的一些不足,