自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (1)
  • 收藏
  • 关注

转载 类加载过程

类加载过程据我从面经上来看,通常会问下知不知道类加载过程有哪些步骤?顺口而出,就是加载链接初始化,其中链接还包括验证准备解析。(这个时候最好就顺势展开各个点都做了些什么),加载的话,实现是根据类名获取定义此类的二进制文件流,这个步骤还提供自定义的,然后将二进制流储存所代表的静态储存结构转换成方法区/元空间运行时的数据结构,最后在内存中生成一个代表该类的Class对象,作为方法区/元空间这些数据的访问入口。那其他过程呢?简单来说,链接的过程包括验证准备解析,验证就是检查class文件的正确性,例如clas

2021-07-24 09:57:13 109

原创 docker 生成centos容器并安装MySQL,使用SQLyog连接centos容器里的MySQL

安装dockers中本来就安装了centos7j镜像,如下:所以直接生成centos7容器,docker run -itd -p 50022:22 -p 33010:3306 --privileged --name myCentos centos:7 /usr/sbin/init参数解析:-d ——后台运行容器并返回容器ID-i ——交互模式运行容器,通常与 -t 同时使用-t ——为容器重新分配一个伪输入终端,通常与 -i 同时使用–name ——为容器指定一个名称,此例为容器指定名

2021-07-19 11:43:47 480

原创 SQL注入

概念攻击者通过在表单中填写包含SQL关键字的数据,然后这些关键字被拼接到SQL语句中进而改变了SQL语句的原始语义,最终拼接后的恶意代码得到执行。避免或减少SQL注入把应用服务器的数据库权限降至最低,尽可能地减少 SQL 注入攻击带来的危害对数据库的特殊字符进行转义处理;避免网站打印出SQL错误的信息,把SQL语句保留出来,防止攻击者进行研究预编译语句,绑定变量。使用预编译的SQL语句过滤用户输入,不允许输入SQL注入相关字符...

2021-07-07 16:08:03 124

原创 HashMap是线程安全的吗?有什么线程安全的方法

