java面经整理

作者:Draymonder
链接:https://www.nowcoder.com/discuss/168101
https://github.com/Draymonders/Daily-life/blob/master/interview.md
来源:牛客网

  1. 谈谈你对java的理解…

  2. 问了个Java多态这样子,但我不知道咋说 后来那个网页好了 就直接做题了…

上来两个算法题

  1. 10个人,1000件商品(idx: 0…999),每个人对每件商品有一个喜好度评分(0-100, float),形成一个分数矩阵,求排序的前15件商品

(就是排序 反正 写了两个cmp函数…

  1. 滑动窗口

(线性复杂度,我说单调队列,然后面试官觉得我复杂度不是线性的 解释半天…… 感觉他还是没懂)

半年没刷题了 被自己菜哭…

  1. c++中 指针和引用的区别 (不会 hhh,我觉得一样)

(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:
int a=1;int *p=&a;
int a=1;int &b=a;
上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。
而下面2句定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存储单元。
https://www.cnblogs.com/dolphin0520/archive/2011/04/03/2004869.html

  1. 线程和进程的区别 (进程中 几个堆,几个栈)
    https://www.cnblogs.com/lgk8023/p/6430592.html
    进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

线程:进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

  1. 讲一下Java的map吧
    https://www.cnblogs.com/lzq198754/p/5780165.html
    TreeMap:基于红黑树实现。

HashMap:基于哈希表实现。

HashTable:和 HashMap 类似,但它是线程安全的,这意味着同一时刻多个线程可以同时写入 HashTable 并且不会导致数据不一致。它是遗留类,不应该去使用它。现在可以使用 ConcurrentHashMap 来支持线程安全,并且 ConcurrentHashMap 的效率会更高,因为 ConcurrentHashMap 引入了分段锁。

LinkedHashMap:使用双向链表来维护元素的顺序,顺序为插入顺序或者最近最少使用(LRU)顺序。

  1. 讲一下TCP/IP

  2. 看我是服务端的,问了一些ssh (完全不会 hhh)
    https://blog.csdn.net/my_name_nb/article/details/54866319

  3. java锁 都有哪些 (sync,reentrantlock, 读写, 乐观锁 CAS)https://www.cnblogs.com/Mainz/p/3546347.html
    https://www.cnblogs.com/qifengshi/p/6831055.html

  4. 对,还有什么能表达你和别人不一样的地方的呢 (我说可能我不是智商很高的那种,但是我很能坚持,对,就这样子…

一面翻转链表,对类的理解,自定义一组类,
二面两无序数组,求和为target的组合地址索引,
三面队列和栈pop,push,min 均O(1),以及为何他是均O(1)

链表快排
图的最短路径

多线程
工厂模式的好处

二叉树的反转
jvm类
有限内存做排序
集合类

手写多线程
架构
sql

给一个二进制数组,代表一幅图像,怎么粗略判断图像尺寸
红黑树的原理
实现字符串的初始化和拷贝函数
设计数据结构,来快速查找学生的成绩,根据学生姓名,使内存占用最小

二分查找的变形
求第k大的数,要求on复杂度
https://blog.csdn.net/qq_14927217/article/details/73381492
跳马问题
https://blog.csdn.net/suwu150/article/details/51504132
单链表的快速排序

用算法检测图片的时候,如何保证不卡顿
用队列?用不同线程?

递增数列,求ai+aj==s的i和j
1g空间存有序数组,另有1g空闲空间,来提升硬盘访问效率

进程和线程的区别,那些是线程,那些是进程

解析路径问题,正整数的开平方根问题

二叉树前序、后序、中序的转换算法
二叉树的排序,字符串等

具体原理,项目经历

合并两个有序链表,
输出矩阵外圈元素,
青蛙跳,
求最小的k个数,
求大数组里某个数字第一次出现的位置,
数据库的事务特性,sql联合查询(crud、聚合函数、排序分组),乐观锁、悲观锁
数据库ACID,

快排思想,连续子串的和的最大值,
一个数组,分为M段,求M段中和的最大值,最小值,

最大并发数的控制,1TB硬盘数32TB数据排序,

数组中只出现了一次的数字,
数组中找两个只出现了一次的数字,

单链表排序,
数组和为target,找到和为target的数对,找出所有,重复也视为不同方案
0到n-1,有m个规则要求某个数在另外个数的前面,用程序输出符合所有规则的排列。

牛客网总结
作者:我们会尽快给你通知
链接:https://www.nowcoder.com/discuss/133333
来源:牛客网

1.算法和数据结构
1
2
3
4
5
6
7
这应该是最重要的了,也是准备面试和复习应该关注的大头,楼主是算法渣,
所以没什么值得借鉴的宝贵建议,多刷剑指offer和leetcode吧,在牛客网的题
库里在线编程就有,硬着头皮刷吧,想不出来就看看讨论区里的思路和实现,

看答案不丢脸,理解了就是你自己的。
剑指offer应对面试中的手撕代码,leetcode主要应对线上笔试。
(链表,二叉树,BST,红黑树,几大排序算法得掌握)
2.Java基础知识
1
2
3
4
5
6
7
8
9
10
11
建议可以看《Java程序员面试宝典》、李刚的《疯狂Java讲义》补一下基础的
知识点,未来有时间了可以研读《Effective Java》一些经典书籍,

关注HashMap等集合类(HashMap的get方法时间复杂度,为什么是O(1),它的底层实现,
让你来手写一下get和put方法,它和HashTable有啥区别,为啥key主要是String和Integer,
怎么解决Hash冲突,什么时候扩容等等…),

80%的面试都会问HashMap,复习的时候死锤HashMap绝对不亏,

另外还要多看看多线程(sleep和wait的区别,线程间通信、怎么避免死锁、怎么开多个线程顺序执行任务。)
还要关注一下Java 8(J…J8?)的一些新特性,lambda、stream,即使现在JDK11都出了,JDK1.8的新特性还是要了解
3.JVM
1
2
3
4
重点关注垃圾回收(什么是垃圾回收,垃圾回收的算法,GC怎么给内存分区的?)、
虚拟机内存模型、类加载机制(哪几种classloader?双亲委派模型是什么,为什么要这样做),

虽然实际开发中不一定能用到,但面试确实可能会经常问到这几点,推荐《深入理解Java虚拟机》
4.数据库
1
2
3
4
5
6
基本SQL语句要会写(CRUD,聚合函数、排序分组),乐观锁、悲观锁,
数据库事务ACID是什么,数据库优化,
常用的存储引擎以及MyISAM和InnoDB的区别以及何时选用,索引原理,

关系型数据库从MySQL入手吧,推荐《深入浅出MySQL》,至于非关系型的,
学一学Redis,Redis的过期策略、常见的数据结构、持久化策略AOF,RDB等。
5.操作系统
1
2
3
Linux一些常用的命令…grep,tail,top,lsof,kill,cat之类的,
进程间通信的方式(这个一定多关注,被问了三四次了),
查看进程的内存怎么看
6.计算机网络
1
2
HTTP1.1和2.0协议的区别、状态码、TCP连接的过程、TCP和UDP的区别、
输入一个网址之后客户端服务端之间发生了什么…推荐《图解HTTP》
7.设计模式
1
2
3
4
单例、工厂是被问的最多的,需重点关注,包括懒汉饿汉双检锁,
偶尔可能会问你还了解其他的什么设计模式,可以了解一下另外几种较常见的
策略、门面、桥接、观察者模式,
推荐《大话设计模式》和设计模式的runoob菜鸟教程,可以看得很快
8.框架
1
2
3
关注一下Spring的IOC、AOP原理,MVC框架的流程,其实框架只是一个封装好的用来方便开发的东西,
给不了解的人吹一吹可能看起来很牛x,其实反而是最容易上手的,
跟着官方文档写个demo就差不多了,校招最好还是多关注基础,不要死锤框架
9.Git,Maven等一些项目管理工具,还有一些杂七杂八的REST规范等
1
2
虽然简历里写了,但面了这么多家问的其实不多,只有一家问过git pull 和git fetch的区别,
会的话更好,就算不会也没关系,时间少的话还是建议多抓前面几个知识大类恶补

solr怎么实现分布式的,field有多少个,mysql的线程池有多少个,不同模块怎么用接口这些连起来

hashtable和hashmap的区别,table线程安全?
js.node,网页部分刷新还是全部刷新,用memcached内存缓存数据,不是全部刷新,

单例模式
工厂模式
spring的理解,
线程的实现方式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值