京东科技Java实习
听说发面经长人品,许愿京东!!!!
京东科技(36分钟)
- 你是大二是吗?
是的(我以前投简历都是投的大三的,没想到这次居然投的是我是大二的那个简历,但是好像是个好事,接下来问我的问题都比较简单) - 反射的作用和怎么使用的?
反射是在程序运行的过程中动态的获取对象和类的信息的一种机制,在项目当中ioc是这样用的、aop是这样用的。。。。顺便就把项目的前两个部分介绍了 - 知道Spring的哪些注解
ComponentScan、Component、Scope、Autowired、Aspect、自己项目里设计的Pointcut - 知不知道Controller注解?
Controller注解是SpringMVC中标记一个处理器的注解,Controller也是一个bean,也需要交给ioc容器管理,然后详细说了一下Controller是怎么和DispatcherServlet前端控制器交互的,也就是SpringMVC处理请求的内部流程(责任链模式) - 知道Component注解和Resource注解什么区别吗?
不了解 - ++i是线程安全的吗?
不安全,++i其实是三个操作,读取操作、计算操作和写入操作,总线事务只能够保证单纯的读取操作和写入操作是原子性的,即使是volatile也不能保证++i是原子性的 - 那怎样让它线程安全呢?
在JMM中提供了8个原子性的内存交互操作,这其中lock操作和unlock操作就是用来控制大范围操作的原子性的,在JVM中并没有直接开放这两个操作,而是采用了更高层次的monitorenter和monitoerexit操作,它们使只有唯一一个进入临界区的线程才能够执行操作,这样保证了复合操作的互斥性就保证了原子性,对应到代码层面就是synchronized关键字(忘记说一个CAS了) - 数据库会哪些
Mysql,Redis也在学习当中,但是没有什么实际的应用,只了解理论的部分 - 了不了解事务?平常会在什么场景使用事务?
了解的,解释了事务是一种保证多个操作要么都成功要么都失败的机制,然后说了一个银行转账这样的复合操作,说类似这样的场景就得使用事务,否则就会出问题 - 事务在Spring中是什么注解?
Transaction - 那它什么时候会失效呀?
我狡辩我没有什么实际开发经验,学习Spring是为了做这个项目,所以不太了解,然后面试官给我解释了一下它什么时候会失效(但是我也没听懂) - 了解索引吗?我们什么时候要建一个普通索引
了解的,说了普通索引是存储主键值而不是存储数据的索引,那么普通索引上记录的数据就是普通索引自身的字段和主键的字段,那么我们只需要查询这些信息也就是对覆盖索引的一个使用的话就可以建一个普通索引 - 那有一个字段既可以使用整形存储也可以使用字符串存储用什么?
我说整形,然后想了一会儿没有想出来为什么,面试官没有催,我就猜字符串每个字符都要占一定的空间,而整形的话空间固定比较省空间,面试官说对的,其实就是为了省空间 - 使用Future和putIfAbsent保证不重复计算是怎么做的?
说了一下这个项目里计算缓存的部分,然后说Future怎么防止重复计算,然后说putIfAbsent防止重复提交,但是putIfAbsent这里没说清楚,导致面试官反问我putIfAbsent是保证线程安全的吗?我就说不是的,ConcurrentHashMap里面的数据都是用volatile修饰的是保证可见性的,putIfAbsent是为了让两个线程不在小概率的情况下往缓存里写数据导致重复提交,这回似乎比较满意 - 为缓存设置随即过期时间防止缓存雪崩
缓存肯定是要有过期时间的,但是为了不让大量缓存在同一时间过期,我们使用SecheduledThreadPool提交随机过期时间的任务延迟的去删除缓存,防止缓存雪崩 - 那改造AQS工具类配合线程池是怎么改造的呀?
我说其实也不是改造吧,就是使用了基于AQS管程的CountDownLatch工具类配合线程池模拟了一个高并发的场景,对缓存进行了一个测试,我先让主线程创建一个CountDownLatch,然后把它的初始值设为一,然后创建一个线程池,在线程池中创建一百个线程让他们启动起来之后都调用CountDownLatch.await()方法进入条件变量等待队列等待,然后主线程等待一秒等线程池中的线程都起动起来进入等待状态,然后主线程调用CountDownLatch.countDown()将CountDownLatch减为一,然后线程池中的大量线程就会唤醒,这样就模拟出来了一个高并发的场景对缓存进行测试,是这样的一个测试 - 数据结构和算法这块儿比较擅长是吗?
我写了我力扣周赛分1900Knight段位,说喜欢打竞赛啥的)还可以,就是觉得这块儿挺有意思的就格外多花了一些时间 - 常用的List和Map有哪些呀?
ArrayList、LinkedList,HashMap、ConcurrentHashMap、Hashtable,还有CopyOnWriteArrayList和对应的也有CopyOnWrite的map叫啥我忘了 - 那介绍两个你比较熟悉的集合吧
说了ArrayList和LinkedList,详细说了说初始值,扩容,访问增删效率啥的,使用场景,联系机组里内存层次说了他们性能差异为什么巨大,说了说他们适合什么使用方式 - 那我们在遍历ArrayList的过程当中为什么不能remove元素?我没答出来遂改口问我ArrayList是怎么删除元素的,我说把后面所有元素前移一位所以效率很低,他不满意说那我们想在遍历的过程当中删除元素该怎么办?我说新创建一个集合,把不需要被删除的元素添加进去然后把原来的引用指向新的集合,他说嗯,这也是一种策略
- 实习生做什么?
他负责的几个系统平常会交一些任务给我做 - 我是非科班的,对我有什么学习的建议吗?
他说我觉得你学习能力挺强的,学的挺好的,你是00后是吗?(是)01年的还是02年的?(01年的)就是需要做一些实际的项目,你说你之前跟着视频做的秒杀系统这样的可以做一下,技术很多没有全学会也没关系主要了解了解它的商品模块啊,订单是怎么生成的啊这样的实现是怎么做的 - 公司对我到岗的时间有什么要求吗?是希望我尽快到岗还是最晚可以暑期到岗?他说你的意愿呢?我说我没有什么实战项目,我这搞的都是理论的,所以想尽快拥有一个实战经验,所以想尽快入职,我会向导员申请提前离校,就算不能立刻到岗最迟在六月下旬到岗。可以,我们这边也有实习生,期末的时候公司会批假让他们回去考试,所以你提前到岗的要求我们可以满足。
- 我能过吗?
哈哈哈哈,我跟主管反应一下你的面试情况,如果有后续消息的话反正还会通知你的
更新:已oc