类加载过程
类的加载过程
前言一开始并不了解具体的过程,但是随着工作,只能够单纯的撸代码已经不能满足现状了,为了更好的生活,为了有更好的工作,需要去努力的学习。今天在工作的时候,自己摸鱼没事写SpringBoot项目的Demo,我习惯性的会吧映射文件放到resources文件夹下,但是在我使用postman去调接口时,console面板一直报Invalid bound statement (not found): com.goul.app.mapper.MainMapper.xxx 这就让我很郁闷,在参考淼淼之森和 陈大豆两位的文章后,算是解决了自己的问题,而且在这之后我看到了网上有人说,你可以在编译完成后去classes文件下看,如果你的mapper映射文件加载进去了就一定是可以的,然后就慢慢开始往这方面的文章去看,一直到现在的类加载。 其实类加载作为面试的热门问题,这方面的回答应该就烂大街了属于是😎,在此给自己总结一下将来方便自己复习。类加载过程
大致过程为:加载 –> 连接 –> 初始化 –> 使用 –> 卸载,这其中最主要的就是加载、连接、初始化这三个过程。1. ...
面试汇总
面试题汇总Sychnorized和volatile的区别首先需要理解线程安全的两个方面:执行控制(Sychnorized)和内存可见(volatile)。
volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取; synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的
volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性
volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。
volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化
Java中Thread类的start()方法和run()方法区别,分别直接调用会怎样
start():用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start ...
React + Spring Boot 生成验证码
React + Spring Boot 生成验证码在网上找了好久,一直没有找到关于React方面动态加载验证码的,经过自己一通操作,终于成功了,但由于整个业务逻辑简单,只适合于小项目.
后端先看一眼后端代码(后端返回的直接是一个.png类型的图片.),整体分为两部分,一个负责接口并画图,一个负责生成验证码(当然了,画图和验证码可在同一个方法里实现,这个看个人).不多说,直接上代码
生成验证码
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455public class VerifyCode { public static String drawRandomText(int width, int height, BufferedImage verifyImg) { Graphics2D graphics = (Graphics2D)verifyImg.getGraphics(); g ...
重写与重载
重写和重载的区别重写(overriding重写是子类和父类多态性的表现,是子类重写父类的方法。子类重写父类的方法与父类中的方法有==相同的方法名==,返回类型和参数列表,子类函数的访问修饰符==大于等于父类==,重写方法==不能==抛出新的检查异常或者比重写方法更加==宽泛==的检查异常
重写规则 :参数列表和返回类型必须与被重写的方法一致,重写的方法的访问权限要大于等于被写方法的权限,不能抛出新的检查异常或者更加宽泛的异常,比如父类方法中声明了一个检查异常是IOException,在重写这个方法的时候就不能重新抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常
举个栗子 :12345678910111213141516171819202122public class Father { public static void main(String[] args) { // TODO Auto-generated method stub Son s = new Son(); s.say ...
面向对象的特征
面向对象的特征有哪些?一、封装和隐藏
封装是把对象的状态数据隐藏起来,再通过暴露合适的方法来允许外部程序修改对象的状态数据。Java 的封装主要通过private、protected、public 等访问控制符来实现。
Java中通过将数据声明为私有的(private),再提供公共的(public)方法:getXxx()和setXxx()实现对该属性的操作
目的
隐藏一个类中不需要对外提供的实现细节;
使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
便于修改,增强代码的可维护性;
举个栗子(封装
1234567891011121314151617181920public class Main { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name ...
初来乍到
作为自己的博客,一定好好努力去写,努力去钻研,努力去撸代码!!!
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment