- 博客(47)
- 收藏
- 关注
原创 锁(想办法避免线程进入内核态的阻塞状态是分析和理解锁设计的关键)
锁(想办法避免线程进入内核态的阻塞状态是分析和理解锁设计的关键)悲观锁实例对象对象头(占用内存大小与虚拟机位长一致,32位JVM -> MarkWord是32位,64位JVM -> MarkWord是64位)类型指针:方法区地址,指向当前对象类型所在方法区中的类型信息,表明是哪个类的实例对象MarkWord:hashcode值,锁相关信息,分代信息1.6对锁的优化无锁(检查对象头中是否存储了线程ID,若没有,CAS替换MarkWord将自己的线程ID存储在对象头中,无锁升级
2022-03-25 12:51:00
770
原创 为什么wait方法必须在同步(synchronized)代码块方法中调用
为什么wait方法必须在同步(synchronized)代码块/方法中调用调用wait就是释放锁,释放锁的前提是必须先获得锁,先获得锁才能释放锁。为什么notify,notifyall必须在同步(synchronized)代码块/方法中调用notify,notifyall是让入口队列中的线程竞争锁,如果自身没有锁,怎么能让入口队列中的线程竞争锁呢。wait后的代码会执行class BlockingQueue { Queue<String> buffer = new Linked
2022-03-24 13:22:53
2917
原创 浅谈hashcode与equals
浅谈hashcode与equals基本类型基本类型封装类型的hashcode方法重写为直接输出该基本类型的值,基本类型无hashcode方法引用类型每个引用类型会重写hashcode方法,得到一个int整数object类型顶层类的hashcode方法是一个native方法,标志这个方法是一个本地方法。重点hashcode()会返回int类型的哈希码,使用不同的哈希函数所得到的哈希码也是不一样的。和equals的联合使用,主要使用在SET,MAP中。存取元素时,加快效率,首先使用哈希函数,
2022-03-19 14:34:22
161
原创 Java中抽象类和接口的区别
Java中抽象类和接口的区别抽象类包含抽象方法的一定是抽象类,但抽象类中不一定有抽象方法。抽象类只能被继承,不能被实例化。接口接口是一个抽象类型,是抽象方法的集合,不能被实例化相同点接口和抽象类都不能够被实例化抽象类和接口都可以定义抽象方法,子类和实现类必须对这些抽象方法重写不同点抽象类有构造方法,主要用于子类实例化的时候,接口没有构造方法抽象类中可以包含普通方法,接口在1.8以前只能定义抽象方法抽象类只能单继承,而接口可以多继承变量:抽象类中可以定义各种类型的成
2022-03-19 11:26:19
214
原创 static与final关键字在Java中的使用
static与final关键字在Java中的使用修饰类static修饰类static修饰类的时候只有一种情况,那就是静态内部类。final修饰类final修饰类表示这个类是不可以被继承的,修饰方法static修饰方法static方法的时候,标志这个方法是一个静态方法,随着类的加载而加载final修饰方法final修饰方法的时候,表示这个方法不能够被重写,在早期,还用来提升方法的运行效率,内嵌调用修饰变量final修饰变量修饰
2022-03-19 11:05:05
388
原创 Java代码块执行顺序
单类静态代码块-》普通代码块-》构造方法public class Person { static { System.out.println("静态代码块"); } { System.out.println("普通代码块"); } public Person() { System.out.println("构造方法"); } public static void main(String[..
2021-12-18 17:16:36
381
原创 Java中类的生命周期
大的流程类加载-》使用-》卸载加载-》连接-》初始化-》使用-》卸载加载-》验证-》准备-》解析-》初始化-》使用-》卸载加载的过程(过程使用类加载器进行加载)会根据类的全限定名找到定义这个类的二进制字节流,即.class文件。2.将字节流代表的静态存储结构转化成方法区的运行时数据结构3.在内存中生成一个代表该类的Class对象,作为方法区这些数据的访问入口虚拟机规范上面这 3 点并不具体,因此是非常灵活的。比如:“通过全类名获取定义此类的二进制字节流” 并没有指明具体从哪里获取、怎.
2021-08-11 14:30:24
101
原创 如何得出字符串中一共有多少个不同的字符
双层for循环,很lowint count=0; for (int i=0;i<s.length();i++){ int j=0; for ( j=0;j<i;j++){ if (c[j]==c[i]){ break; } } if (j==i){
2020-10-10 16:10:54
1125
原创 springboot集成mybatis踩坑
在spring boot里集成mybatis的时候,当你的mysqlb版本过低又引用较高的驱动jar包是可能会遇到以下错误Cause: org.springframework.jdbc.CannotGetJdbcConnectionException我的MySQL版本是5.1.49,引用驱动jar包是8.0.21然后引用低版本的jar包,问题解决...
2020-08-24 22:27:18
138
原创 关于在jsp中无法采用el表达式获取值
方法一:在jsp页面中加上<%@ page isELIgnored=“false” %>(实测可用)其他方法:方法二web.xml中加上,简单,但是还不是好的解决办法。<jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <el-ignored>false</el-ignored>
2020-08-23 12:58:42
246
原创 错误java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
原因:没有将jar导出到lib中解决办法File > Project Structure > Artifacts > 在右侧Output Layout右击项目名,选择Put into Output Root,见下面截图:执行后,在WEB-INF在增加了lib目录,里面是项目引用的jar包,点击OK。重启项目就可以啦...
2020-08-22 17:59:37
130
原创 javaweb部署到服务器踩坑
1.在服务器上安装jdk,tomcat,mysql(好像也可以使用远程数据库)2.将本地的数据库文件导出成sql文件,在服务器端使用source命令导入。3.将项目打war包发送到服务器,我就是这一步搞了好大的坑,首先,maven的命令是用不了,maven的artifactId,不能是中文,这一步卡了不少时间。第二,在打包之前,你得运行自己的项目,我之前就是测试maven的时候,用maven clean搞的classes下的资源文件没有了,部署到服务器的时候就会有空指针异常。最后,我把已经有资源文
2020-08-18 10:42:47
350
原创 IDEA中导入javaweb项目
1.导入项目或者打开项目(我用的是打开项目)2.在工程结构里修改相关选项1.在Project项中配置JDK版本和编译等级2.在Modules项的Sources标签页中配置项目结构(主要配置需编译的Java文件和配置文件3.在Modules项的Paths标签页中配置编译后文件输出路径*******主要修改的就是这一项,idea默认目录是web,修改为webapp,4.在Artifacts项中设置项目的部署配置,添加WebApplication:Exploded.转成tomcat可以部署的格
2020-08-17 21:06:58
1036
原创 记录一下遇到的错误,在监听器中实例业务层对象,调用业务层方法,出现错误
八月 14, 2020 9:38:09 上午 org.apache.catalina.core.StandardContext listenerStart严重: 异常将上下文初始化事件发送到类的侦听器实例.[com.jiabin.crm.web.listener.SysInitListener]java.lang.ExceptionInInitializerErrorat com.jiabin.crm.settings.service.impl.DicServiceImpl.(DicServiceIm
2020-08-14 09:41:07
481
2
原创 无重复字符的最长字串
使用队列实现队列是先进先出的,先判断队列中是否有当前字符,如果有,队头出队,知道队列中没有重复元素,并将每次队列中的元素存在一个变量中,如果大于之前的值,就赋值给变量,最后,判断变量和队列长度,大的即为无重复字符的最长子串。public class lengthOfLongestSubstring { /** * 找出一个字符串中最长的没有重复元素的字串,返回子串长度 */ public static void main(String[] args) {
2020-07-27 11:37:04
118
原创 IDEA遇到的问题总结
1.包名不能够层级显示2. project下项目结构消失1)关闭IDEA,2)删除项目文件夹下的.idea文件夹3)重新用IDEA工具打开项目(具体原因未知)
2020-07-26 19:03:29
149
原创 Java数组拷贝及遍历总结
public class ArrayCopy { public static void main(String[] args) { int[] source={1,5,6,8,4,5,2,565,56}; int[] target=new int[source.length]; //数组的拷贝 //1. 通过遍历赋值拷贝数组 for(int i=0;i<source.length;i++){
2020-07-25 23:33:00
269
原创 Java--用队列实现栈的基本功能
队列(Queue)是先进先出的一种数据结构。Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接口。首先,将队列作为自己的属性。class MyStack { Queue<Integer> queue; /** * Initialize your data structure here. */ public MyStack() { queue = new Link
2020-07-23 23:10:51
232
原创 java--单链表定义
单链表定义/** * 单链表定义 */public class ListNode { int val; ListNode next; ListNode(int x) { val=x;}}
2020-07-23 09:18:10
176
原创 堆和栈的区别
程序内存分区中栈内存由操作系统自动分配释放 ,栈内存一般存放基本数据类型和引用的地址等,即局部变量。生命周期随着函数的执行完成而结束。栈内存一般比较小。堆由开发人员分配和释放, 若开发人员不释放,程序结束时由 OS 回收。堆内存一般存放对象本身。生命周期由开发人员指定。由于堆中需要大量的创建对象和释放对象,故堆内存的效率会低。数据结构中栈是一种运算受限的线性表,其限制是指只仅允许在表的一端进行插入和删除操作,这一端被称为栈顶(Top)。堆是一种常用的树形结构,是一种特殊的完全二叉树,当且仅当满足所
2020-07-20 10:16:01
137
原创 MySQL--索引
索引索引是一种数据结构,能够帮助我们快速的检索数据库中的数据。索引,类似书籍的目录,可以根据目录的某个页码立即找到对应的内容。索引的优缺点索引的优点:1. 天生排序。2. 快速查找。索引的缺点:1. 占用空间。2. 降低更新表的速度。关于索引的使用1.主键自动建立唯一索引2.频繁作为查询条件的字段应该创建索引3.频繁更新的字段不适合建立索引,因为每次更新不单单时更新了记录还会更新索引4.where 条件里用不到的字段不创建索引5.查询中排序的字段,排序的字段若通过索引去访问将会大大提高
2020-07-19 16:38:48
79
原创 Java--死锁
什么是死锁线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的 synchronized 代码块时,便占有了资源,直到它退出该代码块或者调用 wait 方法,才释放资源,在此期间,其他线程将不能进入该代码块。当线程互相持有对方所需要的资源时,会互相等待对方释放资源,如果线程都不主动释放所占有的资源,将产生死锁。死锁如何产生产生死锁的的四个条件如下:1、互斥条件:一个资源每次只能被一个进程使用;2、请求与保持条件:一个进程因请求资源而阻塞
2020-07-18 21:53:19
76
原创 Java面试--三次握手四次挥手
三次握手客户端和服务器端的三次握手是为了创建两者之间的连接。刚开始,客户端和服务器都是closed状态,在通信开始前,双方都得创建各自的传输控制块(TCB),服务器创建完TCB后进入listen状态,准备接收客户端发来的连接请求。TCBTCP协议的目的就是为了保证数据能在客户端和服务端之间准确连续的流动。TCP协议建立了端到端的通信,实现了通信双方机器中进程的通信,并使用socket数据结构来实现不同设进程之间的连接。socket包含两个成分,一个是IP地址,一个是端口号。这样,同一个设备发送给其他
2020-07-18 15:56:34
340
原创 maven install时报错maven only whitespace content allowed before start tag and not \u0 (position: START_
1.找到项目所在 的maven库2.删除 maven-metadata.xml 这个文件3.重新编译
2020-06-30 21:24:08
1811
原创 Java基础--JS
JS基础语法JavaScript是运行在浏览器上的脚本语言,简称JS.JavaScript程序不需要程序员手动编译,编写完源代码之后,浏览器直接打开解释执行。JavaScript可以让网页具有动态效果,交互性更好。脚本语言:JavaScript的“目标程序”以普通文本的形式保存,这种语言都叫“脚本语言”。Java的目标程序(可以直接运行的程序)以.class形式存在,不能使用文本编辑器打开,不是脚本语言。JS是一门事件驱动型的编程语言,依靠事件去驱动,然后执行相应的程序。HTML中嵌入JS代
2020-06-28 10:40:03
128
原创 Java基础--CSS
CSS(cascading style sheet) 层叠样式表语言作用:修饰HTML页面,设置HTML页面中的某些元素的样式,让HTML页面更好看。在HTML页面中嵌套使用CSS的三种方式1.内联定义方式在标签内部使用style属性来设置元素的CSS样式2.样式块方式在head标签中使用style块id选择器: #id标签选择器类选择器:.类名3.链入外部样式表文件将样式写到一个独立的xxx.css文件中,在需要的网页上直接引入css文件,样式就引入了。...
2020-06-25 12:38:32
183
原创 Java基础--HTML
常用浏览器:谷歌,IE,火狐HTML:超文本标记语言(超文本:流媒体,图片,声音,视屏等)W3C(世界万维网联盟)制定HTML规范w3cschool:一个网站,为了方便中国web前端程序员的开发,提供大量的帮助文档,为开发提供方便。实体符号:&/t; 小于号;>;大于号; ;空格表格单元格合并:rowsqan: 行合并colsqan:列合并这行代码的作用是告诉浏览器采用哪一种字符集打开当前页面,并不是设置当前页面的字符编码方式。背景和背景图片标签图片标
2020-06-24 11:12:04
164
原创 Java基础--JDBC
SQL注入在采用拼接sql语句的时候,将用户提供的非法信息编译进去,导致原sql语句的含义被扭曲了。String a="z"; String b="yyy'or'1'='1"; String sql="select * from login where user='"+a+"'and password='"+b+"'"; //处理查询结果集 rs=stmt.executeQuery(sql);
2020-06-19 15:27:52
91
原创 Java基础--JDBC
JDBCJava语言连接数据库(java DataBase Connectivity)本质是sun公司制定的一套接口。JDBC前的准备工作1.下载对应数据库的驱动(jar)//jar包里是class文件,数据库厂家对JDBC接口的实现类2.a.在记事本中编写Java程序需要配置环境变量class pathb.在工具中编写Java程序需要将jar包导入到工程或者模块中。JDBC编程六步1.注册驱动(作用:告诉Java程序,即将连接的是哪个品牌的数据库)//注册驱动的第一种方式
2020-06-19 14:01:57
95
原创 数据库基础
sql语言类型1.DQL 数据查询语言:select2.DML 数据操作语言:insert,delete,update,对表当中的数据进行增删改3.DDL 数据定义语言:create, drop, alter 对表结构的增删改4.TCL 事物控制语言:commit,提交事务 rollback 回滚事务5.DCL 数据控制语言:grant 授权 revoke 撤销权限分组函数count,sum, avg,max,min分组函数自动忽略null,count(*):统计总记录条数count(n
2020-06-04 10:46:28
142
原创 Java基础--注解
注解(注释类型) Annotation注解是一种引用数据类型,编译之后也是生成,class文件。java.lang下的注解类型:override:重写父类方法Deprecated:标注的已过时用来标注注解类型的注解称为元注解:Target, Retention注解中定义属性如果一个注解中有属性,那么必须给属性赋值,除非制定了默认值。注解中属性的类型可以是八种基本数据类型+String,Class,枚举及每一种的数组形式。注解在程序中等同于一种标记,如果这个元素上有这个注解怎么办,没有这个注解
2020-06-04 10:24:21
108
原创 Java基础--反射机制
通过反射机制访问对象属性public class Teacher { public int no; String name; boolean sex; public Teacher() { } public Teacher(int no) { this.no = no; } public Teacher(int no, String name, boolean sex) { this.no = no;
2020-06-04 10:15:46
112
原创 Java基础--反射机制
作用反射机制可以读和修改字节码文件如何获取类的字节码public class Test06 { public static void main(String[] args) { //第一种方式 Class c=null; try { c=Class.forName("Bird"); } catch (ClassNotFoundException e) { e.printStackT
2020-05-31 21:14:24
109
原创 Java基础--线程
守护线程一般守护线程是一个死循环,所有的用户线程只要结束,守护线程自动结束(例如垃圾回收)public class ThreadTest03 { public static void main(String[] args) { Thread t1=new Thread05(); t1.setName("守护线程"); t1.setDaemon(true); t1.start(); for(int i=0;i<1
2020-05-31 18:19:05
128
原创 Java基础--线程安全
局部变量和常量不会有线程安全问题,实例变量和静态变量可能会有线程安全问题。开发中如何解决线程安全问题1.使用局部变量代替实例变量和静态变量2.如果必须是实例变量,就创建多个对象,对象不共享,就没有数据安全问题。3.使用synchronized关键字,线程同步机制synchronized的三种写法1.同步代码块,灵活。2.在实例方法上使用synchronized,表示共享对象一定是this,并且同步代码块是整个方法体。3.在静态方法上使用synchronized,,表示类锁,类锁永远只有一把,
2020-05-30 21:34:10
129
原创 Java基础--多线程
关于多线程并发环境下,数据的安全问题什么时候数据在多线程并发的环境下会存在安全问题a.多线程并发b.有共享数据c.共享的数据有修改的行为怎么解决线程安全问题线程排队执行(不并发)==线程同步机制模拟两个线程对同一份账户取款1.不使用线程同步机制public class Account { private int no; private double balance; public Account() { } public Account(int
2020-05-30 11:28:52
119
原创 Java基础--多线程
线程和进程的关系进程是一个应用程序,线程是进程中的执行场景/执行单元,一个进程可以启动过多个线程。在Java语言中,进程之间的内存独立不共享,线程之间的堆内存和方法区内存共享,栈内存独立,一个线程一个栈。main方法的结束不一定是程序的结束使用多线程机制以后,main方法结束只是主线程结束了,主栈空了,其他的线程可能还在运行。实现多线程的方法1.编写一个类直接继承java.lang.Thread,重写run方法a:定义线程类b:创建线程对象c:启动线程public class Thread
2020-05-21 20:04:23
133
原创 Java基础--对象流及序列化
序列化与反序列化1.序列化(Serialize):把内存中的Java对象信息存储到硬盘文件中,将Java对象的状态保存下来的过程。此过程中会用到 ObjectOutputStream.import java.io.Serializable;public class Person implements Serializable { private String name; private int age; public Person() { } public
2020-05-21 09:48:33
212
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人