深圳店小秘Java后端面试

1.笔试

1.JDKJVMJREJIT是什么?

  • JDKJava Development Kit。是Java开发工具包,提供Java编程语言内库。
  • JVMJava Virtual Machine。是Java虚拟机,将.java文件加载为.class文件,并使Java程序运行。
  • JREJava Runtime Environment。是Java运行时环境。
  • JITJust In Time CompliactionJava即时编译器,将Java对应的字节码文件转换为机器码文件。

2.session是什么,sessioncookie的关联是什么?

  • cookie可以存储在本地或者浏览器,session只能存储在服务端。
  • cookie只能存储String字符串,session可以存储任意Java对象。
  • cookie没有session安全,因为前者在客户端,后者在服务端。
  • cookie存在于客户端,不会占用服务器性能,session存在于服务端,session过多会给服务器造成压力。
  • cookie最大不能超过4k,浏览器会限制一个网站的cookie存储数量,一般为20个。session没有大小限制只与服务器内存相关。

3.ErroException的区别是什么?

ErrorException都是Throwable的子类, 在Java中只有Throwable类型的实例才可以被抛出或者捕获,它是异常处理机制的基本类型。

ErroeException体现了Java平台设计者针对不同异常情况的分类,Exception是程序正常运行中,可以预料到的意外情况,可以被捕获并进行相应的处理。

Error是指正常情况下,不大可能出现的情况,绝大部分的Error会导致程序处于非正常的,不可恢复的状态,不需要捕获,因为就算你捕获到了也没任何意义。常见的OutOfMemoryErrorError的子类.

Exception分为可检查异常checked和不可检查异常unchecked。可检查异常在源代码里必须显式的进行捕获处理,这是编译期检查的一部分,不可检查异常是指运行时异常,比如NullPointerExceptionArrayIndexOutOfBoundsException之类,通常是可以编码避免的逻辑错误,具体根据需要来判断是否需要捕获,并不会在编译期强制要求。

其实不需要回答这么多。我的回答就是:Error会导致程序处于非正常,不可恢复的状态。

4.什么是GC?为什么有GC?调用GC的方法有哪几种?

GCGarbage Collection,字面意思是垃圾回收。

Java中每创建一个对象就会在JVM中的堆内存中为对象开辟一段内存空间用于存储该对象。由于Java中大多对象的存活期都很短,而JVM的堆内存并不是无限大的,堆内存的大小是有限的。所以当堆内存被使用完时,而又有创建新生对象的需求,此时堆内存中可用空间不足以为新生对象分配内存,此时就需要对堆内存进行垃圾回收也就是GC,将系统中不再使用的Java对象当作垃圾回收掉,释放占用的堆内存空间为后续新生对象使用。JVM采用分代收集策略进行垃圾回收,对于新生代有MinorGC,对于老年代有Major GC,对于整堆有Full GC

System.gc();Runtime.getRuntime.gc();java.lang.management.MemeoryMXBean.gc();

熟悉JVM堆相关的,这一块基本没难度,用自己的话概括一下就行,面试官也不会仔细看,因为看还不如直接问你问题来的直接。

5.StringStringBuffer的区别是什么?

  • String:被final修饰,不可变字符串。
  • StringBuffer:可变字符串,线程安全,效率低于StringBuilder

6.String s = new String("xyz")创建了几个String Object

  • 当在JVM堆中的字符串常量池中存在xyz时,只会在对上创建一个s字符串对象。此时创建一个String Object
  • 当在JVM堆中的字符串常量池中不存在xyz时,会在堆上的字符串常量池中创建一个xyz字符串对象,然后在堆中创建一个s字符串对象,并将s字符串对象中的值引用指向字符串常量池中的zyx字符串对象。此时创建两个String Object

7.Math.round(11.5)Math.round(-11.5)的结果

// 坐标轴向下取整
Math.round(11.5) = 12;
Math.round(-11.5) = -11;

8.finalfinallyfinalize分别有什么意义?

final:可修饰字段、方法、类。修饰字段表示该字段不可变,修饰方法表示该方法不能被重写覆盖,修饰类表示该类不可继承。

finally:配置try...catch...finally使用的代码块。

finalize:在对象被回收之前,显式调用用于释放一些资源。对于每个即将回收的对象,JVM都会调用一次finalize方法。

9.Abstract Classinterface的区别

  • 抽象类可以提供成员方法的具体实现,而接口中只能定义方法签名不能定义方法体。
  • 抽象类中的成员变量可以为任意类型的变量,而接口中的变量只能为public static final常量。
  • 抽象类中可以存在静态代码块和静态方法,而接口中不能。
  • 一个类只能继承一个抽象类,但是却可以实现多个接口。

10.Java实现线程的方式有哪几种?

  • 继承Thread类,重写run()方法。
  • 实现Runnable接口,重写run()方法。
  • 实现Callable接口,重写call()方法。
  • 使用Executors类提供的静态方法。

11.以下代码输出结果是什么?

public class A {static {System.out.println("Hello Word!");}public static void main(String[] args) {A a = new A();a = new A();}}

输出Hello Word!

