● 请你讲讲Java里面的final关键字是怎么用的?

考察点:关键字

参考回答:

当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。

“使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。“

对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

● 请你谈谈关于Synchronized和lock

考察点:java关键字

参考回答:

synchronized是Java的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。JDK1.5以后引入了自旋锁、锁粗化、轻量级锁,偏向锁来有优化关键字的性能。

Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现;synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁;Lock可以让等待锁的线程响应中断,而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够响应中断;通过Lock可以知道有没有成功获取锁,而synchronized却无法办到。

● 请你介绍一下volatile?考察点:java关键字

参考回答: volatile关键字是用来保证有序性和可见性的。这跟Java内存模型有关。比如我们所写的代码,不一定是按照我们自己书写的顺序来执行的,编译器会做重排序,CPU也会做重排序的,这样的重排序是为了减少流水线的阻塞的,引起流水阻塞,比如数据相关性,提高CPU的执行效率。需要有一定的顺序和规则来保证,不然程序员自己写的代码都不知带对不对了,所以有happens-before规则,其中有条就是volatile变量规则:对一个变量的写操作先行发生于后面对这个变量的读操作;有序性实现的是通过插入内存屏障来保证的。可见性:首先Java内存模型分为,主内存,工作内存。比如线程A从主内存把变量从主内存读到了自己的工作内存中,做了加1的操作,但是此时没有将i的最新值刷新会主内存中,线程B此时读到的还是i的旧值。加了volatile关键字的代码生成的汇编代码发现,会多出一个lock前缀指令。Lock指令对Intel平台的CPU,早期是锁总线,这样代价太高了,后面提出了缓存一致性协议,MESI,来保证了多核之间数据不一致性问题。

● 请你介绍一下Syncronized锁,如果用这个关键字修饰一个静态方法,锁住了什么?如果修饰成员方法,锁住了什么?考点:java关键字

参考回答: synchronized修饰静态方法以及同步代码块的synchronized (类.class)用法锁的是类,线程想要执行对应同步代码,需要获得类锁。

synchronized修饰成员方法,线程获取的是当前调用该方法的对象实例的对象锁。

java工程师面试宝典_【Java工程师面试宝典】学习说明_互联网校招面试真题面经汇总_牛客网...相关推荐

  1. c语言socket面试题,【C++工程师面试宝典】学习说明_互联网校招面试真题面经汇总_牛客网...

    ● 请你讲述一下互斥锁(mutex)机制,以及互斥锁和读写锁的区别 参考回答: 1.互斥锁和读写锁区别: 互斥锁:mutex,用于保证在任何时刻,都只能有一个线程访问该对象.当获取锁操作失败时,线程会 ...

  2. 2021字节跳动秋招整理牛客网---Java后端提前批面试

    一.字节提前批 java 后端一面 1.1 你说你用了 RPC 远程调用,讲讲原理是怎么样的 RPC(Remote Procedure Call)远程调用,通过某种手段,协议,约定调用非本地服务 RP ...

  3. Day5.牛客网剑指offer 67题之43-54题(java代码)

    文章目录 Day5.牛客网剑指offer 67题之43-54题 43.左旋转字符串 44.翻转单词顺序列 45.扑克牌顺序 46.孩子们的游戏 47.求1+2+...+n 48.不用加减乘除做加法 4 ...

  4. 华为机试python编程题_牛客网华为机试题之Python解法

    牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...

  5. Java里面jvr,寻找下一个结点 牛客网 程序员面试金典 C++ java Python

    寻找下一个结点 牛客网 程序员面试金典 C++ java Python 题目描述 请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继). 给定树的根结点指针TreeNode* root ...

  6. 刷完牛客网910道Java题目,快速总结上万字,带你扫清Java基础面试障碍

    花时间刷完了牛客网专项训练所有的Java题,终于有点时间,决定肝一篇Java基础总结,带你扫清Java基础面试障碍! 文章目录 1.Java关键字 2.向上或向下转型 3.类初始化顺序 4.ASCII ...

  7. 牛客网 Java 工程师能力评估 20 题 - 详解

    牛客网 Java 工程师能力评估 20 题 - 详解 不知在看博客的你是否知道 牛客网,不知道就太落后了,分享给你 : 牛客网 此 20 题,绝对不只是 20 题! 免责声明:本博客为学习笔记,如有侵 ...

  8. 牛客网论坛最具争议的 Java 面试成神笔记,GitHub 已下载量已过百万

    程序员内部一直流传这一句话:面试看牛客 刷题看力扣牛客网作为国内最牛的程序员面试网站,一直在程序员内部颇负盛名,其中用户更是卧虎藏龙! 有国内一线大厂的企业招聘 还有一些低调的互联网大牛实力就和天龙八 ...

  9. 牛客网论坛最具争议的Java面试成神笔记,GitHub已下载量已过百万

    程序员内部一直流传这一句话: 面试看牛客 刷题看力扣 牛客网作为国内最牛的程序员面试网站,一直在程序员内部颇负盛名,其中用户更是卧虎藏龙! 有国内一线大厂的企业招聘 还有一些低调的互联网大牛实力就和天 ...

最新文章

  1. 【LeetCode】142 - Linked List Cycle II
  2. python数据结构推荐书-腾讯十年Python开发老司机推荐的入门书籍,你确定不看吗?...
  3. sqlserver 中的exec问题
  4. 网络整合营销概念2015
  5. esp8266接收到的数据如何存放到数组中_Java中HashMap的实现原理
  6. spring mvc学习(50):java.lang.ClassNotFoundException: org.springframework.web.servlet. DispatcherSe
  7. [原]当你用%查不到记录的时候怎么办?
  8. 蓝桥杯第七届国赛JAVA真题----机器人塔
  9. Volley网络请求框架简析——Android网络请求框架(三)
  10. OpenStack是什么?
  11. java对象描述开车_java面向对象
  12. Android四大组件之——Activity(一)定义、状态和后退栈(图文详解)
  13. uni-app 小程序多图上传
  14. 新手学习selenium路线图(老司机亲手绘制)-学前篇
  15. L2-001 城市间紧急救援 (25 point(s))
  16. GoLand External Libraries不展示Go Modules
  17. 沙盘模拟软件_ERP企业经营模拟第一次培训
  18. mpeg 音频格式科普
  19. LTE 中的ANR以及TNL介绍
  20. mysql 1146错误 修复6,MySQL中出现错误1146时出现问题

热门文章

  1. HSSWORKBOOK中读取Excel出现的异常现象
  2. 制作并使用9-patch图像
  3. 应用id_科普贴:什么是OpenID、AppID 、用户ID等各种ID?
  4. linux删除目录tmpab是什么意思_linux 下tmp目录文件怎么被删除的?
  5. catia怎么将特征参数化_浅谈Catia VBA与参数化建模的结合
  6. win10下装win7双系统_双系统win10+win7,双硬盘互相引导
  7. python抓取网站图片_利用python抓取网站图片
  8. 干货素材|UI设计中的字体样式的应用
  9. UI设计师必备|Map name切图命名规范
  10. 超经典实用APP UI产品界面设计模板