
个人简介:
📦个人主页:赵四司机
🏆学习方向:JAVA后端开发
📣种一棵树最好的时间是十年前,其次是现在!
🔔博主推荐网站:牛客网 刷题|面试|找工作神器
💖喜欢的话麻烦点点关注喔,你们的支持是我的最大动力。
前言
由于很快到了金九银十的秋招季节,博主最近也在找一些面经资源,但是发现很多都不全,后来我发现了牛客网这个网站,发现里面不仅可以看面经,还能刷题模拟面试,要是你要找各种招聘信息也可以在上面找到,我愿称之为程序员必备网站,下面把它推荐给你们!
链接地址:牛客网

堆:JVM管理的最大一块内存空间,存放对象实例,它是所有线程所共享的一块区域。在虚拟机启动的时候创建,该区域的唯一目的就是为了存放对象实例,几乎所有通过new创建的实例对象都会被分配在该区域。
栈(虚拟机栈):也可以称为虚拟机线程栈,存放对象引用,它是JVM中每个线程所私有的一块空间,每个线程都会有这么一块空间。它的生命周期是与线程的生命周期是绑定的。虚拟机栈描述了Java中方法执行时的内存模型,即每个方法被执行的时候,线程都会在自己的线程栈中同步创建一个栈帧(Stack Frame),用于存放局部变量表、操作数栈、动态连接和方法出口等信息,每个方法从调用到完成的过程,就对应着一个栈帧在线程栈中从入栈到出栈的过程。
本地方法栈:本地方法栈与虚拟机栈的作用是相似,不同的是虚拟机栈为JVM执行的Java方法服务,而本地方法栈为JVM调用的本地方法服务。HotSpot虚拟机直接把本地方法栈和虚拟机栈合二为一。
程序计数器:只需要占用一小块的内存空间,每个线程都会有自己独立的程序计数器,主要功能就是记录当前线程执行到哪一行指令了,可以看作是当前线程所执行的字节码行号指示器。
方法区(元空间):在JDK 8之前,方法区也称之为永久代(在虚拟机设置的内存中),这部分区域与堆一样,是所有线程所共享的,它主要用于存放被虚拟机加载的类型信息、常量、静态变量以及即时编译器编译后的代码缓存等数据。对于一个Class文件,除了版本、字段、方法、接口等描述信息外,还有常量池表,在上一篇文章《JVM类加载机制》中提到过,主要用于编译器生成的各种字面量和符号引用,而这部分内容在Class文件加载后是存放在方法区的运行时常量池中。这个运行时常量池自然还包括了字符串常量池,但需要注意的是,在JDK 7以后的版本中,字符串常量池和静态变量等被移至到了Java堆区,而到了JDK 8,抛弃了之前永久代的概念,通过在本地内存中实现了元空间(Meta-space)来代替永久代,并把JDK 7中永久代剩余内容(主要是类型信息)全部移至到了元空间。



String s1 = “aaa”:
String s2 = new String(“bbb”):

String str = “abc”;
String str1 = “ab” + “c”;
System.out.println(str == str1); //true
解析:这种情况的编译阶段就可以确定,程序执行str1 = “ab” + "c"时候,首先会在字符串常量池中寻找是否存在内容为"abc"的对象,由于str=“abc”,这时候字符串常量池中已经存在该对象,这时候str1引用就会直接指向该对象。
String st1 = “abc”;
String str2 = “ab”;
String str3 = str2 + “c”;
System.out.println(str1 == str3); //false
解析:这种情况由于涉及到变量,在编译期间不能确定,只能在运行时候确定,就会在堆中产生新的对象"abc",类似于new,其内部实现是先new一个StringBuilder,然后调用append方法,最后让str3引用toString返回的对象。





写SQL语句时候起别名
在Mybatis的全局配置文件中开启驼峰命名规则

在Mapper映射文件中使用resultMap来自定义映射规则。






温馨提示:上面只是我总结的面经知识,如果你想要更全面的可以到网站自行查看喔。
友情链接:牛客网