非常简单,因为一个类的静态代码块只会在类加载时器的Linking链接中的parpare准备阶段中执行一次,可以理解为静态先行。

12.以下代码输出结果是什么?

public class IntegerTest {public static void main(String[] args) {Integer a = new Integer(155);Integer b = new Integer(155);if (a == b) {System.out.println(true);System.out.println(true);}}}

无任何输出。

这个原因其实也很简单,因为Java中大多数的基本数据类型都开启了享元模式,Integer类中有一个IntegerCache静态内部类,IntegerCache类会在类中维护一个cache数组,用于存Java默认创建的-128 ~ 127对象。在[-128, 127]范围内的整型变量,Integer类会默认从IntegerCache.cache[]中根据数组下标获取,而不会去堆中创建一个新的Integer对象。当超出[-128, 127]这个范围的整型,Integer才会在堆中new一个对象。

Java8种基本数据类型的包装类除了FloatDouble没有实现常量池,其余的类型都实现了。

13.什么是数据库事务?

​ 事务是数据库中最小的执行单元。作为单个逻辑单元执行的一系列操作的集合,它不可分隔,这些操作会一起像数据库操作系统提交,要么都执行,要么都不执行。

14.什么是索引?索引的缺点是什么?有哪些索引?你用过哪些索引?

索引是一种特殊的数据存储结构,能够加快数据检索的速度。

缺点是索引需要维护,维护索引需要额外的时间与性能开销。同时也会占用物理内存。

主键索引、辅助索引、唯一索引、覆盖索引。

使用过主键索引、联合索引、唯一索引(不推荐使用,在写数据时不能使用change buffer)、覆盖索引、索引下推。

15.现在有一个表A(name, email),查询出表A中的name以及name重复的次数,按照重复次数从大到小取前10条

SELECTa.name,COUNT(a.name) num
FROMa a
GROUP BYa.name
ORDER BYCOUNT(a.name) DESC
LIMIT 10;--
SELECTt.name,t.num
FROM(SELECTa.name,COUNT(a.name) numFROMa aGROUP BYa.name) t
ORDER BYt.num DESC
LIMIT 10;

16.写出你熟悉的key/value数据库

redis

实话实说,我就只用过rediskey/value数据库。不要给自己挖坑,会什么写什么。

17.常用Linux命令

rm -rf  删除
touch ${filename}  创建文件vim ${filename}  查看文件
i  进入插入模式
ESC  退出
:wq  保存退出
:q!  不保存退出
:q   不保存退出cat ${filename}  查看文件的最后一页
more ${filename}  从第一页开始查看文件内容, 按回车键一行一行进行查看, 按空格键一页一页进行查看, q退出
less ${filename}  从第一页开始查看文件内容, 按回车键一行一行的看, 按空格键一页一页的看, 支持使用PageDown和PageUp翻页, q退出tail -f ${filename}  查看文件的后10行
head -f ${filename}  查看文件的前10行tail -n 7 ${filename}  查看文件的后7行
head -n 7 ${filename}  查看文件的前7行sed -i '1d' ${filename}  删除文件第一行
sed -i '2d' ${filename}  删除文件第二行grep ${keyword} ${filename}  在文件中搜索keyword字符串,大小写敏感,显示行
grep -n ${keyword} ${filename}      在文件中搜索keyword字符串,大小写敏感,显示行及行号
grep -v ${keyword} ${filename}      在文件中搜索keyword字符串,大小写敏感,显示没搜索到的行
grep -i ${keyword} ${filename}      在文件中搜索keyword字符串,大小写敏感,显示行
grep -ni ${keyword} ${filename}         在文件中搜索keyword字符串,大小写敏感,显示行及行号head -n 10000 ${filename} > ${filename1}  复制filename文件的前10000行到filename2

18.如何在vi中删除某一行

dd   删除当前行
ndd  删除n行数据
dG   删除当前行之后的全部行

19.编写一个冒泡排序或者二分排序

    public static int[] doBubbleSort(int[] arr) {if (arr == null || arr.length < 2) {return arr;}int n = arr.length;for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {swap(arr, j, j + 1);}}}return arr;}private static void swap(int[] arr, int i, int j) {arr[i] = arr[i] ^ arr[j];arr[j] = arr[i] ^ arr[j];arr[i] = arr[i] ^ arr[j];}

这里可以使用无进制位相加骚一下。但是使用异或的前提是需要保证两个变量在堆内存中的地址不能为同一个,使用是有前提的,不要骚过头了!!!

20.写出一个单例

public class DCLSingleton {private DCLSingleton() {}private static volatile DCLSingleton instance = null;public static DCLSingleton getInstance() {if(instance == null) {synchronized (DCLSingleton.class){if(instance == null) {instance = new DCLSingleton();}}}return instance;}}

还可以用静态内部类。记得私有化构造器,细节。

21.写出最有效率遍历Map集合的方法

        Map<String, Object> map = new HashMap<>(1 << 4);map.forEach((key, value) -> {System.out.println("key is : " + key + " value is : " + value)});

