飞越面试官(一)--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实现 LeetCode 331 验证二叉树的前序序列化
331. 验证二叉树的前序序列化 序列化二叉树的一种方法是使用前序遍历.当我们遇到一个非空节点时,我们可以记录下这个节点的值.如果它是一个空节点,我们可以使用一个标记值记录,例如 #. _9_ / \ ...
- IDEA突然无法运行
可能是你类的main方法被idea的智能提示改了 PS: 小编经常用智能提示,它给我把main方法的static关键字删掉了好几次,当时怎么也没想到是把main方法改了 ~难受
- java实现第四届蓝桥杯连号区间数
连号区间数 题目描述 小明这些天一直在思考这样一个奇怪而有趣的问题: 在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是: 如果区间[L, R] 里的所有元素(即此排列的第L个到第R ...
- KVM Web管理平台 WebVirtMgr
WebVirtMgr介绍 WebVirtMgr是一个KVM管理平台,让kvm管理变得更为可视化,对中小型kvm应用场景带来了更多方便.WebVirtMgr采用几乎纯Python开发,其前端是基于Pyt ...
- 使用Json框架解析遇到Java关键字时的解决方案
当Json数据中的key为Java关键字时,在定义实体类的时候不能对该字段进行声明,所以需要对字段进行特殊处理 使用Gson解析 在与Java关键字冲突的字段加上@SerializedName注解 @ ...
- javaScript的执行机制-同步任务-异步任务-微任务-宏任务
一.概念理解 1.关于javascript javascript是一门单线程语言,在最新的HTML5中提出了Web-Worker,但javascript是单线程这一核心仍未改变.所以一切javascr ...
- jquery 手写一个简单浮窗的反面教材
前言 初学jquery写的代码,陈年往事回忆一下. 正文 介绍一下大体思路 思路: 1.需要控制一块区域,这块区域一开始是隐藏的. 2.这个区域需要关闭按钮,同时我需要写绑定事件,关闭的时候让这块区域 ...
- 伪造随机的User-Agent
写好爬虫的原则只有一条: 就是让你的抓取行为和用户访问网站的真实行为尽量一致 1.伪造UA字符串,每次请求都使用随机生成的UA 为了减少复杂度,随机生成UA的功能通过第三方模块库fake-userag ...
- Dubbo——服务目录
引言 前面几篇文章分析了Dubbo的核心工作原理,本篇将对之前涉及到但却未细讲的服务目录进行深入分析,在开始之前先结合前面的文章思考下什么是服务目录?它的作用是什么? 正文 概念及作用 清楚Dubbo ...
- 《Java并发编程的艺术》 第9章 Java中的线程池
第9章 Java中的线程池 在开发过程中,合理地使用线程池能带来3个好处: 降低资源消耗.通过重复利用已创建的线程 降低线程创建和销毁造成的消耗. 提高响应速度.当任务到达时,任务可以不需要等到线程创 ...