- 博客(38)
- 资源 (6)
- 收藏
- 关注
原创 ThreadLocal详解和如何解决ThreadLocal的内存泄漏问题
一:ThreadLocal简介:从Java官方文档中的描述:ThreadLoacl类用来提供线程内部的局部变量,这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static 类型的,用于关联线程和线程上下文。我们可以得知ThreadLoacl的作用是:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的声明周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂
2020-07-20 09:25:07
1096
原创 单例模式在多线程情况下出现的问题以及双重加锁机制(DCL)解决问题
单例模式代码:private static ShuangChongJiaSuo instance=null; private ShuangChongJiaSuo(){ System.out.println(Thread.currentThread().getName()+"\t 我是构造方法"); } public static synchronized ShuangChongJiaSuo getInstance(){ if(instance==
2020-07-19 22:36:20
1035
原创 什么是线程池?几种创建方式?线程池有哪些状态?七个重要参数各自的意义?谈谈线程池的工作原理是什么?四种拒绝策略时什么?写个简单得例子?
一:什么是线程池: 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在 Java 中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁,这就是”池化资源”技术产生的原因。 线程池顾名思义就是事先创建若干个可执行的线程放入一个池(容器)中,需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池...
2020-07-12 22:29:34
1258
原创 谈谈对volatile的理解(三大特性)?了解JMM(java内存模型)?
首先JUC是java .util.concurrent的简称,cuncurrent是并发。一:并发和并行的区别:二:谈谈你对volatile的理解:volatile是java虚拟机提供的轻量级的同步机制。包含三大特性:A:保证可见性 B:不保证原子性 C:禁止指令重排。1:保证可见性(比如B线程马上能够看到A线程更改的数据):首先先看一段代码:public class MyThread extends Thread{ public static int a=0; ..
2020-07-12 11:30:04
222
原创 如何手写一个ArrayList线程不安全的例子?如何解决它的线程不安全问题?
一:不能光知道ArrayList是线程不安全的,如果面试官让你手写怎么办呢?手写ArrayList线程不安全案例:
2020-06-18 12:44:12
291
原创 基于redis实现分布式锁(SETNX和Redisson)(以扣减库存来当作案例)
一:实现原理:利用redis中的set命令来实现分布式锁。从Redis 2.6.12版本开始,set可以使用下列参数:SET KEY VALUE [EX seconds] [PX milliseconds] [NX|XX]EX second :设置键的过期时间为second秒。 SET key value EX second效果等同于SETEX key second value 。PX millisecond :设置键的过期时间为millisecond毫秒。 SET key value P
2020-06-16 23:11:21
3678
9
原创 MySql锁机制包括读锁,写锁,行锁,表锁的详细介绍
一:锁的概念锁是计算机协调多个进程或线程并发访问某一资源的机制在数据库中,除除传统的计算机资源的争用外,数据也是一种供许多用户共享的资源,如何保证数据并发访问的一致性,有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素,从这个角度来说,锁对数据库而言显得尤为重要,也更加复杂。二:MySql锁的分类1:从对数据操作的类型分为:读锁和写锁。2:从对数据操作的粒度来分:表锁和行锁。三:读锁详解:读锁(共享锁):针对同一份数据,多个操作可以同时进行而不会
2020-06-16 19:20:26
1590
1
原创 MySql索引优化中索引失效和如何避免索引失效
一:索引MySql官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构,可以得到索引的本质:索引是数据结构。你可以简单理解为"排好序的快速查找的数据结构",因此,当我们建立了索引之后,我们应该如何避免索引失效呢?二:如何避免索引失效1:最佳左前缀法则:如果索引了多列,要遵守最左前缀法则,指的是查询从索引的最左前列开始并且不跳过索引的列表的结构大致是这个样子这是建立的索引(索引字段顺序,name,age,pos):A:当想要通过年龄和位置去查询时:
2020-06-15 11:28:08
426
原创 MySql中的索引优化分析之性能分析中的explain介绍和基本使用
一:在我们对sql语句进行性能分析时,发现mysql优化器我们没改,一些瓶颈问题没遇到,比如内存问题,IO问题也没出现。因此需要用explain来帮助我们分析二:Explain是什么?使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySql是如何处理你的SQL语句的,分析你的查询语句或者是表结构的性能瓶颈。三:如何用Explain?1:比如这条SQL语句:select *from tbl_cmp;2:使用expalain如下:explain select *f..
2020-06-14 20:18:40
180
原创 类初始化和实例初始化的过程详解
**一:首先代码如下:**package cn.itcast.controller;public class Father { private int i=test(); private static int j=method(); static { System.out.println("(1)"); } Father(){ System.out.println("(2)"); } { Sys
2020-06-13 21:25:44
194
原创 JVM的垃圾收集器
1:如果说收集算法时内存回收的方法论,那么垃圾收集器就是内存回收的具体体现,HotSpot虚拟机的垃圾收集器:其中用于回收新生代的收集器包括Serial、PraNew、Parallel Scavenge,回收老年代的收集器包括Serial Old、Parallel Old、CMS,还有用于回收整个Java堆的G1收集器。2:Serial收集器:Serial收集器时最基本,发展历史最悠久的收集器,这个收集器是一个单线程的收集器,但他的“单线程”的意义并不仅仅说明他只会使用一个CPU或一条收集线程区完成收
2020-05-27 23:04:05
162
原创 JVM中垃圾收集机制
一:对象已死吗?在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进回收前,第一件事就是确定这些对象之中还有哪些对象存活,哪些已经死去(即不可能再被任何途径使用的对象)二:判定垃圾是否存活办法1:引用技术算法:为每个对象创建一个引用计数,有对象引用时计数器 +1,引用被释放时计数 -1,当计数器为 0 时就可以被回收。它有一个缺点不能解决循环引用的问题。2:可达性分析算法:从 GC Roots 开始向下搜索,搜索所走过的路径称为引用链。当一个对象到 GC Roots 没有任何引用链
2020-05-26 22:43:56
194
原创 JVM中类装载器详解和内存区域的划分和堆栈的区别和对象的内存分配策略
**A:java内存区域主要分为线程共享区:方法区和堆,线程独占区有:虚拟机栈,本地方法栈和程序计数器**
2020-05-26 21:50:29
249
原创 数据库索引数据结构解析(B+Tree)
一:Mysql索引: 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。 索引的一个主要目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。 索引是对数据库表中一个或多个列(例如,employee 表的姓名 (name) 列)的值进行排序的结构。 例如这样一个查询:select * from table1 w
2020-05-15 12:03:44
340
原创 SpringMvc常用注解详解:@RequestParam,@RequestBody,@PathVariable
一:@RequestParam作用:把请求中指定名称的参数给控制器中形参赋值,就是如果要接受请求的参数,两个名称必须一致才能够接收到,否则接收不到传来的值。这时如果参数名称不一致,就可以使用@RequestParm注解属性:value:请求参数中的名称required:请求参数中是否提供此参数值。默认值:true。表示必须提供,如果不提供将报错代码示例:二:@RequestBody...
2020-04-19 22:57:20
592
原创 【面试题】Redis缓存穿透,缓存击穿,缓存雪崩以及解决方法
一:缓存穿透缓存穿透:一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去数据库查找。一些恶意的请求会故意查询不存在的key,而且需求量很大。如果发送一万个不存在key的请求,就会对后端系统造成很大的压力,数据库有可能会挂掉,这叫做缓存穿透。解决方法:A:缓存空对象:当发送了请求,通过不存在的key去查找值时,我们可以在缓存中去添加这个key,并且给这份key赋值为...
2020-04-08 17:24:11
1412
原创 【面试】Redis持久化RDB和AOF(原理,配置以及两者优缺点)
一:持久化:redis时内存型的nosql数据库,项目数据时非常重要的,所以数据安全必须考虑,而redis支持将数据持久化到磁盘。redis默认是有持久化的,当我们存储一些数据时,会出现一个dump.rdb文件,这个文件就是用来持久化,保证我们的数据不会丢失。redis一共有两种持久化方法,一个时RDB,一个时AOF二:RDB(Snapshotting)原理:首先redis是一个单线程,主...
2020-04-02 13:37:04
1375
7
原创 Mybatis的一级缓存和二级缓存
缓存可以减少与数据库的通信,从而提高效率,经常查询的数据可以进入缓存,经常改变的数据没必要进缓存。首先对于一级缓存:存储位置:SqlSession:即一个SqlSession对象发起查询后,查询结果会缓存在自己的内部有效范围:用一个SqlSession的多次查询,即同一个SqlSession的多次相同的sql的查询可以使用一级缓存清除方式:sqlSession.clearCac...
2020-03-25 23:31:04
178
原创 Mybatis延迟加载
首先提出一个问题: 在一对多,当我们有一个用户时,他有100个用户 在查询用户的时候,要不要把关联的账户查出来? 在查询账户的时候,要不要把关联的用户查出来?那么什么时延迟加载: 在真正使用数据时才发起查询,不用的时候不查询。按需加载(懒加载)什么时立即加载: 不管用不用,只要一调用方法,马...
2020-03-25 19:40:25
124
原创 商品信息进行分页展示(一看就会)
如果我们要进行分页展示的话页面上肯定要显示这些数据:商品信息,总页数,当前页当然了还有首页,尾页,上一页,下一页也可以出现在页面中,当然了我们还要在实体中写商品总个数,为了计算出一共有多少页,因此我们只需要将这些数据封装到实体PageBean中即可,在这里我使用MVC三层架构去进行调用,最终获得数据并进行封装,显示到页面上。1:因此我们先编写实体PageBean(我就不生成get()和set(...
2020-03-22 21:25:27
2174
原创 Shiro中自定义Realm案例
之前我们将用户信息放在了shiro.ini中,将用户的信息写si在了上面,并没有与数据库进行关联,因此我们需要自定义Realm,将用户的信息存放在数据库中。第一步:建表(并添加用户数据)第二步:建立Maven项目导入依赖: <dependencies> <dependency> <groupId>junit...
2020-03-22 15:43:59
211
原创 Shiro与Web的集成,并进行简单测试
Shiro与Web进行集成,与web项目集成后,shiro的工作模式如下:1:如上:ShiroFilter会在springmvc之前拦截所有请求,对于请求做访问控制,如请求对应的功能是否需要有认证的身份,是否需要某种角色,是否需要某种权限。(1):如果没有做身份认证,则讲请求强制跳转到登录页面,如果没有充分的角色或权限,则将请求跳转到权限不足的页面(2):如果校验成功,则执行请求的...
2020-03-21 20:55:23
215
原创 Shiro简单概述和基础架构
一:为什么要使用shiro?1:项目中的密码是否可以明文存储?2:是否任意访客,无论是否登录都可以访问任何功能?3:项目中的各种功能操作,是否时所有的用户都可以任意访问?综上:当项目中的某些功能被使用时,需要进行安全校验,进而保证整个系统的运行秩序二:Shiro是什么?1:Apache Shrio是Java的一个安全(权限)框架2:Shiro可以轻松的完成:身份验证,授...
2020-03-21 19:16:18
185
原创 SpringBoot的webjars和静态资源映射规则
当我们的打包方式是jar时,springboot对我们的资源文件就有映射规则,所以我们必须去了解他在springboot中web的配置都在WebMvcAutoConfiguration中,有个添加资源映射1:其中有个/webjars/**,意思时/webjars/**下面所有文件都去classpath:/META-IN/resources/webjars/下面去找,比如你引入了j...
2020-03-12 23:27:46
246
原创 SpringBoot学习之路之@ConfigurationProperties,@PropertySource,@ImportResource,@Bean,@Configuration
一:@ConfigurationProperties:1:将配置文件中配置的每一个属性的值,映射到这个组件中@ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;prefix = "person":配置文件中哪个下面的所有属性进行一一映射,只有这个组件是容器中的组件,才能容器提供的@ConfigurationPr...
2020-03-11 11:03:51
125
原创 Mybatis中#{}和${}的区别
#{}表示一个占位符号,这是预编译的,如果传输单个简单类型值,#{}括号中可以是value或其它名称。通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。#{}可以有效防止sql注入。#{}也可以接收简单类型值。 ${}表示字符串拼接sql串,如果传入的时简单类型的值${}括号中只能是value(数据库的字段名),这个不是预编译的,通...
2020-02-18 17:15:16
213
原创 Mybatis与Hibernate的区别
Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句。mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。 Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能...
2020-02-18 16:49:06
118
原创 ssm框架搭建(Spring,Mybatis,SpringMVC)
一:建立WEB项目,准备jar包spring的jar包,Mybatis的jar包,Spring+Mybatis的整合包,Mysql的数据库驱动包,c3po连接池包,spring事务包,springmvc等等二:框架搭建1:先对springmav进行配置,在src下建立springmvc.xml(1):开启注解扫描 只扫描Controller(2):配置的视图解析器对象,让浏览器...
2020-02-18 16:19:34
150
原创 SpringAOP基于注解的配置简单案例
一:配置XML,开启注解<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http:/...
2020-02-17 17:36:15
215
原创 Spring基础XML的AOP编写和简单案例
一:Spring的AOP简单介绍:AOP(面向切面编程): AOP:意为面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术,AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架的一个重要内容,是函数式编程的以一种衍生泛型,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效...
2020-02-17 16:20:49
484
原创 实现TreeSet,保证元素有序,使用比较器,实现Comparator接口
一:TreeSet基于TreeMap的实现,使用元素的自然排序对元素进行排序,或者创建Set时提供的Comparator进行排序,取决于使用的构造方法。案例:创建学生类。,添加学生对象并进行比较package Domain;public class Student2 { private String name; private int age; public String ge...
2020-02-15 17:33:27
250
原创 使用TreeSet添加对象如何保证有序,实现Comparable接口
当我们使用TreeSet时,如果添加了学生对象的话,我们就必须去实现Comparable接口,自定义比较方法,当然也可以实现Comparator接口,,这次我们实现Comparable接口。package Domain;////按照年龄大小排序public class Student implements Comparable<Student>{ private Stri...
2020-02-15 17:07:55
600
原创 HashSet如何保证元素唯一性的源码分析
一:首先插入一段代码package cn.itcast;import java.util.HashSet;public class HashSetTest { public static void main(String[] args){ HashSet hs=new HashSet(); hs.add("hello"); hs...
2020-02-15 15:58:49
275
原创 Spring基本注解:@Component注解,@ Autowired,@Resource,@Value,@Service,@Repository
1:用于创建对象的 他们的作用就和在xml配置文件中编写一个<bean>标签实现的功能是一样的 Component:作用:用于把当前类对象存入spring容器中 属性:value:用于指定bean的id,当我们不写时,他的默认值就是当前类名,且首字母小写。2:也是用于创建对象的...
2020-02-10 13:28:02
789
原创 Hibernate的映射的配置文件编写
一:Hibernate简介1:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。2:Hibernate框架技术最关键是数据持久化,是将数据保存到持久层的过程。持久层的数据...
2020-01-31 20:37:02
259
4
原创 JQuery实现省市联动
JQuery实现省市联动一:JQuery简介:jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它...
2019-10-08 23:22:50
502
5
原创 MySql_JDBC基本的增删改查
一JDBC简介:JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。二:连接数据库进行操作步骤:1:加载驱动;2:建立连接;3:执行...
2019-09-23 23:25:11
156
原创 MySql基本操作与实例代码
目录一:MySql的简介二:MySql的启动三:MySql的基本操作以及实例代码一:MySql的简介: MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于Oracle旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS(Relational Database Manag...
2019-09-16 23:10:51
780
4
Mybatis的以及缓存和二级缓存(案例).mhtml
2020-03-25
Hibernate映射文件配置.mhtml
2020-01-31
Hibernate映射文件配置.mhtml
2020-01-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人