最近找Java开发工作,面试了20多家,随着不断汲取前面面试经验,补充知识盲点,优化回答语言表达,后面面试拿到offer成功率大大提升,现把面试中问到的问题整理如下,希望对有需要的同行有所帮助,因为时间有限,答案后期整理了再逐步公布,目前先只提供问题。 2020.07.02鉴于小伙伴们强烈要求提供答案,但我目前时间有限,故对以下面试点进行粗略要点讲解,详细的还需要大家自己去查。 一、基础 1、字符串常量存储位置,new String()存储位置,==比较前面两种创建字符创结果,equals和==区别,字符串使用equals底层是怎么比较的。 String str1 = “abc”; String str2 = “abc”; String str3 = new String(“abc”); String str4 = “a” + “bc”; 判断以下true or false str1==str2 str1==str3 str1==str4 答案解析: (1)本题考查常量池位置(方法区)、对象位置(堆),==比较的是对象的地址,equals方法在于如何重新对象的equals方法,对于字符串,比较的是字符串的值,因为String的equals方法先比较的是字符创长度,再比较的是每个字符,完全相同才是true. (2) str1==str2为true,因为指向字符串常量池的同一个位置。str1==str3为false,以为方法区中内存地址不可能和堆内存地址相同,都不在一个位置。str1==str4为true,因为“a” + “bc”生成了一个新的对象”abc”,在常量池中位置相同。 2、String不能被继承,为什么,能被改变吗?为什么?怎样才能被改变,StringBuilder和StringBuffer区别,string为什么要加final修饰? 答案解析: (1)fianl修饰类、方法、变量。被fianl修饰的类不能被继承,final修饰的方法不能被重新,final修饰的常量不能被改变。 (2)StringBuilder快但非线程安全,StringBuffer慢点但线程安全。 (3)String被fianl修饰,主要考虑效率和安全性两个方面①final修饰的变量不能被修改,会安全些。②final修饰的字符串在常量池,如果存在,可以复用不必再new一个,提高效率,节省内存。 3、返回结果为多少,为什么 答案是;fianlly一定会执行,但返回值是2,不是3。对于本题,应该分两种方向考虑,如果return的是一个常量,在finally虽然执行,但不影响返回结果还是try后的结果,但是,如果是引用数据类型,譬如对象,结果会被影响,返回的是finally执行后的结果值。 4、既然Object是所有类的父类,说一下Object所拥有的方法及其用法。 答案解析:Object中的方法为:finalize(手动垃圾回收调用)、wait(线程等待让处锁)、notify(唤醒其他线程)、notifyall(唤醒其他所有线程)、toString、clone(默认浅拷贝,深拷贝需要实现Cloneable接口)、equals(比较内容取决于如何重写该方法)、hashCode(计算hash值) 5、HashMap底层原理,初始化长度,扩容情况,安全(注意1.7和1.8区别)Hashtable、ConcurrentHashMap、 答案解析:(1)Hashtable:线程安全,但不用,因为太慢。 (2)ConcurrentHashMap:线程安全,也比hashtable快,jdk1.7采用分段锁锁的包括多个HashEntry,1.8采用的锁是锁单个HashEntry,粒度更精细。 (3) HASHMAP扩容为什么是0.75(hash冲突最少,0.75只是个统计值,不同编程语言不同,但基本在0.75附近,) (4)什么是hash冲突,根据key可以计算出hashcode,不同的key可以计算出hashcode相同时,就冲突了。 (5)HashMap1.7用的数组加链表,1.8用的数组加链表加红黑树,当链表长度超过8变为红黑树。new HashMap时,没有指定长度,默认16,达到0.75负载时,2倍扩容,如果自己定义了,是2的n次方,则为该值,如果为非2的n次方,则比该数大的最近该数的2的n次方。 6、ArrayList底层,初始化长度,扩容,ArrayList和LinkedList内存情况区别 答案解析:(1) LinkedList:底层是双向链表,链表的特点是增删快,查找慢。 (2)Vector:安全,但效率低,不用。 (3)ArrayList:底层是数组,可以通过下标索引查,故查询快,增减了某个位置数据,会造成后面所有数据移动,故增删慢。 (4)相同长度时ArrayList比LinkeList节省内存 (5)ArrayList扩容机制,定义后为0,第一个add方法后长度为10,超过10,每次增加1.5倍扩容。 7、金融项目处理钱用的是Bigdecimal,底层是字符串处理 答案解析:一般鉴别是否做过金融项目的标准就是问算钱的数据类型用的什么,一般是进制用float、double的,因为他们不是精确地,会出现误差。Bigdecimal用来定义金钱数据类型,如果仅仅保存,不涉及到计算,当然字符串也行。 8、介绍一下访问者模式(这个有兴趣的自己查吧) 9、字节和字符区别,使用 字节流一般用于读取文件图片文档,字符用于读取文本,文本也可以用字节流读取。 9、数据加密RSA非对称,签名,对称AES,MD5 答案解析:对于RSA,记住口诀:公钥加密,私钥解密;私钥签名,公钥验签,工作中都有现成的工具类生公私钥对,加解密方法,验签方法;AES是对称加密,MD5一般用于登录密码加密。 二、多线程 1、多线程CAS是什么(change and swap),synchronize是什么,区别。 2、Synchronize关键字用法,底层原理。 3、锁的粒度 4、Lock用法,和synchronize区别。 5、volitale关键字作用 6、三种实现方式 7、线程状态: 8、线程池有几种,都哪几种,有啥特点 三、类的加载 1、什么时候会加载类。 2、类的加载流程,及每步作用。(加载、验证、准备、解析、初始化、使用、卸载) 3、三种加载类,关系,作用 4、双亲委托机制 四、jvm 1、内存模型(类加载器、运行时数据区、执行引擎、本地方法接口) 2、运行时数据区:分为5部分,2共享,3私有,每个部分存什么 3、判断对象是否可回收:可达性分析、程序计数法,区别,优劣,现在虚拟机用的哪个 4、堆内存分区(年轻代(Eden、survivor0、survivor1)、老年代),这两个区内存回收算法(复制算法、标记清除、标记整理),算法内容优劣。 5、G1垃圾回收算法,了解 6、jvm调优 7、分析内存的工具:jdk的bin下的: Jconsole:看堆、cpu情况,cpu时配合linux的top命令,jps看进程 Jmap快照看堆情况 8、调整内存参数:主要有 方法区:-Xss 堆:-Xms、-Xmx 五、spring 1、加载类到spring容器的方式 2、springboot的常用注解 3、aop、ioc 4、动态代理:jdk的动态代理、cglib的动态代理区别 5、反射 6、springboot的starter的工作原理,常用的start方法 7、项目中用到的定时器,有哪些,怎么用的 六:springMVC 七:算法: 1、栈特点,堆特点 2、如何用两个栈模拟队列(pust方法、pop方法) 3、斐波那契问题 4、二分搜索求根5的值,精确到小数点后5位。 八:中间件;知道其中的几种 九:分布式微服务 十:事务 2、四个特性 3、隔离级别 4、传播机制(还会问嵌套异常时回滚情况) 5、如何使用(配置文件、注解(注解上的参数有哪些)) 6、能加try catch 吗?为什么?什么异常事务可以回滚?非运行时异常怎么也能回滚? 7、声明式事务、编程式事务 十一:Sql 2、执行计划 3、索引,作用,数据结构,二叉树,红黑树,BTree、B+Tree集中数据结构的区别 4、联合索引,失效情况。 5、索引使用规范(like模糊查询,什么情况下失效,什么情况不失效) 6、常用的sql函数,其中to_date怎么用 7、保险项目有问存储过程的 8、in最多能支持1000条,如何解决 9、mysql有几种执行引擎,其中innodb和myasam必须掌握特点和区别 10、用过的数据源 11、mysql、oracle、db2分页怎么处理 十二:体现个人解决问题思路: 十三:前端(因为我能做管理平台的简单页面,所以会简单问下前端) 十四: 常用linux命令,查看日志,查找单词、输出
int test(){ int x = 1; try { x=2; return x; } finally { x=3; } }
1、慢查询定位
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算