面经整理-从笔试面试中一点点成长进步

来源:互联网 发布:东方证券交易软件下载 编辑:程序博客网 时间:2024/05/22 10:55

1。说说你学Java都学了哪些内容
1。Java IO, Java的类集框架, java多线程, Java中常见的设计模式, java访问数据库 jdbc, mybaits。
java中的开源框架比如spring, Java的网络编程比如socket。
Java虚拟机相关:Java的内存管理机制, Java虚拟机类加载机制, 从虚拟机角度看高并发编程, Java虚拟机性能监测VisualVM等等。
2。数据库事务你了解吗?脏读是什么,幻读是什么? 事务的隔离级别?数据库的四大特性?
脏读 : 一个事务读取了另一个事务修改了的但是还没提交的数据,如果这些数据被回滚, 则读到的数据无效。
不可重复读:在同一事务中,两次读取同一数据,得到内容不同
事务1:查询一条记录
————–>事务2:更新事务1查询的记录
————–>事务2:调用commit进行提交
事务1:再次查询上次的记录
此时事务1对同一数据查询了两次,可得到的内容不同,称为不可重复读
幻读:同一事务中,用同样的操作读取两次,得到的记录数不相同
事务1:查询表中所有记录
————–>事务2:插入一条记录
————–>事务2:调用commit进行提交
事务1:再次查询表中所有记录
详细解释:
幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,
这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表
插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行
就好象发生了幻觉一样。
对比:幻读和不可重复读是两个容易混淆的概念,幻读是指读到了其他已经提交事务的新增数据,而不可以重复读是指读到了已经提交事务的更新数据(更改或删除)。
策略:为了避免这两种情况, 采取的策略是不同的:防止读到更改的数据, 只需要对操作的数据添加行级锁, 阻止操作中的数据发生变化;而防止新增数据,则往往需要添加表级锁—将整张表锁定,防止新增加数据!
数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。

√: 可能出现 ×: 不会出现

Tables 脏读 不可重复读 幻读 Read uncommitted √ √ √ Read committed × √ √ Repeatable read × × √ Serializable × × ×

事务(transaction)所应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
原子性:是指组成一个事务的多个数据库操作是一个不可分割的原子单元,只有所有的操作执行成功,整个事务才提交。事务中的任何一个数据库操作失败,已经执行的操作都必须撤销也就是说事务包含的所有操作要么全部成功,要么全部失败回滚。
一致性:事务操作成功后, 数据库所处的状态和它的业务规则是一致的,即数据不会被破坏。比如A账户转账100元给B账户, 不管操作成功与否, A账户和B账户的存款总额是不变的。
隔离性:在并发数据库操作时, 不同的事务拥有各自的数据空间它们的操作时不会对对方产生干扰。准确的说, 并非要求做到完全无干扰。
数据库规定了多种事务的隔离级别, 不同的隔离级别对应不同的干扰程度, 隔离级别越高, 数据的一致性越好,但是并发越弱。
持久性:一旦事务提交成功, 事务中的所有数据操作都必须被持久化到数据库中。即使在提交事务后,数据库马上崩溃, 在数据库重启时,也必须能通过某种机制恢复数据!
参考链接:
http://singo107.iteye.com/blog/1175084
http://blog.csdn.net/gaoshan_820822/article/details/4582561
链接:https://www.nowcoder.com/discuss/29269?type=0&order=0&pos=48&page=1
1 自我介绍
2 介绍项目,在项目中图片存储在公有云上加密问题,项目中为什么用redis以及怎么实现相关功能的
3 说说你学java都学了哪些内容
4 项目中用过的开源框架,为什么要用springboot 和 hibernate
5 spring的核心功能是什么,介绍一下AOP以及怎么实现的,jdk代理和cglib代理的区别
6 数据库的四大特性,事务的隔离级别,幻读。
7 计算机网络都学了什么(类似说书上的目录),OSI七层每层的任务,数据链路层的功能(答得不全)和协议。
8 数据结构都学了什么,排序算法最快的是哪种说说原理,哪些是不用申请额外空间的
9 树的非递归遍历以及三种遍历知道哪两种不能确定一棵树
10 介绍一下二叉平衡树
11 是否看过jdk源码,说说你说看过的
12 说说concurrent包下的类,然后问了一下Reentrantlock.
13 以后的职业规划
问题: 说说concurrent包下的类?
对于多线程,一般的应届生用的应该不是非常熟悉,当介绍多线程的时候也缺乏清晰的逻辑,其根本是没有对多线程有全局的掌握和理解。
下面只是一部分,以后再慢慢补充更多详细内容。
参考:Java中的并发工具类

import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ConcurrentLinkedDeque;import java.util.concurrent.ConcurrentLinkedQueue;import java.util.concurrent.ConcurrentSkipListMap;import java.util.concurrent.ConcurrentSkipListSet;import java.util.concurrent.CopyOnWriteArrayList;import java.util.concurrent.CopyOnWriteArraySet;import java.util.concurrent.CountDownLatch;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.LinkedBlockingDeque;import java.util.concurrent.LinkedBlockingQueue;public class Test {    public static void main(String[] args) {        ConcurrentHashMap<Integer, Integer> map = new ConcurrentHashMap<>();        ConcurrentLinkedQueue<Integer> queue = new ConcurrentLinkedQueue<>();        ConcurrentLinkedDeque<Integer> deque = new ConcurrentLinkedDeque<>();        LinkedBlockingQueue<Integer> blockingQueue = new LinkedBlockingQueue<>();        LinkedBlockingDeque<Integer> blockingDeque = new LinkedBlockingDeque<>();        ArrayBlockingQueue<Integer> arrayBlockingQueue = new ArrayBlockingQueue<>(10);        ExecutorService executorService = Executors.newCachedThreadPool();         CountDownLatch demo = new CountDownLatch(10);        CyclicBarrier cyclicBarrier = new CyclicBarrier(10);        CopyOnWriteArrayList<Integer> copy = new CopyOnWriteArrayList<>();        CopyOnWriteArraySet<Integer> set = new CopyOnWriteArraySet<>();        ConcurrentSkipListMap<Integer, Integer> mp = new ConcurrentSkipListMap<>();        ConcurrentSkipListSet<Integer> mySet = new ConcurrentSkipListSet<>();    }}

