java 面试题整理
java面试题
1.接口和抽象类的区别
抽象类 | 接口 |
抽象类中可以有默认方法 | 在java8之前,不能有默认方法 |
extends | implements |
抽象类中可以有构造器 | 接口中不能有构造器 |
抽象类中可以使用public protected | 接口中是完全是public |
添加方法时,可以不修改子类现有的代码 | 子类必须实现新添加的方法 |
2.什么是不可变对象?
不可变对象一旦被创建,状态就不能被修改。任何修改都会新创建一个新的对象,如String Integer 等包装类。
3.java中几种创建对象的方式?
①采用new的方式 ②通过反射进行创建 ③采用clone 的方式进行创建 ④通过序列化机制进行
4.equals 和hashcode()的联系?
如果连个对象的equals不相等,有可能产生的hash值会相等,可能会出现碰撞的情况,如果equals相等,那么hashcode肯定是相等的。
在hashcode中不能使用随机数
5.final、finalize、finally 的不同之处?
final 是最终的,修改的对象和变量的值不可进行更改。 finalize 在对象回收之前调用一次,但是不知道具体的时间。finally 表示,发生异常也会执行的操作。
6.线程wait()和sleep()的区别?
sleep 睡眠后不会让出资源, wait()会进行资源的让出,sleep 时间到的话就会执行,wait() 需要进行唤醒,notify() 或者notifyall()
7. Java中浅拷贝和深拷贝?
浅拷贝针对对象而言,如果对象属性是非引用型,则非引用的部分重新进行赋值,也就是clone出来的对象这些属相相互不影响,如果是引用型,则会影响,他们是
拷贝的是对象的地址。(String类型非常特殊,虽然属于引用类型,但是不能当做这个 包装类型也例外)
深拷贝:完全拷贝一个新的对象
深拷贝实例:
Object clone = super.clone();
Student st = (Student)clone;
Address clone1 = (Address)st.getAddress().clone();
st.setAddress(clone1);
return super.clone();
8.ThreadLocal(线程变量副本)?
threadlocal为每个变量维护一个线程变量,采用空间转化时间的方式,为每个使用该线程的变量提供一个副本。主要解决多线程中,数据不一致的问题,它的本质是数据
的隔离,Synchronized 是数据的共享。
9. JVM ?
java 虚拟机,它屏蔽了与操作平台相关的信息,这就是java虚拟机的“一次编译,到处运行”的原因。
JRE :java 程序运行的环境,普通的用户只需要安装JRE就可以了。
JDK: 是程序开发人员用来编译、调试java程序用的包,包含了JRE
10. java 内存模型?
①程序计数器 ②java虚拟机栈 ③本地方法栈 ④java堆 ⑤方法区 ⑥运行时常量池
12 . lock与synchronized 的区别?
lock还具有锁投票 定时锁等候,中断锁等候。
synchronized 如果A占着锁不放,B会一直等待。
lock 如果A 不释放,B会中断等候,去干别的事情。
①lock() 如果获得了锁,立即返回,否则一直在休眠等待
②trylock() 如果获得锁,立即返回true,否则返回false
③tryLock(long timeout,TimeUnit unit), 如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就
返回true,如果等待超时,返回false
④lockInterruptibly:如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到或者锁定,或者当前线程被别的线程中断
synchronized 出现异常时候,会自动释放锁,但是lock不会。
在竞争不是非常激烈的情况下,使用synchronized 比较好。激烈的话,使用lock
13. volatile 的使用场景:
为了解决多线程中,变量改变后,无法通知其他线程。使用的条件:对变量的操作不依赖当前值,改变量没有包含具有其他变量的不变式 不保证原子性
14. CAS 无锁算法?
当多个线程尝试使用CAS更改同一个变量的时候,只有一个变量能够成功,失败的线程并不会被挂起,而是被告知竞争失败。
15.线程池的作用?
① 降低资源的消耗,通过重复利用,减小创建和销毁的消耗。
② 提高相应的速度,当任务到达时候,任务不需要等待线程的创建就能够立即执行。
③ 提高线程的管理性
16 . 一直hash性
hash算法称为散列算法,就是通过散列算法,将数据存储到一个指定的地址上面,下次如果添加的时候,set就通过这个地址来进行判断这个地址是否有值。
这样就大大降低了消耗。
数组的特点:寻找地址快,插入和删除困难。
链表的特点:寻地址难,插入和删除简单。
hashMap 可以接受null键和值(线程非安全的),而hashtable 不能(线程安全的)
17 . SpringIOC (控制反转 和依赖注入)
通过注入的方式构建springbean,通过反射机制实例化bean并建立依赖关系
springbean 一般都单例模式,每一个请求会产生新的bean实例,
java 面试题整理的更多相关文章
- 尚学堂Java面试题整理
博客分类: 经典分享 1. super()与this()的差别? - 6 - 2. 作用域public,protected,private,以及不写时的差别? - 6 - 3. 编程输出例如以 ...
- 【JAVA面试】java面试题整理(4)
版权声明:转载请注明 https://blog.csdn.net/qq_33591903/article/details/83473779 ...
- 北京Java笔试题整理
北京Java笔试题整理 1.什么是java虚拟机?为什么ava被称作是"平台无关的编程语言? 答:Java虚拟机可以理解为一个特殊的"操作系统",只是它连接的不是硬件,而 ...
- 18家大厂Java面试题整理了350道(分布式+微服务+高并发)
一.性能调优系列 1.Tomcat性能调优 JVM参数调优: -Xms 表示JVM初始化堆的大小, -Xmx表示JVM堆的最大值.这两个值的大小一般根据需要进行设置. 当应用程序需要的内存超出堆的最大 ...
- 金九银十,史上最强 Java 面试题整理。
以下会重新整理所有 Java 系列面试题答案.及各大互联网公司的面试经验,会从以下几个方面汇总,本文会长期更新. Java 面试篇 史上最全 Java 面试题,带全部答案 史上最全 69 道 Spri ...
- 《OD面试》Java面试题整理
一.面试考察点 1 主语言本身 2 数据库 3 算法 4 Spring/SpringMVC/MyBatis 5 项目经验 1)项目涉及到的技术点深挖: (1)考察候选人技术深度 (2)看候选人遇到问 ...
- java 面试题整理(不定期更新)
一.Java基础 1.Java面向对象的三个特征与含义 三大特征是:封装.继承和多态. 封装是指将某事物的属性和行为包装到对象中,这个对象只对外公布需要公开的属性和行为,而这个公布也是可以有选择性的公 ...
- 史上最全Java面试题整理(附参考答案)
下列面试题都是在网上收集的,本人抱着学习的态度找了下参考答案,有不足的地方还请指正,更多精彩内容可以关注我的微信公众号:Java团长 1.面向对象的特征有哪些方面? 抽象:将同类对象的共同特征提取出来 ...
- 工作3年java面试题整理(自用)
基础题目 1.Java线程的状态 一. 线程状态类型:1. 新建状态(New):新创建了一个线程对象.2. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该 ...
随机推荐
- NOIP2007 矩阵取数游戏(区间DP)
传送门 这道题第一眼看上去可能让人以为是贪心……不过贪心并不行,因为每次的操作是有2的幂次方的权值的.这样的话直接每次贪心最小的就目光短浅.所以那我们自然想到了DP. 据说这是一道很正常的区间DP? ...
- Asp.net MVC 中使用 Ninject 实现依赖注入
松耦合.针对抽象编程.不针对实现编程是面向对象设计的原则.依赖注入就是,在一个类的内部,不通过创建对象的实例而能够获得实现了某个公开接口的对象引用.所谓的控制反转也是相同的意思.把依赖的创建转移到了使 ...
- PTA 水...
习题4-2 求幂级数展开的部分和 (20分) 已知函数e^x可以展开为幂级数1+x+x2/2!+x3/3!+⋯+xk/k!+⋯1+x+x^2 /2! + x^3 /3! + \cdots + x^k ...
- C++ C# 默认对齐是8字节
C++ C# 默认对齐是8字节 以上,一直以为是4字节,尼玛
- bzoj 2882: 工艺【SAM】
看上去比较SA,但是在学SAM所以就用SAM来做-- 把串复制一遍接在后面,对这个新串求SAM(这里的儿子节点要用map转移),然后从根节点每次都向最小的转移走,这样走n次转移的串就是答案 #incl ...
- 手把手教你如何在Fire fox火狐浏览器里在线识别下载视频(超强大)(博主推荐)
网址是 Firefox about:addons
- 洛谷 P1589 泥泞路
题目描述 暴雨过后,FJ的农场到镇上的公路上有一些泥泞路,他有若干块长度为L的木板可以铺在这些泥泞路上,问他至少需要多少块木板,才能把所有的泥泞路覆盖住. 输入输出格式 输入格式: 第一行为正整数n( ...
- the little schemer 笔记(6)
第六章 Shadows 1 是算术表达式吗 是 3 是算术表达式吗 是的 1+3 是算术表达式吗 是的 1+3×4 是算术表达式吗 当然是 cookie 是算术表达式吗 是啊,你需要来一块吗 e那么 ...
- 跟我一起玩Win32开发(23):渐变颜色填充
GradientFill函数可以对特定的矩形区域或者三角形区域进行渐变颜色的填充.我们先来看看GradientFill函数到底长得什么样子,帅不帅. BOOL GradientFill( _In_ ...
- 跟我一起玩Win32开发(21):复制&粘贴&剪贴板操作
我要提醒一下大家,看了我的博文学到的知识,千万不要用于实际开发,不然你会被你的上司骂:“妈的,这些东西哪来的,从来没有人这样做过.”不信你试试,脑细胞被冻结的经理或者技术总监们肯定会这样说的. 如果是 ...