- 博客(143)
- 收藏
- 关注
原创 【MyBatis】报错:<statement> or DELIMITER expected, got ‘id‘
错误如下:解决方法:依次点击:File->Settings->Editor->Language Injections->找到xml:MyBatis sql|select|insert|update|delete。去掉 sql| 即可
2021-11-30 12:06:49
2060
2
原创 【JVM】9、方法区
文章目录1、栈、堆、方法区的交互关系2、方法区的理解3、设置方法区大小和OOM4、方法区的内部结构5、方法区使用举例6、方法区的演进细节7、方法区的垃圾回收8、总结1、栈、堆、方法区的交互关系运行时数据区结构图栈、堆、方法区的交互关系将Person类的结构信息加载进方法区person是一个变量,表示堆空间对象实体的引用,保存在栈中,再具体点就是保存在某一栈帧中的局部变量表中而new Person()创建的对象实体保存在堆中2、方法区的理解方法区在哪里?《Java虚拟机规范》中明确
2021-11-26 15:29:59
984
原创 【JVM】8、堆
文章目录1、堆的核心概述2、设置堆内存大小与OOM3、年轻代和老年代4、图解对象分配过程5、Minor GC、Major GC、Full GC6、堆空间分代思想7、内存分配策略8、为对象分配内存:TLAB9、小结堆空间的参数设置10、堆是分配对象的唯一选择吗1、堆的核心概述一个JVM实例只存在一个堆内存,并且 Java的堆区在JVM启动时(即程序开始运行)大小就确定了。如果想要调整堆区大小,可以在运行前设置其参数如在配置文件中这么设置:堆可以在物理上不连续的内存空间中,但是逻辑上应该视为连续
2021-11-20 18:16:49
1022
原创 【JVM】7、本地方法栈
Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用本地方法栈和虚拟机栈一样,都是线程私有的允许固定分配内存大小或者动态扩展内存大小(同Java虚拟机栈)如果线程请求分配的栈容量超过了本地方法栈所允许的最大容量,那么就会产生 StackOverflowError 异常如果本地方法栈可以动态扩展,那么在动态扩展时发现无法申请到足够的内存,或者在创建新线程时没有足够的内存去创建对应的本地方法栈,那么就会产生 OutOfMemoryError 异常本地方法是..
2021-11-18 16:03:58
771
原创 【JVM】6、本地方法接口
文章目录1、什么是本地方法2、为什么要使用native method2.1 与Java环境外交换2.2 与操作系统交互2.3 Sun's Java1、什么是本地方法native method 就是一个 Java 调用非 Java 代码的接口, 该方法的实现由非Java 语言实现 ,主要是为Java服务在定义一个native method 时,并不提供实现体,因为其实现体是由非Java语言在外面实现的2、为什么要使用native method2.1 与Java环境外交换需要和Java外面的环境进行
2021-11-18 12:16:00
641
原创 【JVM】5、虚拟机栈
文章目录区分栈的指令集架构和寄存器的指令集架构宋红康JVM教程区分栈的指令集架构和寄存器的指令集架构Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构两种架构的区别:(1)基于栈的指令集架构的特点设计和实现更简单,适用于资源受限的系统避开了寄存器的分配难题:使用零地址指令方式分配指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈,指令集更小,编译器容易实现不需要硬件支持,可移植性更好,更好实现跨平台(2)基于寄存器架构的特点
2021-11-18 11:06:12
1519
原创 【JVM】4、程序计数器
文章目录程序计数器概述1、PC Register介绍2、举例说明3、两个常见问题3.1为什么使用PC寄存器记录当前线程的执行地址呢3.2 PC寄存器为什么被设定为线程私有程序计数器概述1、PC Register介绍介绍:PC寄存器是一块很小的内存空间,几乎可以忽略不计,也是运行速度最快的存储区域在JVM规范中,每个线程都有自己的程序计数器(PC寄存器),是线程私有的,生命周期与线程的生命周期一致任何时间一个线程都只有一个方法在执行,即所谓的当前方法。程序计数器会存储当前线程正在执行的
2021-11-17 20:42:31
354
原创 【JVM】3、运行时数据区概述及线程
文章目录1 运行时数据区内部结构运行时数据区与内存2 JVM中的线程说明JVM系统线程1 运行时数据区内部结构本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段当我们通过前面的:类的加载 --> 验证 --> 准备 --> 解析 --> 初始化,这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们的运行时数据区运行时数据区与内存内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的
2021-11-17 20:40:30
613
原创 【JVM】2、类加载器子系统
文章目录1 区分栈的指令集架构和寄存器的指令集架构2 概述类的加载器及类加载过程3 类的加载过程一:Loading4 类的加载过程二:Linking5 类的加载过程三:Initialization6 类的加载器的使用7 引导类、扩展类、系统类加载器的使用8 为什么需要用户自定义类加载器及具体实现9 ClassLoader的常用方法和获取方法10 双亲委派机制11 双亲委派机制的优势12 沙箱安全机制13 其他两个class对象是否为同一个对类加载器的引用类的主动使用和被动使用1 区分栈的指令集架构和寄存器
2021-11-17 20:36:44
745
原创 注解和反射
文章目录1、什么是注解2、内置注解3、元注解1、什么是注解Annotation的格式:注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:@SuppressWarings(value=“unchecked”)Annotation的作用:不是程序本身,可以对程序做出解释可以被其它程序(如编译器)读取Annotation在哪里使用?可以附加在package,class,method,field等上面,相当于给他们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访
2021-11-04 11:21:30
106
原创 【 MyBatis 】解决数据库中属性名和实体类中字段名不一致问题
在操作数据库的时候,要求属性名和字段名要相同,假如属性名和字段名不同,则会导致查出的数据为空例如数据库中的字段名为pwd,而实体类中的属性名为password,那查出的结果肯定为null,所以需要进行处理第一种方式直接使用SQL语句直接进行处理,为不一致的字段起别名比如这里数据库中是pwd,但是实体类中是password,所以将pwd取别名为password<select id="getUserById" parameterType="int" resultType="com.robot.
2021-10-24 11:28:00
484
原创 <算法>求一个数组的所有排列组合
经常会遇到一些笔试题目,通过求出数组的所有排列组合就可以轻易解答出。今天碰巧看到一个很巧妙的求法,故记录一下例如给定一个数组[1,2,3],那么排列组合有如下[1][2][3][1,2][1,3][2,3][1,2,3]那么实际上每个排列组合都可以将其对应一个数字[1] //1 0 0[2] //0 1 0[3] //0 0 1[1,2] //1 1 0[1,3] // 1 0 1[2,3] //0 1 1[1,2,3] //1 1 1 当选取元素时,将其
2021-10-12 15:09:14
4837
1
转载 <MySQL>MySQL删除数据表的三种方式详解
用法:1、当不再使用该表时,使用drop2、当仍要保留该表,但是要删除所有记录时,用truncate3、当要删除部分记录或者担心可能需要回滚,使用delete删除程度从强到弱排序如下:1、drop table tb;drop是直接将表格删除,无法找回。例如删除user表:drop table user;2、truncate table tb;truncate是删除表中的所有数据,不能与where一起使用例如删除user表中所有数据:truncate table user;3、
2021-09-14 17:23:58
1056
转载 <多线程>volatile关键字详解
文章目录前言volatile特性前言当一个共享变量被volatile修饰时,它会保证修改的值立即被更新到主存,这里的"保证"是如何做到的呢?volatile特性内存可见性:
2021-09-14 12:02:18
311
原创 <MySQL>内连接、左连接、右连接和全连接
文章目录1、内连接2、左连接3、右连接4、全连接假设现在有这么两张表a,b:a表:b表:那么两张表中,id相同的有b、c、d三行1、内连接内连接的关键字是inner join,把条件相同的数据连接起来SELECT * FROM aINNER JOIN bON a.`id`=b.`id`;运行结果:2、左连接左连接的关键字是left join,拿左表的条件到右表查询符合条件的数据,然后连接起来;如果找不到,则赋值nullSELECT * FROM aLEFT JOIN b
2021-09-10 10:37:20
2056
原创 <Java>使用Comparable和Comparator自定义排序
对List中的元素进行排序,可以使用List自带的sort()方法,使用时,我们需要向其传入一个实现的Comparator接口default void sort(Comparator<? super E> c) { Object[] a = this.toArray(); Arrays.sort(a, (Comparator) c); ListIterator<E> i = this.listIterator(); for (Object e : a
2021-09-02 14:37:57
250
原创 【Java高并发】CountDownLatch(倒计数器) 和 CyclicBarrier(循环栅栏)
1、倒计数器——CountDownLatchCountDownLatch是一个多线程控制工具类,通常使用它来控制线程的等待,它可以让一个线程一直等待,直到倒计数结束,再开始执行倒计数器的使用场景:火箭发射在火箭发射前,需要对各项设备、仪器进行检查,当所有检查完成后,引擎才能点火。这里就可以使用CountDownLatch来控制点火线程需要等所有检查线程全部完工后再执行CountDownLatch的构造函数接收一个int整数作为参数,即当前计数器的值,这个值代表需要等待的线程个数。每当一个线程完成了任
2021-08-28 14:44:52
368
转载 <Java>AtomicInteger的基本用法
1、AtomicInteger的常用方法i++和++i不是线程安全的,因此在高并发的情况下,需要使用synchronized等关键字来保证线程安全,但是AtomicInteger这个类则是线程安全的public static void main(String[] args) { AtomicInteger int1=new AtomicInteger(); System.out.println("AtomicInteger的默认值为:"+int1);
2021-08-24 22:51:13
11933
原创 <Java>Map的putAll()的使用以及 List 转 Map(Collectors.toMap) 使用技巧
putAll(Map<? extends K,? extends V> m)将指定map的所有映射复制到调用此方法map。如map1.putAll(map2);那么就是将map2的所有映射复制到map1中示例 public static void main(String[] args) { Map<Integer,String> map1=new HashMap(); Map<Integer,String> map2=ne
2021-08-24 19:13:26
885
原创 <Java>lambda表达式及使用parallelStream().filter()过滤数据
1、lambda表达式特征 * 1、可选类型声明:不需要声明参数类型,编译器可以统一识别参数值 * 2、可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号 x -> x*2 接收一个参数,并且返回其2倍的数值 * 3、可选的大括号:如果主体包含了一个语句,就不需要使用大括号 * 4、可选的返回关键字:如果主体只有一个表达式返回值,那么编译器会自动返回值,大括号需要指明表达式返回了一个数值 * * 1、不需要参数,返回值为5 * () -> 5 * * 2、
2021-08-24 15:44:17
6039
转载 sql注入详解
文章目录一、什么是sql注入二、sql注入攻击的总体思路三、sql注入攻击实例四、如何防御sql注入1、检查变量数据类型和格式2、过滤特殊符号3、绑定变量,使用预编译语句五:什么是sql预编译1、预编译语句是什么2、MySQL的预编译功能六、为什么PrepareStatement可以防止sql注入七、mybatis是如何防止SQL注入的1、首先看一下下面两个sql语句的区别:一、什么是sql注入sql注入是常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQ
2021-08-04 10:31:35
201
原创 web基本概念
文章目录1 web静态web:动态web2 web应用程序3 静态web4 动态web5 web服务器1 web静态web:html,css提供给所有人看的数据始终不会发生变化动态web淘宝,几乎所有的网站提供给所有人看的数据会发生变化,在不同时间不同地点,可能看到的数据各不相同技术栈:Servlet,JSP,ASP,PHP在Java中,动态web资源开发的技术统称为JavaWeb2 web应用程序web应用程序:可以提供浏览器访问的程序index.html,login.h
2021-07-29 14:40:46
82
原创 elasticsearch学习笔记
文章目录1 开篇结构化数据非结构化数据半结构化数据2 技术选型Elasticsearch是什么Elasticsearch And SolrElasticsearch Or Solr3 略4 入门——环境准备安装软件问题解决5 RESTful & JSON6 Postman客户端工具7 倒排索引数据格式8 Http-索引-创建9 Http-索引-查询&删除10 Http-文档-创建(PUT&POST)11 Http-查询-主键查询&全查询12 Http-全量修改&局部修
2021-07-28 14:58:00
878
原创 <SpringBoot>配置文件加载优先级
springboot启动会扫描以下位置的application.properties或者application.yaml文件作为Spring boot的默认配置文件优先级由高到低顺序为:file:./config/file:./classpath:/config/classpath:/如图所示:如果不同优先级的配置文件中存在相同的属性配置,那么高优先级的配置文件中的配置将覆盖低优先级的配置文件中的配置同时,SpringBoot会将这四个位置的配置文件全部加载,因此会形成一种互补配置,即
2021-07-23 10:45:39
232
原创 Bug:No artifacts configured
可能是因为项目是直接git下来的,所以项目的框架不完整,缺少web功能,因此在配置tomcat server时,没有artifacts可选目前已经解决了此问题,因此记录一下解决的方法步骤配置artifacts在idea中,依次点击File–Project Structure,在Project Settings下找到Artifacts点击+号选择Web Application Exploded,然后选择From Modules,选中你的项目将artifacts配置到tomcat上配置后如果启
2021-07-21 11:14:29
1582
原创 <多线程>生产者消费者例题
程序package ThreadDemo;//生产者消费者问题//生产者生产上限是20class Products{ private static int proCounts=0; public void produce() { proCounts++; } public void consume() { proCounts--; } public int getProCounts()
2021-06-14 17:35:25
262
5
原创 <Java>Java多线程——线程间的通信(两个线程交替打印1-100)
文章目录1 wait、notify、notifyAll详解2 例题:两个线程交替打印1-1001 wait、notify、notifyAll详解1、wait()、notify()、notifyAll()方法是Object的本地final方法,无法被重写2、wait()方法使当前线程阻塞,前提是必须先获得锁,一般配合synchronized关键字使用。即一般就是在synchronized同步代码块或synchronized同步方法里使用wait()、notify()、notifyAll()方法3、
2021-06-14 12:35:10
1255
原创 <Linux>常用的文件操作命令(touch/cp/mv/rm)
文章目录常用的文件操作命令1 touch命令文件的时间戳判断文件的类型2 cp命令cp命令的常用选项3 mv和rm命令mvrm常用的文件操作命令命令功能touch生成一个空文件或更改文件的时间cp复制文件或目录mv移动文件或目录、文件或目录改名rm删除文件或目录ln建立链接文件find查找文件file/stat查看文件类型或文件属性信息1 touch命令功能:生成新的空文件或更改现有文件的时间若文件不存在,系统会建立一个文
2021-06-13 15:10:09
2871
原创 <Linux>常用的目录操作命令(ls/cd/pwd/mkdir/rmdir/tree)
文章目录常见的目录操作命令路径ls命令ls命令选项常见的目录操作命令命令作用ls显示目录内容cd切换工作目录pwd显示当前所在目录mkdir/rmdir创建/删除目录tree显示目录树可以使用pwd命令查看用户的当前目录可用cd命令来切换目录首先了解一下路径路径路径是指文件或目录在文件系统中所处的位置1、绝对路径(1)以斜线(/)开头(2)描述到文件位置的完整说明(3)任何时候都可以使用2、相对路径(1)不以斜线(/)
2021-06-13 14:23:57
366
2
原创 <Linux>Linux基础入门
文章目录1 元字符2 命令基本格式3 Linux常用命令4 通配符5 文件与目录文件的类型普通文件目录6 符号链接1 元字符在shell中有一些具有特殊意义的字符,称为shell元字符若不使用转义字符,那么shell就不会把元字符当作普通文字符使用字符含义’ ’强引用" "弱引用\转义字符$变量引用;命令分离符空格、换行符命令分隔符* 、?、!通配符<、>、>>重定向-选项标志#注释
2021-06-13 12:14:23
322
2
原创 <Java>多线程——Lock锁方式解决线程安全问题
Lock接口提供了与synchronized关键字类似的同步功能synchronized 方法或语句的使用提供了对与每个对象相关的隐式监视器锁定的访问,但却强制所有锁定获取和释放均要出现在一个块结构中:当获取了多个锁定时,它们必须以相反的顺序释放,且必须在与所有锁定被获取时相同的词法范围内释放所有锁定。虽然synchronized方法和语句的范围机制使得使用监视器锁定编程方便了很多,而且还帮助避免了很多涉及到锁定的常见编程错误,但有时也需要以更为灵活的方式使用锁定。例如,某些遍历并发访问的数据结果的算法
2021-06-12 21:01:15
1488
3
原创 <Java>java多线程的创建、使用以及如何解决线程安全问题
一、程序、进程和线程二、多线程的创建方式一:继承于Thread类方式二:实现Runnable接口三、Thread中的常用方法四、线程的生命周期例题:多窗口售票问题五、线程同步方式一:同步代码块1 解决实现Runnable方法的方式的线程安全问题2 解决继承Thread类的方式的线程安全问题方式二:同步方法1 使用同步方法解决实现Runnable接口的线程安全问题2 使用同步方法解决继承Thread类的线程安全问题
2021-06-12 11:08:25
1552
1
原创 <Maven>新建maven项目时,archetype项目骨架加载慢的问题的解决方法
1 引入archetype骨架加载慢问题新建maven项目File—New—Project选择Maven,勾选Create from archetype在这里选择webapp编辑项目名称等确认项目的相关信息点击finish,maven项目就构建完成了但是会发现,创建的时候archetype骨架加载起来特别的慢,有可能需要等很久才可以加载完成archetype骨架就是下面框起来的2 解决archetype项目骨架加载慢的问题第一步去网址https://repo.maven.ap
2021-06-09 20:44:45
3028
2
转载 <算法>回溯算法入门级详解 + 练习
回溯算法与深度优先遍历以下是维基百科中「回溯算法」和「深度优先遍历」的定义。回溯法 采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案。回溯法通常用最简单的递归方法来实现,在反复重复上述的步骤后可能出现两种情况:找到一个可能存在的正确的答案;在尝试了所有可能的分步方法后宣告该问题没有答案。深度优先搜索 算法(英语:Depth-Firs
2021-06-06 17:26:07
455
原创 <Java>单例模式(Singleton)
什么是单例模式单例模式,保证一个类在整个系统中仅有一个实例,并提供一个访问它的全局访问点例如:代表JVM运行环境的Runtime类要点(1)某个类只能有一个实例,外面不能随意地创建方法:构造器私有化(2)这个类必须自行创建这个实例使用一个该类的静态变量来保存这个唯一实例(3)这个类必须自行向整个系统提供这个实例对外提供获取该实例对象的方式 1)直接暴露(设置静态变量访问权限为public) 2)用静态变量的get方法获取实现方式饿汉式:直接创建对象,不存在线程安全问题懒汉式
2021-06-05 21:33:40
172
原创 <Java>你知道i=i++的运行结果是怎么计算的吗?
有如下一段代码,可以先尝试计算一些运行的结果 public static void main(String[] args) { int i = 1; i = i++; int j = i++; int k = i + ++i * i++; System.out.println("i=" + i); System.out.println("j=" + j);
2021-06-05 20:26:58
728
1
原创 <LeetCode>盛最多水的容器
题目盛最多水的容器思路及代码思路1 暴力循环(数组元素过多会超时)(1)从第一个元素开始到倒数第二个元素都有机会作为容器的左壁高度for(int i=0;i<height.length-1;i++)(2)从该元素的下一个元素开始一直到最后一个元素,都有机会作为容器的右壁高度for(int j=i+1;j<height.length;j++)(3)选取左壁和右壁较低的作为当前形成的容器的高度,选择左壁与右壁之间的的距离作为容器底的长度,即可计算容器可盛水量int len=j-i
2021-06-05 14:13:55
144
原创 <LeetCode>对称二叉树
题目对称二叉树思路判断树是否对称,那么就是判断根结点root的两个子树root.left和root.right是否对称。将特殊情况进行额外处理如根结点为空,根结点没有左右子树,那么也是对称二叉树,返回true解决完特殊情况以后,那么就判断根结点的左右子树是否对称假设根结点root的左子树的根结点为root1,根结点root的右子树的根结点为root2那么就对这两个子树进行判断判断root1.left==root2.right?root1.right==root2.left?代码/*
2021-06-04 22:49:54
88
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人