飞越面试官(一)--Java基础
大家好!我是本公众号唯一官方指定没头屑的小便--怕屁林。
众所周知,现场面试(包括视频面试)多数时候是没有白板,也就是说,对于你的知识点、项目经验、过往经历和个人介绍等等,都是靠一张嘴。所以考虑到这个情况,根据上次迷你版Java面试汇总,结合自己的错误理解,怕屁林在此推出无公害不会零添加的纯文字免流程图版Java面试系列--《飞越面试官》,让大家知道这事根本不可能。其他语言可选择出门向右或留下旁听。
曾经有面试官问过我,什么是面向对象编程,我寻思我编程的时候我对象没坐我对面,怎么会这么问的?
我说面向对象吧,需要说下什么是对象,对象的话好比是一个人,你,我,它之类的,不同的人是不同的对象,对象有姓名年龄身高体重这些属性,还有吃饭睡觉打机等等的行为,那么这类人在面向对象编程中,统称为类,人等于类,什么样的人,就相对于有什么样的类,所以面向对象编程,说的也是这个对象有什么属性和行为,编程就是一系列对象的属性和行为之间的交互。同时,面向对象编程还包括抽象继承多态封装,这些就不一一展开讲了。
说下Java有哪些基本数据类型,这个就是十根手指头都能数得过,byte、short、int、long、float、double、有些用得少一下子说着会卡主、boolean、char。有些书上还void算是基本数据类型了,不过它什么都不代表。这些基本的数据类型对应有包装类,基本数据类型转包装类型就是装箱,包装类型转基本数据类型是拆箱。
有什么内部类啊?静态内部类、成员内部类、局部内部类、匿名内部类。
那你知道重写有什么特别的么?就是修饰符要大于父类,抛出异常小于等于父类,返回值范围也要小于等于分类,按我理解,就是业务修饰符可以扩大,但风险就是异常要降低,开源节流返回的范围值要更小。
说下Java的内存模型!我不知道什么是Java的内存模型,是JVM吗?不是!卒。
Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。Java内存模型规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存中保存了该线程中是用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存。不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量的传递均需要自己的工作内存和主存之间进行数据同步进行。而JMM就作用于工作内存和主存之间数据同步过程。他规定了如何做数据同步以及什么时候做数据同步。
String、StringBuffer和StringBuilder之间的区别?它们底层都是对char数组进行操作的。String是用final修饰的不可变字符串,所以每次加的时候都会生成新的String,JDK8之前String是放在方法区的变量池,JDK8及之后被放到了堆中的字符串常量池,所以不用new的话都会去常量池查找一下,存在的话就不生成新的了。StringBuffer和StringBuilder都是继承的AbstractStringBuilder,它们的内部方法可以对char数组组成的字符串可以进行各种操作,包括append等,不会像String那样生成新的对象,只有一个对象。其中StringBuffer的每一个方法都加了Synchroinzed修饰,所以他是线程安全的。在大量的字符串操作中,性能表现为StringBuilder,StringBuffer次之,String最后。
ArrayList和LinkedList的区别?ArrayList的底层是数组,初始化的时候会生成一个定长的数组,超过指定长度后会自动扩容,随机下标查询的时候最快,复杂度O1,但删除就要移动后面的数组向前,而LinkedList的底层是链表,随机下标查询肯定要慢些,因为要一个个移动,但是删除就很快,找到之后就直接通过指针移动,因为储存指针,也更占内存。
为什么用Map的情况下,在一百个数里查找的时间和在一百万个数据里查找的时间是一样的。应该只是想说Hash算法吧,就是利用hash函数来做,并且解决冲突。可以说说list和set的查找吗, 感觉这个问题好奇怪,更觉得没有可比性,不回答。
说说有哪些Queue,现在还记得有ArrayBlockingQueue, LinkedBlockingQueue,PriorityQueue这些还有的不容易记住。
创建线程的方式有哪些?三种,第一个是继承Thread,第二个是实现Runable,第三个是实现Callable,这个可以和Future配合返回线程结果。
try-catch有什么认识?用来捕抓异常的,当程序发生异常的时候可以被catch掉,然后在catch方法体里面可以做一些异常处理。同时还有一个finally,是在主体return之前执行的,一般用于关闭资源等操作。
用过哪些package?lang、util、io、net、sql。。。
多线程用过吧?那你说下synchronized的原理?synchronized底层原理是借助JVM来实现的,当一个对象被锁的时候,会调用底层方法进行monit enter,这个实现对象头会标上线程标识,还有第几次加锁,这样可以让锁变得可重入,当锁释放的时候,会调用monit exit,也是一个悲观锁。它修饰在普通方法那里就是对对象加锁,修饰在静态方法就是对类加锁。后面它的优化加了偏向锁,自旋锁/适应性自旋锁,轻量级锁,锁粗化,锁消除。
ThreadLocal使用过吗?使用过的,例如平时单机服务器上验证完登录用户后,把用户信息存放在ThreadLocal中,需要用的时候可以直接get出来。ThreadLocal的作用就是为当前运行线程准备一个专属数据,其他线程访问不到,只有自己可以,也不会存在什么并发问题,但是用完记得要remove掉,因为key为弱引用,value不是,可能value不被GC会造成内存泄露或堆栈溢出。内存泄露?像栈底元素一直被引用着但又一直不用,map中key被改了hashcode,value就找不回了等等。
读者可以会觉得还有很多Java的内容没说到,JVM/JUC这些会有另外章节,后续大概思路会和前面的迷你版第一版Java面试知识点汇总类似。本章节如有补充,狠求留言。
第一版Java面试知识点汇总下载:https://pan.baidu.com/s/1MxKXIZtoBd57pTwTIDyrgA 提取码: 3arb。
相关阅读:
飞越面试官(一)--Java基础的更多相关文章
- 飞越面试官(三)--JVM
大家好!我是本公众号唯一官方指定没头屑的小便--怕屁林. JVM,全称Java Virtual Machine,作为执行Java程序的容器,几乎代理了Java内存与服务器内存的交互,可以说是程序拥 ...
- 飞越面试官(二)--JUC
大家好!我是本号唯一官方指定没头屑的小便--怕屁林. JUC是什么东西?我相信很多经验尚浅的小伙伴部分都会为之一懵,我也是,三个字母都会读,连在一起就不知道在说什么,其实如果把它的全称写出来,“jav ...
- 【对线面试官】Kafka基础入门
<对线面试官>系列目前已经连载33篇啦,这是一个讲人话面试系列 [对线面试官]Java注解 [对线面试官]Java泛型 [对线面试官] Java NIO [对线面试官]Java反射 &am ...
- 面试官:Java中对象都存放在堆中吗?你知道逃逸分析?
面试官:Java虚拟机的内存分为哪几个区域? 我(微笑着):程序计数器.虚拟机栈.本地方法栈.堆.方法区 面试官:对象一般存放在哪个区域? 我:堆. 面试官:对象都存放在堆中吗? 我:是的. 面试官: ...
- 【对线面试官】Java多线程基础
// 请求直接交给线程池来处理 public void push(PushParam pushParam) { try { pushServiceThreadExecutor.submit(() -& ...
- JAVA面试精选【Java基础第一部分】
这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对于那些正打算找工作JAVA软件开发工作的童 ...
- 大厂面试官:Java工程师的“十项全能”
想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,在面试之前到底需要准备哪些东西呢?面试时面试官想了解你的什么专业技能,以下都是一个合格Java软件工程师所要具备的. 一.专业技能 熟练的 ...
- 面试又被 Java 基础难住了?推荐你看看这篇文章。
本文已经收录自 JavaGuide (59k+ Star):[Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识. 1. 面向对象和面向过程的区别 面向过程 :面向过程性能比面 ...
- 面试官:Java序列化为什么要实现Serializable接口?我懵了
整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 ...
随机推荐
- java实现第七届蓝桥杯剪邮票
剪邮票 题目描述 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所 ...
- struts 通配符的使用
使用通配符可以将配置量降到最低,十分方便 新建一个javaweb项目 在项目中加入Struts.xml( 选中项目右键MyEclipse-->project facets-->Struts ...
- k8s学习-资源控制器
4.3.资源控制器 4.3.1.概念 Kubernetes中内建了很多种controller(控制器),这些相当于一个状态机,用来控制Pod的具体状态和行为. 4.3.2.分类 Replication ...
- 如何通过AzureAD平台提供的授权方式访问sharepoint online
官方文档: 1.https://docs.microsoft.com/zh-cn/previous-versions/azure/dn645543(v=azure.100)?redirectedfro ...
- shell编程(一):功能、执行、基础
1.shell的功能 (1)自动化批量初始化系统:对N台系统初始化(装系统时对系统的时区.yum源.软件包的更新.安全的设置进行初始化) (2)自动化批量部署软件程序:(LAMP/LNMP/Tomca ...
- Cypress系列(17)- 查找页面元素的辅助方法
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前言 单一的基础定位元素方法并不一定能满 ...
- Jquery封装:下拉框插件
代码如下: ;(function ($, window) { $.fn.addSelect = function (options) { //合并传入与默认的参数 var opts = $.exten ...
- Bumped!【迪杰斯特拉消边、堆优化】
Bumped! 题目链接(点击) Peter returned from the recently held ACM ICPC World Finals only to find that his r ...
- Seafile的配置
如果部署在apache或nginx后面,就是访问默认80或443.反向代理会帮你转到8000和8082上. 我使用443,我在路由器上设定了转发,比如 对外网12323这个端口会转到内网地址443上 ...
- (一)POI-新建excel文件
原文:https://blog.csdn.net/class157/article/details/92799521 package com.java.poi; import org.apache.p ...