好未来暑期实习一面
本文最后更新于30 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
  1. java基本数据类型:八种+包装
  2. float和double哪个表示精度更大一点?默认精度double更高,但底层表示分为符号位,尾数和基数,可能损失精度

回答正确,但术语不准确,建议这样说:

  • double 精度更高,64 位(1 + 11 + 52),比 float 的 32 位(1 + 8 + 23) 更精确。
  • 浮点数采用 IEEE 754 标准,由:
    • 1 位符号位(Sign)
    • 若干位阶码(Exponent)
    • 若干位尾数(Mantissa,Significand)
  1. 如果不损失精度应该用什么?Bigdecimal或者不用小数,转换为int
    • 使用 BigDecimal(String) 构造函数(避免使用 double 构造)。
    • 或将价格/金额类字段 统一扩大倍数(如:×100)存整数,避免小数误差。
  2. 什么是面向对象?封装(对扩展开放对修改关闭)继承(子类父类)多态(子类重写重载)
    • 封装:隐藏实现细节,仅暴露接口。通过 private + public getter/setter 实现数据访问控制。
    • 继承:子类继承父类,复用代码。
    • 多态
      • 编译时(重载 Overload)
      • 运行时(重写 Override,通过父类引用调用子类方法)
  3. 重载重写区别?重载同一类,方法名相同形参不同,重写指子类重写父类方法,方法名形参返回值均需与父类保持一致(子类访问控制权限不能更严格,异常不能更宽泛。)
  4. 一个子类可以有多个父类吗?不可以 java不支持多继承,会出现菱形继承问题,可以利用接口实现多继承

一文学会Java 8 菱形继承问题_java菱形继承-CSDN博客

  1. 接口和抽象类区别?抽象类可以定义抽象和非抽象方法,接口只能定义抽象方法,但后面支持默认和私有方法,两者区别主要是使用思想不同
  1. final修饰类和方法的区别?修饰类表示无法继承(如String类),修饰方法不可改写
  2. hashmap的工作原理:底层数组+链表(1.7前),数组+链表+红黑树(1.8),哈希函数计算hashcode(高16位与低16位异或)拿到下标,判断数组第一个节点是否为空,为空直接插入,是链表直接插到末尾,过程中发现重复元素则覆盖,红黑树则执行旋转等操作,最后判断是否需要扩容,红黑树和链表是否需转换
  3. hashmap是否有线程安全问题?会有,1.7用头插法,多线程会出现死锁,1.8用尾插法解决,但仍不安全,可以用concurrenthashmap保证线程安全
  4. concurrenthashmap怎么保证线程安全?分段加锁,后续版本引入synchronized
  1. volitale修饰关键字的效果?保证变量的可见性,一次修改对其他线程可见

✅ 正确。标准说法:

  • 保证 可见性(写线程修改立刻对其他线程可见)
  • 禁止指令重排序(配合 happens-before 语义)
  • 不保证原子性。
  1. volitale的原理?不了解,可能用了反射机制

✳️ 正确描述:

  • 使用 内存屏障(Memory Barrier) 实现,依赖 CPU 与 JVM 指令。
  • 编译器在 volatile 写入后插入 Store Barrier,在读取前插入 Load Barrier。
  1. 创建线程的方式?继承thread类,实现runnable接口,实现callable接口,利用线程池创建,但底层都是thread的start方法
  2. 实现runnable接口,实现callable接口的区别?runnable传入的是task,callable可以拿到执行的返回值,多用于异步
  3. thread的start和run方法区别?start会调用start0方法向os请求线程创建资源,run就是在当前线程创建任务
  4. java中的锁用过哪些?synchronized和redis
  5. synchronizd和可重入锁的区别?synchronized无法可重入,可重入锁内维护线程id和value,每次获取或释放锁修改value值
    • 二者 都支持重入
    • ReentrantLock 比 synchronized 更灵活(公平锁、超时、中断、tryLock)。
    • synchronized 是 JVM 内置,基于对象头 Monitor。
    • ReentrantLock 是 JUC 显式锁。
  6. 可重入锁是公平锁吗?忘了,是非公平锁吧
  1. 创建线程池的参数?七个,略
  2. 提交任务,但线程数满了怎么办?核心线程数满了后,有新任务,此时创建新线程,如果达到最大线程数就把任务放到queue里,queue也满了就触发policy,默认是abortpolicy,返回线程池无法处理的异常,其他还有callerruns,discard,discardOldest等