forEach()底层使用的是entrySet进行遍历,所以这就是最有效率最优雅的遍历方式。ps个人认为。

​ 笔试没难度,就是要花时间写。用电脑用久了,突然一下需要写这么多还是有点不习惯,特别是有些字还忘记了怎么写!!!

​ 笔者笔试后就是HR面,然后就是部门组长技术面,技术负责人技术面,HR面。下午两点去的,最后弄完都快六点,说了一下午都没给杯水喝,喉咙都快说破了。面试之前记得自己买瓶水!!!

鉴于本人技术有限,文中难免出现一些错误,感谢大家批评指正。

深圳店小秘Java后端面试相关推荐

  1. 木瓜移动每周跨境资讯:TikTok测试Jumps,店小秘收购17TRACK,Facebook推出新闻通讯平台Bulletin

    出海相关 TikTok要在海外推"小程序"了.近日,TikTok测试了一项叫做 Jumps 的新功能,该功能下创作者可以将一些第三方 App 以类似"微信小程序" ...

  2. 面试题:460道Java后端面试高频题答案版「模块九:Spring」

    Spring 写在前面 相信对于 Spring 这个模块,只要是做过 Java 开发的同学都是不陌生的,或多或少都使用过 Spring 体系的框架.对于平时自己做点小项目会写配置文件可能就行了,但是对 ...

  3. 《Java 后端面试经》Java 基础篇

    <Java 后端面试经>专栏文章索引: <Java 后端面试经>Java 基础篇 <Java 后端面试经>Java EE 篇 <Java 后端面试经>数 ...

  4. 2020互联网Java后端面试必备解析—SpringCloud篇

    学习导图 这篇文章来分享一下面试必备的Spring Cloud问题解析! 用XMind画了一张导图记录 Spring Cloud 的学习笔记和一些面试解析 1.什么是微服务 微服务是一种架构⻛格,也是 ...

  5. java后端面试大全,java后端面试宝典

    文章目录 -2 flink -1 linux of view linux查看占用cup最高的10个进程的命令: 〇.分布式锁 & 分布式事务 0-1分布式锁--包含CAP理论模型 概述 分布式 ...

  6. 三年半Java后端面试经历

    转载自  三年半Java后端面试经历 经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于开始重拾面试信心,再次出征. 鹅厂 面试职位:go后端开发工程师,接受从Java转语言 都知道 ...

  7. JAVA后端面试100 QA之第一篇

    转载自  JAVA后端面试100 Q&A之第一篇 1. synchronized和reentrantlock异同 相同点 都实现了多线程同步和内存可见性语义 都是可重入锁 不同点 实现机制不同 ...

  8. 微信运动步数:小程序+Java后端,源码可下载

    微信运动步数:小程序+Java后端 更多资源:www.jeeweixin.com 功能说明: 1.获取和展示用户的微信运动步数,计算卡路里: 2.用户打开小程序即可实现步数打卡入库: 3.通过日历展示 ...

  9. shopee上架接口java_Shopee虾皮店小秘ERP刊登发布产品图文教程

    Shopee虾皮店铺开通了,如何进行产品刊登发布呢?其实可以利用各类ERP软件进行刊登或者发布,发布产品的速度很快.但是也有很多刚开始进入Shopee的小白,不清楚如何快速的发布及刊登产品,这里虾皮路 ...

最新文章

  1. mysql5.7忘记root密码的修改方法
  2. 正则在开发过程中的妙用
  3. python模拟sed在每行添加##
  4. Mybatis传入参数类型为ListIntergert作为条件进行查询
  5. 前端_网页编程 Form表单与模板引擎(下)
  6. 昇腾AI处理器软件栈--任务调度器(TS)
  7. 边框border(HTML、CSS)
  8. (转载) AT指令详解
  9. Ztree 改 节点
  10. 通过360安全卫士安装IE补丁后,IE浏览器会出问题
  11. oracle 弱口令扫描器,批量扫描弱口令检查工具
  12. 电脑没有声音显示未启用音频输出设备怎么处理
  13. 【PAT刷题甲级】部分笔记1065-1155~(下)
  14. 过去式-ed的发音规则
  15. CORE | AAAI2020:分子自动优化模型
  16. 海思AI芯片(35xx):板端运行报错
  17. 应用程序无法运行,不是有效的Win32位程序解决(新手向)
  18. 超级猪周期拐点未到,用“数”养猪的春天却已来?
  19. HDU6438 Buy and Resell
  20. pycharm库的下载和常见错误

热门文章

  1. 适合学计算机学生喝的茶,学生喝什么茶能够提高记忆力
  2. SQL select详解(基于选课系统)
  3. 图解ArcGIS数据三维显示
  4. 从0开始实现一个合成大西瓜
  5. 当你已经25:男生女生都该看
  6. 内存管理Memorynbsp;OC——第九天
  7. 基于域对抗图卷积网络的多变环境下故障诊断
  8. hdu(杭电oj)第一页题目题解
  9. 20210507新版友价框架制作江雀网店交易天猫淘宝京东拼多多唯品会网店转让送手机版系统
  10. 【狂神说:秦疆】SpringMVC笔记