- 博客(56)
- 收藏
- 关注
原创 Java中的四种引用
java中四种引用:a.强引用平常我们代码中写到的引用类型都是强引用类型,比如Object obj = new Object();, Object实例就有一个强引用类型指向它,在GC过程中即使发生OOM,该Object实例都不会被回收。b. 软引用 - SoftReference定义方式:SoftReference sr = new SoftReference(new Object());...
2019-11-27 11:57:37
380
原创 servlet中三大域
最近工作中用到了servlet中的作用域,顺便来总结servlet中三大域javaweb开发中Servlet三大域对象的应用(request、session、application(ServletContext))。Requestrequest:一个请求链,每一个请求都会创建一个request,作用域为当前的请求链,一般用于同一请求链之间不同页面的参数传递,如表单中的值传递。Request...
2019-11-26 21:36:00
444
原创 cookie,session和token
Session的由来随着交互式Web应用的兴起,像在线购物网站,需要登录的网站等等,马上就面临一个问题,那就是要管理会话,必须记住哪些人登录系统, 哪些人往自己的购物车中放商品, 也就是说服务器必须把每个人区分开,这就是一个不小的挑战,因为HTTP请求是无状态的,所以想出的办法就是给大家发一个会话标识(session id), 说白了就是一个随机的字串,每个人收到的都不一样, 每次大家向服...
2019-11-04 10:30:50
197
原创 公钥,私钥,签名以及SSH的简述
公钥与私钥公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。通过这种算法得到的密钥对能保证在世界范围内是独一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必...
2019-10-18 10:21:42
1509
原创 MYSQL连接查询的优化
表连接算法Nested Loop Join(NLJ)算法:首先介绍一种基础算法:NLJ,嵌套循环算法。循环外层是驱动表,循坏内层是被驱动表。驱动表会驱动被驱动表进行连接操作。首先驱动表找到第一条记录,然后从头扫描被驱动表,逐一查找与驱动表第一条记录匹配的记录然后连接起来形成结果表中的一条记。被驱动表查找完后,再从驱动表中取出第二个记录,然后从头扫描被驱动表,逐一查找与驱动表第二条记录匹配的记录...
2019-10-15 14:54:08
373
原创 MYSQL的连接查询
JOIN的含义就如英文单词“join”一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接。首先我们先创建两张表CREATE TABLE t_blog( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(50), typeId INT ); SELECT * FROM ...
2019-10-15 13:48:39
116
原创 lombok常用注解-持续总结
@NonNull@NonNull 入门使用你可以在方法或构造函数的参数上使用@NonNull让lombok为你自动生成null-check语句。null检查会被添加到方法的最顶层,就像下面代码所示:if (param == null) { throw new NullPointerException("param is marked @NonNull but is null");}...
2019-10-12 13:56:31
579
原创 乐观锁与悲观锁
区别悲观锁:总是假设最坏的情况,认为竞争总是存在,每次拿数据的时候都认为会被修改,因此每次都会先上锁。其他线程阻塞等待释放锁。乐观锁:总是假设最好的情况,认为竞争总是不存在,每次拿数据的时候都认为不会被修改,因此不会先上锁,在最后更新的时候比较数据有无更新,可通过版本号或CAS实现。使用场景悲观锁:用于写比较多的情况,避免了乐观锁不断重试从而降低性能乐观锁:用于读比较多的情况,避免了不必...
2019-09-26 17:06:25
267
原创 Callable、Future和FutureTask总结
1.Callable接口我们先回顾一下java.lang.Runnable接口,就声明了run(),其返回值为void,当然就无法获取结果了。public interface Runnable { public abstract void run();}而Callable的接口定义如下public interface Callable<V> { V ...
2019-09-12 10:57:37
130
原创 浅谈线程池
1.Executor框架浅析首先我们得明白一个 问题,为什么需要线程池?在java中,使用线程来执行异步任务时,线程的创建和销毁需要一定的开销,如果我们为每一个任务创建一个新的线程来执行的话,那么这些线程的创建与销毁将消耗大量的计算资源。同时为每一个任务创建一个新线程来执行,这样的方式可能会使处于高负荷状态的应用最终崩溃。所以线程池的出现为解决这个问题带来曙光。我们将在线程池中创建若干条线程,当...
2019-09-11 21:56:35
111
原创 简述多线程中的死锁以及thread.join
死锁java中导致死锁的原因多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放,而该资源又被其他线程锁定,从而导致每一个线程都得等其它线程释放其锁定的资源,造成了所有线程都无法正常结束。这是从网上其他文档看到的死锁产生的四个必要条件:1、互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用2、不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动...
2019-09-11 20:59:32
677
原创 java中的json的util工具类
先定义两个bean首先是一个User对象public class User implements Serializable { private static final long serialVersionUID = -8329084343916143192L; private String name; private Phone phone;省略set和get以及...
2019-09-11 11:16:36
1069
原创 Mybatis
mybatis框架概述:mybatis是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql语句本身, 而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。 mybatis通过xml 或注解的方式将要执行的各种statement配置起来,并通过java对象和statement 中 sql 的动态参数进行映射生成最终执行的 sql...
2019-09-10 18:03:53
300
原创 leetcode中最长回文子串
题目地址:https://leetcode-cn.com/problems/longest-palindromic-substring/给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”中心扩展算法回文中心的...
2019-09-06 15:37:01
112
原创 leetcode中--无重复字符串的最长子串
刷到一道leetcode上无重复字符串的最长子串,使用了滑动窗口的方式。感觉很好,总结下。题目地址:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因...
2019-09-06 14:48:12
154
原创 java中所谓的值传递和引用传递
java中数据类型主要分为基本类型和引用类型基本类型的变量保存原始值,所以变量就是数据本身。引用类型的变量保存引用值,所谓的引用值就是对象所在内存空间的“首地址值”,通过对这个引用值来操作对象。值传递在方法的调用过程中,实参把它的实际值传递给形参,此传递过程就是将实参的值复制一份传递到函数中,这样如果在函数中对该值(形参的值)进行了操作将不会影响实参的值。因为是直接复制,所以这种方式在传递...
2019-09-05 21:19:41
143
原创 spring中context:annotation-config与context:component-scan
我们在spring中会经常配置一些context:annotation-config/与包扫描<context:component-scan base-package=“com.xxx.xxx.xxx”/>context:annotation-config/context:annotation-config/是用于激活那些已经在spring注册的bean,显示的向spring容器注...
2019-09-05 10:06:32
137
原创 @Transactional 注解式事务
@Transactional注解 可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。虽然@Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @...
2019-09-04 10:04:13
270
原创 页面请求跨域问题
跨域问题跨域:浏览器对于javascript的同源策略的限制 。以下情况都属于跨域:如果域名和端口都相同,但是请求路径不同,不属于跨域,如:www.jd.com/itemwww.jd.com/goodshttp和https也属于跨域。为什么会有跨域问题跨域不一定都会有跨域问题。因为跨域问题是浏览器对于ajax请求的一种安全限制:一个页面发起的ajax请求,只能是与当前页域名相同...
2019-08-19 17:15:54
2439
原创 mysql中InnoDB引起的死锁
关于死锁MyISAM表锁是deadlock free的,这是因为MyISAM总是一次获得所需的全部锁,要么全部满足,要么等待,因此不会出现死锁。但在InnoDB中,除单个SQL组成的事务外,锁是逐步获得的,这就决定了在InnoDB中发生死锁是可能的。如下所示的就是一个发生死锁的例子。在上面的例子中,两个事务都需要获得对方持有的排他锁才能继续完成事务,这种循环锁等待就是典型的死锁。发生死锁后...
2019-08-18 15:56:48
385
原创 mysql中InnoDB锁
mysql中使用比较多的两种引擎是MyISAM和InnoDBMyISAM使用表级锁。InnoDB使用行级锁。表锁:开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低行锁:开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高InnoDBInnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION);二是采用了行级锁。数据库实现事务...
2019-08-18 15:29:32
158
1
原创 mysql中MyISAM锁
mysql中使用比较多的两种引擎是MyISAM和InnoDBMyISAM使用表级锁。InnoDB使用行级锁。表锁:开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低行锁:开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高MyISAM存储引擎只支持表锁,这也是MySQL开始几个版本中唯一支持的锁类型。随着应用对事务完整性和并发性要求的不断提高,MySQ...
2019-08-18 10:28:28
978
原创 mysql中对数据的去重
最近面试有家公司问了个mysql的数据去重,自己对于mysql一般多用于增删改查,所以私下来尝试了mysql数据的去重总结DISTINCT在使用MySQL时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返...
2019-08-17 15:31:40
18105
原创 Springboot入门之配置
其实人们把Spring Boot 称为搭建程序的脚手架。其最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少一切xml配置,做到开箱即用,迅速上手,让我们关注与业务而非配置。如果没有任何的xml,那么我们如果要配置一个Bean该怎么办?比如我们要配置一个数据库连接池,以前会这么玩:<!-- 配置连接池 --><bean id="dataSource" c...
2019-08-14 22:10:27
96
原创 java中的异常
Throwable体系:Error:严重错误Error,无法通过处理的错误,只能事先避免,好比绝症。Exception:表示异常,异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是必须要处理的。好比感冒、阑尾炎。异常(Exception)的分类:根据在编译时期还是运行时期去检查异常?编译时期异常:checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。(如日...
2019-08-14 21:29:29
132
原创 java中的常见排序算法
冒泡排序冒泡排序(Bubble Sort)是一种简单的排序算法。它重复访问要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。访问数列的工作是重复地进行直到没有再需要交换的数据,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端,像水中的气泡从水底浮到水面。冒泡排序算法的算法过程如下:①. 比较相邻的元素。如果第一个比第二个大,就...
2019-08-11 14:18:31
76
原创 设计模式---------工厂模式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。一、简单工厂模式简单工厂的定义:提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类实现汽车...
2019-08-09 14:59:38
107
原创 设计模式---------单例模式
java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍两种:懒汉式单例、饿汉式单例。单例模式有以下特点: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。线程安全的饿汉模式public class Hungry { /** * @param args */ //内部实例化 pr...
2019-08-08 23:58:18
78
原创 回顾SpringMVC
关于三层架构我们的开发架构一般都是基于两种形式,一种是 C/S 架构,也就是客户端/服务器,另一种是 B/S 架构,也就 是浏览器服务器。在 JavaEE 开发中,几乎全都是基于 B/S架构的开发。那么在 B/S架构中,系统标准的三层架构 包括:表现层、业务层、持久层。三层架构在我们的实际开发中使用的非常多。表现层也就是我们常说的web层。它负责接收客户端请求,向客户端响应结果,通常客户端使...
2019-08-08 19:51:28
198
原创 二进制的位运算
(一)按位与&两位全为1,结果才为10&0=0;0&1=0;1&0=0;1&1=1例如:51&5 即0011 0011 & 0000 0101 =0000 0001 因此51&5=1。特殊用法(1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都是零的数值相与,结果为零。(2)取一个数中指定位。例如:...
2019-08-08 17:34:52
865
1
原创 说说Spring(2)
上一篇我们聊了聊spring中最重要的IOC控制反转以及依赖注入,以及一些常用的配置。今天我们说一说spirng的另一个很重要的东西AOP。什么是 AOPAOP:全称是 Aspect Oriented Programming 即:面向切面编程。简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对我们的已有方法进行增强。AOP 的作用及优势...
2019-08-07 22:30:16
102
原创 说一说Spring(1)
最近回头重新看了看spring来下Spring是什么?Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control: 反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应...
2019-08-06 23:05:13
202
原创 浅谈Java的多线线程(2)
上一篇我们总结了线程的安全,线程的同步,以及线程的状态,这一篇我们接着讨论多线程的其他问题线程的通信概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同。比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作,一个是生产,一个是消费,那么线程A与线程B之间就存在线程通信问题。这就是常见的生产者和消费者问题。为什么要处理线程间通信:...
2019-08-06 13:37:58
92
原创 浅谈Java的多线程(1)
首先编写个例子代码public class MyThread extends Thread{ /* * 利用继承中的特点,将线程名称传递,进行设置 * / public MyThread(String name){ super(name); } /* ...
2019-08-06 13:22:53
144
原创 有关JVM的一些总结
首先说下类的记载类加载的五个过程加载:类加载器获二进制字节流,将静态存储结构转化为方法区的运行时数据结构,并生成此类的Class对象。验证:验证文件格式、元数据、字节码、符号引用,确保Class的字节流中包含的信息符合当前虚拟机的要求。准备:为类变量分配内存并设置其初始值,这些变量使用的内存都将在方法区中进行分配。解析:将常量池内的符号引用替换为直接引用,包括类或接口的解析、字段解析、类...
2019-08-06 11:49:50
129
原创 FastDFS---分布式文件系统
分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。Tracker Server:跟踪服务器,主要负责调度storage节点与client通信,在访问上起负载均衡的作用,和记录storage节点的运行状态,是连接client和storage节点的枢纽。Storage Server:存储服务器,...
2019-08-05 17:32:04
141
原创 SpringCloud--Zuul
不管是来自于客户端(PC或移动端)的请求,还是服务内部调用。一切对服务的请求都会经过Zuul这个网关,然后再由网关来实现 鉴权、动态路由等等操作。Zuul就是我们服务的统一入口。这样服务的接口便不会对外暴露。所需要的依赖<dependency> <groupId>org.springframework.cloud</groupId>...
2019-08-05 17:09:05
87
原创 SpringCloud--Feign
Feign主要用于服务之间的互相调用,内部集成了Robbin负载均衡以及Hystrix熔断导入依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId&g...
2019-08-05 16:59:00
90
原创 SpringCloud--Eureka
Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址提供者:启动后向Eureka注册自己信息(地址,提供什么服务)消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态创建一个Eureka注册中心依赖:<properties> <...
2019-08-05 15:17:32
113
原创 数据库的事务以及Spring管理事务
事务:如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。操作:1. 开启事务: start transaction;2. 回滚:rollback;3. 提交:commit;CREATE TABLE account ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(10), balanc...
2019-08-05 14:18:07
179
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人