总结HashMap在并发场景中不是线程安全的。比如A希望插入一个key-value对到HashMap中,当获取到对应的链表结点位置时,此时线程A的时间片用完了,而此时线程B被调度得以执行,可能线程B占用了A计算得到的位置,插入了数值。而线程A被切换回来的时候,不知道B已经插入了元素,仍然将元素插入此前计算好的位置,这样就会将B线程的插入记录覆盖掉了,这对应了多线程的put可能导致元素的丢失;JDK1.7 当扩容的时候,存在 Entry 链死循环和数据丢失问题(线程1的put和线程2的get并发,可能导致

2021-07-06 21:52:58 8876

原创 升级Springboot版本异常 Parameter * of method linkDiscoverers in org.springframework.hateoas.config.Hateoas

升级Springboot版本,执行代码报错解决方法:修改swgger版本<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version></dependency> <dependency>

2021-07-05 21:38:27 342

原创 Java泛型的记录

泛型::参数化的类型(把类型当作是参数一样传递)定义时不指明参数的类型,使用的时候再指明参数的类型提高代码的复用性它提供了编译期的类型安全,确保你只能把正确类型的对象放入集合中,避免了在运行时出现ClassCastException。类型擦除为了向下兼容,虚拟机其实是不支持泛型,所以Java实现的是一种 伪泛型机制,也就是说Java在编译期擦除了所有的泛型信息。所有的泛型类型最终都是一种原始类型,在Java运行时根本就不存在泛型信息。Java编译器具体是如何擦除泛型的检查泛型类型,获取目标

2021-07-05 10:21:39 83

转载 浅析Java集合框架

Set:无序,不可重复的集合List:有序,重复的集合Map:具有映射关系的集合Queue: 队列集合Java集合和数组的区别:(1)数组长度在初始化时指定,意味着只能保存定长的数据。而集合可以保存数量不确定的数据。(2)数组元素即可以是基本类型的值,也可以是对象。集合里只能保存对象(实际上只是保存对象的引用变量),基本数据类型的变量要转换成对应的包装类才能放入集合类中.Collection接口Collection的常用方法:使用Iterator遍历集合元素Iterator接口中..

2021-06-30 16:42:27 52

原创 Java中的对象和引用

概述对象:一般是指某个类(class)的一个实例(instance);对象引用:在Java中,指向某个对象存储地址,也就是指向一个对象的“引用”比如:Person person = new Person("张三");new Person(“张三”);是new了Person类的一个对象(在堆上创建),而Person person是声明一个可以指向Person类对象的引用person,与下面两行代码完全相同Person person;person = new Person("张三");由此可

2021-06-30 15:26:59 326

原创 问什么hsahmap的容量总是2的n次幂

概述我们知道hsahmap的底层是由链表和数组构成的,为了最有效的提高数据的存取效率,hashMap每次保存数据都是分散保存在不同的index位置上。如何实现数组的散列性呢?一般的想法可以是利用key值的哈希值(hash)对数组的长度(length)取余,即hash%length。但是hashMap的源码作者是利用一种更高效的计算手段,也就是利用哈希值和数组长度的二进制表示进行位运算,具体来说就是hash&(length-1),但是必须保证length等于2的n次幂。原理因为我们知道leng

2021-06-28 15:36:35 65

转载 详谈 http和https

超文本协议http协议实现web浏览器和网站服务器之间的信息传递。HTTP协议通过明文传输的方式进行内容发送,没有进行加密处理,浏览器和服务器之间传输的报文信息很容易被攻击者截取。因此http不适合一些敏感信息的传送,比如银行卡密码等。安全套接层接口超文本传输协议https是在http的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。该传输协议基本实现了:建议一个信息安全通道,来保证数据传输的安全确定网站的真实性。主要的区别如下:https协议

2021-06-28 11:07:14 169

原创 String类的.isEmpty()方法 空指针问题

最近,在实现网站国际化,从前端接受参数(字符串类型 language),在判断是否前端有参数传过来的时候,想用.isEmpty()进行判断,String language = request.getParameter("l");if(!language.isEmpty(language)){ //使用 _ 分割语言和国家 String[] s = language.split("_"); locale = new Locale(

2021-06-27 16:18:43 3296

原创 TCP协议:三次握手、四次挥手过程详解

概述:建立TCP连接通道(三次握手),传输数据,断开TCP连接通道(四次挥手),下图显示了TCP通信过程。1. 三次握手建立连接第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;服务器收到syn包,必须确认客户的SYN(ack=x+1),此时,服务器确认,客户端发送能力正常,服务端接收能力正常。第二次握手:服务器同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;客户端收到服务器的SYN+ACK包。此时

2021-06-23 10:55:02 5102

原创 HashMap的实现原理

HashMap概述在数据结构中,物理存储的数据结构只有两种,即数组和链表,其余的如树,队列,栈等数据结构都是在它们的基础上逻辑抽象而来Hashmap实际上是一个“链表散列”的数据结构,是数组和链表的结合体(允许使用null值和null键)由图可知,HashMap底层就是一个数组结构,数组中的每一个元素又是一个链表,因此它综合了数组存储和链表存储的优点,通过这种组合实现了查找和增删效率的平衡。其中,最基本的单元是Entry。HashMap的实现当有新的Entry需要加入进来时,根据hash值得到E

2021-06-19 10:56:34 136

原创 ArrayList和LinkedList的比较

ArrayList和LinkedList的比较回顾:List在Collection中的的框架图可以看出ArrayList、LinkedList、Vector和Stack是List的四个实现类。LinkedList是个双向链表,它同样可以被当作栈、队列或双端队列来使用。特别是作为双向链表的使用实现的原理ArrayList基于动态数组实现,LinkedList基于链表实现由二者的实现原理不难看出,ArrayList访问和更新方便(直接通过下表),但是增删比较麻烦(需要逐个移动),开销

2021-06-19 10:02:11 63

原创 String 为什么是不可变的?String为啥要设计为不可变的?

String为啥要设计为不可变的?1、便于实现字符串池(String pool在Java中,由于会大量的使用String常量,如果每一次声明一个String都创建一个String对象,那将会造成极大的空间资源的浪费。Java提出了String pool的概念,在堆中开辟一块存储空间String pool,当初始化一个String变量时,如果该字符串已经存在了,就不会去创建一个新的字符串变量,而是会返回已经存在了的字符串的引用。假若字符串对象允许改变,那么将会导致各种逻辑错误,比如改变一个对象会影响到另一

2021-06-19 09:33:42 371

原创 2021-06-18

打jar包报错:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project demo: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test failed: Plugin org.apache.maven.plugins:mave

2021-06-18 08:57:05 67

原创 线程和进程

线程和进程本质上,我更愿意将其定义为两种对CPU工作时间段的不同描述。我们知道,事实上CPU实际的执行时间和等待执行的时间是数量级的差异,所以我们会让CPU轮流执行程序(所有这些任务都处于就绪队列,然后由操作系统的调度算法,选出某个任务,让CPU来执行),但由于其速度极快,这些程序如同同时执行。 具体的轮流方法就是:先加载进程A的上下文,然后开始执行A,保存进程A的上下文,调入下一个要执行的进程B的进程上下文,然后开始执行B,保存进程B的上下文。。。。这里程序的上下文可以视作除了CPU以外所有的执行环

2021-06-15 16:50:41 95 1

原创 SSM整合-mybatis层

1. maven 的配置1.1 导入所需的依赖<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test&l

2021-06-15 15:06:28 166

原创 String类型的存储方式

String类型的声明方式//方式一String str1 = "test";String str3= "test";//方式二String str2 = new String("test");System.out.println(str1 == str2);//falseSystem.out.println(str1 == str3);//true方式一 创建的对象将存在String constant pool中,JVM会首先在String constant pool 中寻找是否已经存

2021-06-15 14:36:50 1143

转载 问什么静态变量不能在方法中定义

在方法内部定义的叫“局部变量”,而不是静态变量,局部变量不能加static,包括protected,private,public这些也不能加,而全局变量是可以的,静态变量是定义在类中,方法体外面的,局部变量是保存在栈中的,而静态变量保存在方法区,局部变量出了方法就会被栈回收了,而静态变量不会,所以局部变量前不能加static关键字,同一时刻,只可能有一块栈内存被当前方法使用,用完了就回收了可以换一个角度理解,静态变量和常量是在编译时确定的,而方法的局部变量是在运行时确定的,也就是说方法是可以变的,当方法

2021-06-07 08:35:46 710

原创 力扣刷题记录-206(链表反转)

单向链表反转式,一般要初始化一个新节点 来保存当前反转节点的下一个节点,然后更新当前节点的next指针,指向前一个节点,最后往后更新前一个节点的指针class Solution { public ListNode reverseList(ListNode head) { ListNode pre = head;//当前节点 ListNode cur = null;//前一个节点 while( pre != null){

2021-06-04 20:51:16 60

转载 力扣刷题记录

不同的二叉搜索树问题描述:给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。如:输入:n = 3输出:5解答核心:对于给定序列 1 ,2,⋯n,我们选择数字 i 作为根,则根为 i 的所有二叉搜索树的集合是左子树集合和右子树集合的笛卡尔积,对于笛卡尔积中的每个元素,加上根节点之后形成完整的二叉搜索树利用卡塔兰数 解决解题思路:动态规划设:G(n): 长度为 n 的序列能构成的不同二叉搜索树的个数。F(

2021-05-30 21:08:10 51

原创 波士顿房价

python机器学习模板1.定义问题导入类库导入数据集2.理解数据描述性统计数据可视化3.数据准备数据清洗特征选择数据转换4.评估算法分离数据集定义模型评估标准算法审查算法比较5.优化模型算法调参集成算法6.结果部署预测评估数据集利用整个数据集生成模型序列化模型项目实例——波士顿房价定义问题&amp;nbsp; &amp;nbsp; &amp;nb...

2018-12-17 19:43:44 3007

Machine learning for opencv

利用OpenCV通过机器学习的项目实例学习Python,适合新手

2018-12-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除