小米一面(2023

您所在的位置:网站首页 小米的wifi信号 小米一面(2023

小米一面(2023

2023-06-29 23:06| 来源: 网络整理| 查看: 265

一、Object类里面的方法有哪些

①hashcode方法 ②equals方法 ③wait方法 ④notify方法 ⑤notifyAll方法 ⑥clone方法 ⑦toString方法 ⑧finalize方法 ⑨getClass方法

二、hashcode()和equals()的作用

从hashMap入手,哈希码的值和哈希冲突,equals的对象比较等。

三、面向对象的特性

封装、继承、多态的三大特性。高内聚,低耦合。

四、四种引用

强引用,软引用,弱引用、虚引用

五、普通内部类和静态内部类的区别

①静态内部类相对与外部类是独立存在的,普通内部类作为外部类一个成员而存在。 ②静态内部类中无法直接访问外部类中的变量、方法。如果要访问的话,必须要new一个外部类的对象,普通内部类中可以直接访问外部类属性,调用外部类的方法。

六、虚拟机JVM的内存模型结构

线程私有的虚拟机栈、程序计数器、本地方法栈。线程公有的方法区、堆区。然后就是JVM的堆区的分代思想。

七、双亲委派机制

启动类加载器—>扩展类加载器—>应用类加载器。保护核心API。 在这里插入图片描述

八、synchronized的原理

对象头的Mark Word记录着32bit信息(哈希码、分代年龄、偏向锁等记录),线程第一次占有的时候,栈空间有一个Lock Recod会用CAS交换对象头数据。当有线程来抢占的时候就会关联到Minitor(含有WaitSet/EntryList/Owner),此时就会加入到队列中。如下图所示。synchronized(xxx.Class){} 在这里插入图片描述 在这里插入图片描述

九、ReentrantLock的原理

①ReentrantLock是实现了接口Lock,基于AQS同步器的实现。 ②ReentrantLock有公平锁FairSync和非公平锁NonFairSync,默认非公平锁。 ③公平锁的实现就是谁等待时间最长,谁就先获取锁 ④非公平锁就是随机获取的过程,谁运气好,cpu时间片轮询到哪个线程,哪个线程就能获取锁 ⑤CAS操作抢占锁,抢占成功则修改锁的状态为1,将线程信息记录到锁当中,返回state=1。 ⑥抢占不成功,tryAcquire获取锁资源,获取成功直接返回,获取不成功,新建一个检点插入到当前AQS队列的尾部,acquireQueued(node)表示唤醒AQS队列中的节点再次去获取锁。 ⑦非公平锁维护一个state值,当为0的时候表示无锁,否则就是有锁,将其它线程放入队列中,当前面持有锁的对象释放后,后面的等待线程可以抢占锁。 在这里插入图片描述 在这里插入图片描述

十、常见的同步器和线程池

同步器: ①同步器有CountDownLatch、Semaphore、CyclicBarrier ②CountDownLatch维护一个state值可以大于1,若维护的值为n,每次线程释放都会调用countDown()方法将state值减一,减法计数器,当state减到0后又重新放入n个线程。 ③CyclicBarrier和CountDownLatch相似。CountDownLatch : 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行。CyclicBarrier : N个线程相互等待,任何一个线程完成之前,所有的线程都必须等待。 ④Semaphore所维护的许可证数量就是允许访问共享资源的最大线程数量。Semaphore的基本使用场景是限制一定数量的线程能够去执行。举例说明:张三、李四和王五和赵六4个人一起去饭店吃饭,不过在特殊时期洗手很重要,饭前洗手也是必须的,可是饭店只有2个洗手池,洗手池就是不能被同时使用的公共资源,这种场景就可以用到Semaphore。当已经有两个人在洗手的时候,其他人就被阻塞,直到有人洗手完毕才是开始洗手。 线程池: ①降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 ②提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 ③提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。 ④线程常见的构造器和参数理解如下所示

//corePoolSize 核心线程数目 (最多保留的线程数) //maximumPoolSize 最大线程数目 //keepAliveTime 生存时间 - 针对救急线程 //unit 时间单位 - 针对救急线程 //workQueue 阻塞队列 //threadFactory 线程工厂 - 可以为线程创建时起个好名字 //handler 拒绝策略 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)

在这里插入图片描述 在这里插入图片描述

十一、实现双向链表的插入和删除(算法题)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3