ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

面试题day21

2022-08-03 23:00:36  阅读:133  来源: 互联网

标签:面试题 hash CAS 位置 day21 链表 线程 key


京东

  • 简单自我介绍

  • 参加过社团活动吗?

  • 讲一下什么是线程池

    一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。

    池化技术:降低资源消耗、提高响应速度、便于管理

  • spring中的ioc你怎么理解,aop呢

    Spring IOC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。

    Spring AOP 就是基于动态代理的。常用于计算接口运算时间、记录日志。

  • 知道netty吗 讲一下一个设计模式吧 reactor模式

    反应器设计模式

  • 说了下单例模式和迭代器模式

    • 满足要求
      • 构造私有、变量私有静态、方法公有静态
    • 懒汉式和饿汉式
      • 饿汉式,在装载类时就完成实例化
      • 懒汉式,在调用方法时完成实例化
    • 双重校验锁
      • 第一重校验在Sychronized外,提高性能,避免不必要的加锁
      • 第二重校验在Sychronized内,防止多次创建,可能多个线程通过第一重校验,创建实例前不加第二重校验的话,可能会线程安全的创建两次实例
    • volatile/final
      • 修饰成员变量,防止指令重排
    • 枚举
      • 自动支持序列化机制,防止反序列化重新创建新的对象,防止反射破坏
  • 什么是原子性(atomicity)

    要么一起成功(A帐户成功减少一块石头,同时B得到一块石头),要么一起失败(A回到原来状态,B也回到原来状态)的操作叫原子性操作。

  • 有一条mysql查询很慢,你有什么优化手段,请讲一下

    • 多表关联最多2张
    • 使用left join或right join代替not in和exist
    • 不使用外键和触发器
    • 避免索引失效
  • 说一下你从本科到研究生收获最大的一件事是什么

  • 说下你未来3-5年的职业计划

  • 反问交流环节

小米

2022校招 java后端一面凉经

  • 自我介绍 介绍一个你做的相对较好一点的项目

  • 说说索引的结构,为什么最左前缀原则就快了,原因是什么你尝试过了解吗

  • 为什么用b+树不用红黑树,用红黑树时间复杂度是多少

    O(logn)

  • 事务的特性哪几点 分别介绍一下

    acid 原子性(undolog) 隔离性(mvcc+锁) 持久性(redolog) 一致性

  • 保证原子性mysql表里面是怎么实现的

    undolog

  • 隔离级别有哪几种说一下,默认是哪一种

    ru rc rr s

    • 默认隔离级别为RR
      • 原因
        • RC隔离级别下的基于binlog的主从复制会发生问题
      • 解决方案
        • 使用RR隔离级别下的间隙锁
        • 切换RC隔离级别的binlog日志模式为row
    • 互联网项目隔离级别为RC
      • 在RR隔离级别下,存在间隙锁,易导致出现死锁
      • 在RR隔离级别下,条件列未命中索引会锁表;而在RC隔离级别下,只锁行。
      • 在RC隔离级别下,半一致性读(semi-consistent)特性增加了update操作的并发性。
  • 封锁粒度,封锁类型有哪些

    行级锁、表级锁

    排它锁、共享锁

    记录锁、间隙锁、临建锁

  • 什么是脏读,什么是不可重复读

    其他事务未提交数据

    其他事务修改

  • 讲一下java的容器有哪些

    list arraylist、linkedlist

    set hashset、treeset

    map hashmap、treemap

  • arraylist和linkedlist有什么区别吗

    • ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表结构。
    • 对于随机访问的get和set方法,ArrayList要优于LinkedList,因为LinkedList要移动指针。
    • 对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
    • 多读少写 多写少读
  • map里面的hashmap了解过吗 说下底层结构

    链表散列+红黑树

    • 扰动函数
      • (h = key.hashCode()) ^ (h >>> 16); 低16位与高16位做异或操作^,减少hash碰撞
    • 扩容
      • 链表引发
        • 链表长度大于8,判断是否转为红黑树
          • 数组大小大于64,转红黑树
          • 数组大小小于64,扩容
      • 数组引发
        • 数组元素大于容量与扩容因子之积,扩容
    • put
      • HashMap 通过 key 的 hashCode 经过 hash() 处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置
        • 如果当前位置无元素的话直接放在当前位置
        • 如果当前位置有元素的话,通过key的equals方法进行判断,如果返回true的话直接更新当前位置,如果false的话需遍历链表,存在即覆盖,否则新增,此时链表时间复杂度为O(n)
    • get
      • HashMap 通过 key 的 hashCode 经过 hash() 处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置
        • 如果该位置无链表的话直接返回
        • 如果该位置有链表的话需遍历链表,然后通过key对象的equals方法逐一比对查找
  • hahsmap默认容量是多少,达到多少会扩容

  • 多线程的hashmap冲突了怎么办,怎么解决

    ConcurrentHashMap/Collections.synchronizedMap(map)

  • ConcurrentHashMap了解吗,说一下

    • 原理

      • 通过部分锁定+CAS算法来进行实现线程安全的
    • 初始化

      • 通过自旋和 CAS 初始化操作,扩容阈值0.75
    • put

      • 先计算哈希值
      • 再确定map是否初始化
      • 插入数据
        • 数组插入,cas
        • 链表插入,先扩容,加锁
    • get

      • get方法是非阻塞,无锁的。重写Node类,通过volatile修饰next来实现每次获取都是最新设置的值
  • ReentranLock了解吗

    • 核心思想
      • 如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制 AQS 是用 CLH 队列锁实现的,即将暂时获取不到锁的线程加入到队列中。
    • 操作流程
      • AQS 使用一个 int 成员变量来表示同步状态,通过内置的 FIFO 队列来完成获取资源线程的排队工作。AQS 使用 CAS 对该同步状态进行原子操作实现对其值的修改。
    • 公平锁和非公平锁
      • 非公平锁在调用 lock 后,首先就会调用 CAS 进行一次抢锁,如果这个时候恰巧锁没有被占用,那么直接就获取到锁返回了。
      • 非公平锁在 CAS 失败后,和公平锁一样都会进入到 tryAcquire 方法,在 tryAcquire 方法中,如果发现锁这个时候被释放了(state == 0),非公平锁会直接 CAS 抢锁,但是公平锁会判断等待队列是否有线程处于等待状态,如果有则不去抢锁,乖乖排到后面。
    • 条件队列
      • AQS中实现ConditionObject,它实现了Condition接口,实现一个绑定在锁上的条件队列Condition,替代了 Object 监视器方法
    • Reentrantlock
      • 具体实现了tryAcquire、nofairTryAcquire、tryRelease
  • 你刚刚提到jdk1.8里面改进成了CAS 说一下你的理解,CAS失败了怎么办

    LongAdder类,尝试使用分段CAS以及自动分段迁移的方式来大幅度替身多线程高并发执行CAS的性能

  • synchronized了解吗,底层怎么实现的说一下

    自旋、偏向锁、轻量级锁、重量级锁

    对象头存储信息不同

    • 加锁方式

      • 同步代码块(monitorenter和monitorexit)
      • 同步方法(ACC_SYNCHRONIZED)
    • 操作流程

      • 首先会进入 EntryList 集合,当线程获取到对象的monitor后,进入 _Owner区域并把monitor中的owner变量设置为当前线程,同时monitor中的计数器count加1;
      • 若线程调用 wait() 方法,将释放当前持有的monitor,owner变量恢复为null,count自减1,同时该线程进入 WaitSet集合中等待被唤醒;
      • 若当前线程执行完毕,也将释放monitor(锁)并复位count的值,以便其他线程进入获取monitor(锁);
  • 你刚说道volatile,讲一下它的实现原理

    内存屏障实现可见性和防止指令重排

  • sql注入了解吗

  • 你的项目里面用到了mybatis,他是怎么防止sql注入的

    {} 预编译

  • tcp三次握手四次挥手说一下

    seq x

    ack x+1 seq y

    ack y+1

  • linux平时有了解过吗,用过哪些命令

    • chmod 授权
    • ps -ef | grep 查看进程
    • kill -9 杀死进程
    • tail -f 实时读取日志
    • netstat -anp | grep 查看端口号
    • ping 测试地址
    • mkdir 创建文件夹
    • rmdir 删除文件夹
    • touch 创建文件
    • rm 删除文件
    • mv 移除文件
    • cp 复制文件
    • cat 查看文件
  • redis讲一下为什么单线程还那么快呢

    • 纯内存操作
    • 使用IO多路复用技术
    • 非CPU密集型任务
    • 单线程的优势
  • 判断链表是否有环 做完了讲一下思路

    hashset缓存、快慢指针

  • 反问环节

