飞越面试官(一)--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中PipedStream管道流通信详细使用(详解)
多线程使用PipedStream 通讯 Java 提供了四个相关的管道流,我们可以使用其在多线程进行数据传递,其分别是 类名 作用 备注 PipedInputStream 字节管道输入流 字节流 Pi ...
- Java实现 洛谷 P2089 烤鸡
import java.util.Arrays; import java.util.Iterator; import java.util.LinkedList; import java.util.Sc ...
- PAT A+B和C
题目描述 给定区间[-2的31次方, 2的31次方]内的3个整数A.B和C,请判断A+B是否大于C. 输入描述: 输入第1行给出正整数T(<=10),是测试用例的个数.随后给出T组测试用例,每组 ...
- 为什么阿里巴巴Java开发手册中强制要求接口返回值不允许使用枚举?
在阅读<阿里巴巴Java开发手册>时,发现有一条关于二方库依赖中接口返回值不允许使用枚举类型的规约,具体内容如下: 在谈论为什么之前先来科普下什么是二方库,二方库也称作二方包,一般指公司内 ...
- 如何监控 Linux 服务器状态?
Linux 服务器我们天天打交道,特别是 Linux 工程师更是如此.为了保证服务器的安全与性能,我们经常需要监控服务器的一些状态,以保证工作能顺利开展. 本文介绍的几个命令,不仅仅适用于服务器监控, ...
- 获取Google浏览器保存的密码
获取Google中保存的密码 直接在浏览器上输入 chrome://settings/passwords
- AndroidCamera开发学习笔记01
概述 Android框架支持设备的相机拍照和录像功能 可以直接调用系统的Camera应用来拍照或录像 也可以利用Adroid系统提供的API开发Camera应用来实现拍照和录像的功能 注意事项 需要硬 ...
- N47-冯天驰-学习进度计划表
马哥就业课程学习进度规划--N47-冯天驰 第一周 6.1-6.7 8. 06- ...
- HTTP协议浅析(一)
先来看看百度百科对HTTP的解释 http是一个简单的请求-响应协议,它通常运行在TCP之上.它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应.请求和响应消息的头以ASCII码形式给出: ...
- c# 不同单例的不同意义
前言 在c#,可能有很多五花八门的单例给你选择,分什么懒汉模式等等什么模式,其实不同的写法对程序是有一定影响的. 正文 为什么需要单例呢?其实我们自己是可以控制单例的,只是单例模式给了我们一个好的设计 ...