Java中的四种引用 java中四种引用:a.强引用平常我们代码中写到的引用类型都是强引用类型,比如Object obj = new Object();, Object实例就有一个强引用类型指向它,在GC过程中即使发生OOM,该Object实例都不会被回收。b. 软引用 - SoftReference定义方式:SoftReference sr = new SoftReference(new Object());...
servlet中三大域 最近工作中用到了servlet中的作用域,顺便来总结servlet中三大域javaweb开发中Servlet三大域对象的应用(request、session、application(ServletContext))。Requestrequest:一个请求链,每一个请求都会创建一个request,作用域为当前的请求链,一般用于同一请求链之间不同页面的参数传递,如表单中的值传递。Request...
cookie,session和token Session的由来随着交互式Web应用的兴起,像在线购物网站,需要登录的网站等等,马上就面临一个问题,那就是要管理会话,必须记住哪些人登录系统, 哪些人往自己的购物车中放商品, 也就是说服务器必须把每个人区分开,这就是一个不小的挑战,因为HTTP请求是无状态的,所以想出的办法就是给大家发一个会话标识(session id), 说白了就是一个随机的字串,每个人收到的都不一样, 每次大家向服...
公钥,私钥,签名以及SSH的简述 公钥与私钥公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。通过这种算法得到的密钥对能保证在世界范围内是独一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必...
MYSQL连接查询的优化 表连接算法Nested Loop Join(NLJ)算法:首先介绍一种基础算法:NLJ,嵌套循环算法。循环外层是驱动表,循坏内层是被驱动表。驱动表会驱动被驱动表进行连接操作。首先驱动表找到第一条记录,然后从头扫描被驱动表,逐一查找与驱动表第一条记录匹配的记录然后连接起来形成结果表中的一条记。被驱动表查找完后,再从驱动表中取出第二个记录,然后从头扫描被驱动表,逐一查找与驱动表第二条记录匹配的记录...
MYSQL的连接查询 JOIN的含义就如英文单词“join”一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接。首先我们先创建两张表CREATE TABLE t_blog( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(50), typeId INT ); SELECT * FROM ...
lombok常用注解-持续总结 @NonNull@NonNull 入门使用你可以在方法或构造函数的参数上使用@NonNull让lombok为你自动生成null-check语句。null检查会被添加到方法的最顶层,就像下面代码所示:if (param == null) { throw new NullPointerException("param is marked @NonNull but is null");}...
乐观锁与悲观锁 区别悲观锁:总是假设最坏的情况,认为竞争总是存在,每次拿数据的时候都认为会被修改,因此每次都会先上锁。其他线程阻塞等待释放锁。乐观锁:总是假设最好的情况,认为竞争总是不存在,每次拿数据的时候都认为不会被修改,因此不会先上锁,在最后更新的时候比较数据有无更新,可通过版本号或CAS实现。使用场景悲观锁:用于写比较多的情况,避免了乐观锁不断重试从而降低性能乐观锁:用于读比较多的情况,避免了不必...
Callable、Future和FutureTask总结 1.Callable接口我们先回顾一下java.lang.Runnable接口,就声明了run(),其返回值为void,当然就无法获取结果了。public interface Runnable { public abstract void run();}而Callable的接口定义如下public interface Callable<V> { V ...
浅谈线程池 1.Executor框架浅析首先我们得明白一个 问题,为什么需要线程池?在java中,使用线程来执行异步任务时,线程的创建和销毁需要一定的开销,如果我们为每一个任务创建一个新的线程来执行的话,那么这些线程的创建与销毁将消耗大量的计算资源。同时为每一个任务创建一个新线程来执行,这样的方式可能会使处于高负荷状态的应用最终崩溃。所以线程池的出现为解决这个问题带来曙光。我们将在线程池中创建若干条线程,当...
简述多线程中的死锁以及thread.join 死锁java中导致死锁的原因多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放,而该资源又被其他线程锁定,从而导致每一个线程都得等其它线程释放其锁定的资源,造成了所有线程都无法正常结束。这是从网上其他文档看到的死锁产生的四个必要条件:1、互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用2、不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动...
java中的json的util工具类 先定义两个bean首先是一个User对象public class User implements Serializable { private static final long serialVersionUID = -8329084343916143192L; private String name; private Phone phone;省略set和get以及...
leetcode中最长回文子串 题目地址:https://leetcode-cn.com/problems/longest-palindromic-substring/给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”中心扩展算法回文中心的...
leetcode中--无重复字符串的最长子串 刷到一道leetcode上无重复字符串的最长子串,使用了滑动窗口的方式。感觉很好,总结下。题目地址:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因...
java中所谓的值传递和引用传递 java中数据类型主要分为基本类型和引用类型基本类型的变量保存原始值,所以变量就是数据本身。引用类型的变量保存引用值,所谓的引用值就是对象所在内存空间的“首地址值”,通过对这个引用值来操作对象。值传递在方法的调用过程中,实参把它的实际值传递给形参,此传递过程就是将实参的值复制一份传递到函数中,这样如果在函数中对该值(形参的值)进行了操作将不会影响实参的值。因为是直接复制,所以这种方式在传递...
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容器注...
Mybatis mybatis框架概述:mybatis是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql语句本身, 而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。 mybatis通过xml 或注解的方式将要执行的各种statement配置起来,并通过java对象和statement 中 sql 的动态参数进行映射生成最终执行的 sql...
@Transactional 注解式事务 @Transactional注解 可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。虽然@Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @...
页面请求跨域问题 跨域问题跨域:浏览器对于javascript的同源策略的限制 。以下情况都属于跨域:如果域名和端口都相同,但是请求路径不同,不属于跨域,如:www.jd.com/itemwww.jd.com/goodshttp和https也属于跨域。为什么会有跨域问题跨域不一定都会有跨域问题。因为跨域问题是浏览器对于ajax请求的一种安全限制:一个页面发起的ajax请求,只能是与当前页域名相同...
mysql中InnoDB引起的死锁 关于死锁MyISAM表锁是deadlock free的,这是因为MyISAM总是一次获得所需的全部锁,要么全部满足,要么等待,因此不会出现死锁。但在InnoDB中,除单个SQL组成的事务外,锁是逐步获得的,这就决定了在InnoDB中发生死锁是可能的。如下所示的就是一个发生死锁的例子。在上面的例子中,两个事务都需要获得对方持有的排他锁才能继续完成事务,这种循环锁等待就是典型的死锁。发生死锁后...