网易有道

java一二三面

  • 自我介绍,问项目相关。没有问具体细节,问的是涉及到的技术栈方法的基本知识。

  • hashmap的put过程

    HashMap 通过 key 的 hashCode 经过 hash() 处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置

    • 如果当前位置无元素的话直接放在当前位置
    • 如果当前位置有元素的话,通过key的equals方法进行判断,如果返回true的话直接更新当前位置,如果false的话需遍历链表,存在即覆盖,否则新增,此时链表时间复杂度为O(n)
  • hashcode和equals关系

    equals=>hashcode

  • jvm中怎么判断一个对象可以回收,可达性分析中的安全点,gc root可以是什么

    引用计数法、可达性分析

    安全点是在程序执行期间的所有GC Root已知并且所有堆对象的内容一致的点。

    本地方法栈、虚拟机栈、静态变量、常量

  • 垃圾收集器

  • spring的启动流程

    • 初始化Spring容器,注册内置的BeanPostProcessor的BeanDefinition到容器中
    • 将配置类的BeanDefinition注册到容器中
    • 调用refresh()方法刷新容器
  • bean的创建过程

    • 推断构造方法
    • 依赖注入
    • 初始化前
    • 初始化
    • 初始化后
  • 算法:二叉树的先序遍历,非递归版

  • 设计模式相关,单例模式静态内部类的实现

  • linux的文件有哪些属性

    第 0 位确定文件类型
    第 1-3 位确定属主(该文件的所有者)拥有该文件的权限
    第 4-6 位确定属组(所有者的同组用户)拥有该文件的权限
    第 7-9 位确定其他用户拥有该文件的权限

泰隆银行

Java一面面经

  • 秒杀系统的设计

  • SpringBoot和SpringCloud的区别

  • 微服务之间的调用方式,如果保证调用的正确性

  • HashMap和HashTable之间的区别

    线程安全、空值、扩容、初始值

  • hashMap如何获取一个值

    HashMap 通过 key 的 hashCode 经过 hash() 处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置

    • 如果该位置无链表的话直接返回
    • 如果该位置有链表的话需遍历链表,然后通过key对象的equals方法逐一比对查找
  • HashMap如何存值:put()方法

  • LinkedHashMap

    有序的hashmap

  • 有什么想问的?

标签:面试题,hash,CAS,位置,day21,链表,线程,key
来源: https://www.cnblogs.com/faetbwac/p/16549031.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有