阿里菜鸟java一面

是被捞起来的,今年秋招的第一场大厂面试,非常万幸没有手撕代码,但是表现得还是不好,主要是基础知识看的还是不够深入。

首先问了实际java学习时间。 如实回答只有最近几个月。

问了简历上小项目花费的时间。如实回答因为项目简单,主要是为了学习用的,实际只用了两周(实际上就用了一周)

然后就问多线程的知识。

java里有哪些保证多线程安全的方法。我回答的锁的机制,比如synchorinzed,reetranlock,还有threadlocal这些关键字。问synchorinzed,reetranlock区别,答一个是基于操作系统实现的,一个是jvm层次的,synchorinzed只能是非公平锁,reetranlock可以非公平可以公平,还有reetranlock需要手动释放锁,synchorinzed可以自动释放。还有synchorinzed没升级之前是重量级锁,会比lock更费时耗资源。

lock底层怎么实现的 没答上 提示了一下 答上是AQS,也没答出来更多

问synchorinzed底层原理 答了

synchorinzed在java自己有的类里面哪里用到过 说了hashtable还有synchorinzedhashmap

乐观锁和悲观锁 怎么实现的 只会答了乐观锁的概念 然后CAS是一般实现乐观锁的方式

reetranlock平时都叫什么(没底气的说了可重入锁 竟然还想改口说是读写锁 唉)然后问可重入锁的概念 举了一个递归的例子 又问了非递归的情况下呢 比如说先上锁 后面解锁 上锁次数大于解锁次数这个线程能否锁住这个资源 这里应该回答错了

CAS全称 忘了 讲了CAS的基本原理

线程池方面的知识 说了一下线程池类型 线程池基本参数和原理 考了一下给出各个参数(核心线程数3  最大线程数5 超时时间1秒 阻塞队列10个 使用默认的抛出策略) 让我说从1个线程到10个线程线程池处理的整个流程

了解不了解怎么指定这些参数时候有什么原则 这个也不知道 我就说核心线程数一般是cpu核数+1 然后其他的参数需要考虑一下各个任务占用时间长短 然后他又问那核心线程数这个数字也是什么情况都不变的吗 回答要考虑任务是需要占CPU时间片多的任务还是IO多的任务 如果占用CPU时间片少也可以把核心线程数增大

怎么定位多线程的异常 知不知道有哪些类和方法

ThreadLocal是怎么保证线程安全的 回答了一下概念和底层原理

JUC包中都了解哪些函数和类,比如CountDownLatch、 Semaphore、CyclicBarrier这些都了解吗。就只答了countDownLatch和应用场景,还有信号量,对其他的不了解。

Semaphore (信号量)-允许多个线程同时访问: synchronized 和 ReentrantLock 都是⼀次只
允许⼀个线程访问某个资源, Semaphore (信号量)可以指定多个线程同时访问某个资源。
CountDownLatch (倒计时器): CountDownLatch 是⼀个同步⼯具类,⽤来协调多个线
程之间的同步。这个⼯具通常⽤来控制线程等待,它可以让某⼀个线程等待直到倒计时结
束,再开始执⾏。
CyclicBarrier (循环栅栏): CyclicBarrier 和 CountDownLatch ⾮常类似,它也可以实现线
程间的技术等待,但是它的功能⽐ CountDownLatch 更加复杂和强⼤。主要应⽤场景和
CountDownLatch 类似。 CyclicBarrier 的字⾯意思是可循环使⽤( Cyclic )的屏障
( Barrier )。它要做的事情是,让⼀组线程到达⼀个屏障(也可以叫同步点)时被阻塞,
直到最后⼀个线程到达屏障时,屏障才会开⻔,所有被屏障拦截的线程才会继续⼲
活。 CyclicBarrier 默认的构造⽅法是 CyclicBarrier(int parties) ,其参数表示屏障拦截的线程
数量,每个线程调⽤ await() ⽅法告诉 CyclicBarrier 我已经到达了屏障,然后当前线程被
阻塞。
countDownLatch有什么能改进的地方 这个也不知道 
CompletableFuture

Future对于结果的获取,不是很友好,只能通过阻塞或者轮询的方式得到任务的结果。

  • Future.get() 就是阻塞调用,在线程获取结果之前get方法会一直阻塞
  • Future提供了一个isDone方法,可以在程序中轮询这个方法查询执行结果。

阻塞的方式和异步编程的设计理念相违背,而轮询的方式会耗费无谓的CPU资源。因此,JDK8设计出CompletableFuture。CompletableFuture提供了一种观察者模式类似的机制,可以让任务执行完成后通知监听的一方。另外completableFuture提供了各个异步任务之间的链式调用。

Mysql用的是什么存储引擎 回答是默认的InnoDB 
那Mysql都有哪些存储引擎? 只回答上了mylsam innoDB 还有memory 别的说记不清了
两种引擎有什么区别  答  MyISAM 只有表级锁 ,⽽ InnoDB ⽀持⾏级锁 和表级锁 ,默认为⾏级锁。
InnoDB ⽀持事务。nnoDB ⽀持MVCC。
那对mysql的乐观锁悲观锁实现有了解吗?
行级锁和表级锁这个底层实现了解吗?
索引这里都知道哪些知识,可以自己讲一下。 说了B+索引和HASH索引,两种引擎的B+树叶子节点差距,还有有些情况不会触发索引,最左匹配原则可能会回表这些。
问了数据库常见优化方式,了解哪些。 说了水平拆分表和垂直拆分表还有读写分离这些。
详细问水平拆分表时候,应该怎么设计字段,这个也说不了解。
对分布式的中间件有什么了解
职业规划
对toB和toC有没有什么倾向性
反问 表示今天回答的不太好,有没有一些给我后续学习的建议
感觉面试官挺诚恳的。说第一点是坚定自己选择的方向,选择了java就要坚持住,之后要更深入学习。这里礼貌的夸了一下我说对基础知识掌握挺牢固的,以后要保持这样,然后在保持这个的基础上增加学习的广度。比如中间件以后肯定都要了解的,可能不需要去深刻知道底层原理,但是要会应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值