标准答案(以最常用的“有界队列”配置为例)

提交流程(ThreadPoolExecutor + 有界队列)

  1. **先用核心线程(corePoolSize)**处理任务;
  1. 核心线程都忙了,任务进队列(workQueue)
  2. 队列满了,再创建非核心线程,直到最大线程数(maximumPoolSize)
  3. 还放不下,触发 拒绝策略(RejectedExecutionHandler)。默认 AbortPolicy 抛异常。其它还有:
    • CallerRunsPolicy
    • DiscardPolicy
    • DiscardOldestPolicy

例外:像 newCachedThreadPool() 使用 SynchronousQueue(不存任务),会直接从核心 0 开始一路建线程到最大

  1. mysql实现分页查询用哪个关键字?Limit 如limit by (50,10)
  1. 你说的”50″是什么含义?是页码吗?不是页码,是指字段,是表项
   
  1. mysql中的char和varchar区别?char定长,varchar不确定字长
  2. 那是不是说可以不用char全部用varchar?不是,可能会和JDBC的设定冲突

标准答案

  • 不是。固定长度、高并发更新较少的字段(如状态码、固定长度哈希)可用 CHAR,减少碎片、提升性能。
  • 大部分业务字段仍推荐 VARCHAR,节省空间
  1. mysql中聚簇索引和非聚簇索引是什么?叶子节点存储每行数据/只存储主键数据
  2. mysql什么情况下索引失效不走索引?违反最左匹配原则/模糊查询以“%”开头/mysql语句用双引号不用单引号
  3. 什么是索引匹配原则?比如索引是(a,b,c),查询用(b,c)或者(C),这种就不满足匹配原则

标准答案

  • 组合索引 (a, b, c),必须从最左列 a 开始连续使用:
    • 能用:a,(a,b),(a,b,c)
    • 不能直接用:b、(b,c)、c
  • 范围查询会截断:where a = ? and b > ? and c = ?,c 列无法走索引。
  1. 那如果是where(b =1 ,a =2)这种会走索引吗?会走,mysql在server层会优化语句,还是会走索引的

优化器会对等值条件重排,仍可命中 (a,b,c) 索引的前两列。

  1. 事务四大特性?ACID
  2. 隔离级别几种?读未提交、读已提交、可重复读、串行化
  3. 什么是幻读?事务A读某行表单读不到,后面由于其他事务操作又读到了
    • 同一个事务里,两次按相同条件查询,第二次出现了“新增/删除的行”(行数变化),这叫幻读
    • 例:select * from order where price > 100,第二次多了新插入的行。
  1. 不可重复读是什么?某一事物前后两次读到的数据不一致
    • 同一事务中,同一行数据两次读取内容不同(值被其他事务修改了)。
    • 区别:不可重复读关注“同一行值变了”幻读关注“满足条件的行数变了”
  1. 既然你说不可重复读和幻读都是读到的数据不一致,那么他们两个的区别在哪?不知道
    • 不可重复读:同一行内容被改,不同。
    • 幻读:满足条件的行的数量不同(新增/删除行)。
    • InnoDB 的 RR 通过 MVCC(快照读)解决不可重复读,通过 Next-Key Lock(当前读 + 间隙锁)避免幻读
  1. 事务隔离机制MVCC?隐藏字段+undolog+readview(决定当前事务可见哪些版本)
  2. readview是什么时候生成的?不知道
    • RC(读已提交)每条语句执行时生成新的 ReadView。
    • RR(可重复读)事务第一次执行快照读时生成,并且整个事务内复用该 ReadView(保证可重复读)。
  3. spring的注解有哪些?@controller,@component,@scope@order@configuration等等
  4. @RestController注解用过吗?封装了@Request注解,对前端请求封装的数据进行识别
  5. 如果定义的接口路径(sku/id=1)上有个变量,方法怎么用注解接收?@Pathvariable接收,指定valueid
 
  1. 订单超时自动取消实现过吗,说说思路?redis缓存设定TTL,如果过期了查不到了就把订单状态改成取消
  2. 你的意思是数据库状态依赖用户主动查询,不查询就永远过期?可能得用到定时任务吧
  3. 了解过延迟队列吗,其实这个可以用延迟队列做?可能用mq实现吧,具体不了解
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