java.util.concurrent
java.util.concurrent..locks&&java.util.concurrent.atomic
作者:陈心朔
链接:https://www.nowcoder.com/discuss/29308?type=2&order=0&pos=11&page=1
来源:牛客网【C++岗位】

  1. 讲一下Linux下如何将源文件逐步编译成目标文件的过程

  2. 你简历上写熟悉TCP/IP协议,那你说一下TCP的报头吧

  3. 你简历上写的掌握常用的数据结构和排序算法,那你说一个你熟悉的排序算法吧,冒泡就不用说了

  4. 了解Windows下的内存管理吗?不了解,只看过位图和空闲链表。那你把空闲链表说一下

  5. 说说对内存池的理解

    没答全,就说了避免了连续从操作系统申请内存的开销 (内存碎片什么的都忘了)

作者:哎呦喂。
链接:https://www.nowcoder.com/discuss/29133?type=2&order=1&pos=7&page=2
来源:牛客网

第一个问题:简历上写的Java开发是吧,知道ArrayList和LinkedList的区别么?

第一个问题答上来之后,面试官说知道乐观锁,悲观锁么?
面试官说知道什么情况下用乐观什么情况下用悲观么?

volatile关键字的作用 答完之后追问 i++是原子性的么? 继续追问内存模型
继续追问 为什么要设置工作内存和主内存

说下GC的过程吧
balabala刚说到新生代的内存回收就被打断了。。

追问:GC时会对程序有什么影响,随便答了一个 serial垃圾收集器GC时会 stop the world
也不知道对不对。。 继续追问,当发现虚拟机频繁GC时应该怎么办?

继续问:Java8有什么新特性,知道lambda表达式么?

继续问:设计模式知道么?

问我HashMap扩容机制是怎样的

那写一个查询表重复行的sql语句。

作者:(_記ぴé憶ò
链接:https://www.nowcoder.com/discuss/28855?type=2&order=1&pos=18&page=1
来源:牛客网

一面考算法,两个基础题目,思路不难,考基本功吧,一个是链表相加,思路就是反转 然后求和,另一个是多个有序数组
归并,用优先队列就好。

二面考应用和知识面把,说实话我答的不好。内容涉及mysql引擎,索引(mysql这块一定要懂);
java map底层实现,最好看源码,还有各种集合类的区别;最小堆;http协议,ajax;java多线程;
缓存数据 比如redis。最后一个算法题,是一个装水的问题,问在装多少,我用的双指针。

三面:java多线程,mysql 索引,问一些做过的项目

HR面:问一些平时的学习方式之类的,比较轻松吧。

作者:RiseKyle
链接:https://www.nowcoder.com/discuss/29365?type=2&order=0&pos=12&page=1
来源:牛客网

1。快要面完的时候面试官说有一套题发给我做一下,然后就发了一个在线编译器的链接给我,一共五道编程题,大概做了1个多小时。说说电话面试问的问题吧。
2。自我介绍
3。Java都学了些什么?
答:集合、IO、多线程、框架等等
4。说说多线程吧
答:说了一下多线程的实现,同步,优化说一下线程池,线程池里面的线程的状态有哪些?
5。数据结构学了些什么?
Hashmap和hashtable的区别?Hashmap的数据结构,Hash的具体实现(这块答得不好)
6。设计模式有了解吗?
答:谈了一下单例模式、工厂模式、代理模式,顺便说了一下Spring的AOP是基于代理模式的,可以实现日志记录等功能。
7。数据库事务你了解吗?脏读是什么,幻读是什么?
基本就是这些问题,倒是不难,就是问的很抽象很宏观,差不都是自己一直在说,然后面试官听到你说的关键点就提出来具体问问。
最后说一下,做完面试题之后由于我不知道怎么提交,又不敢直接关闭在线编译器,怕代码丢失,就发邮件询问是否可以直接关闭。然后面试官打电话过来说已经看到代码了,直接关闭就好了,后续会有其他同事联系我的。

作者:Pro浅笑
链接:https://www.nowcoder.com/discuss/29396?type=2&order=0&pos=13&page=1
来源:牛客网

一、自我介绍

电话接通之后,面试官首先确认是XXX吧。然后就让自我介绍,个人建议个人介绍应该提前准备一下,至少1分半钟,而且自己做过的比较重要的项目可以简单提一下,我当时的自我介绍时间就有点短,所以面试官让我介绍了一下简历中的项目。

二、技术问题
主要是提问了计算机网络
Linux
数据结构方面的知识
TCP的三次握手
在浏览器中访问一个网址的过程;
Linux中文件的权限;
了解的排序算法有哪些,时间复杂度分别是多少;

之后通过邮箱发过来一个链接进行在线编程,进入那个连接之后,你编程的全过程面试官那边是可以看到的。

题目是:读取文件(url.txt,里面每一行是一个网址,有重复的),然后记录每个网址出现的次数,按照出现次数由高到低进行排序,并且输出到txt文件中,一行是网址,下一行是该网址的出现次数,按照这个格式来输出。

三、有什么问题要问

原创粉丝点击