自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java中的锁

1. Lock接口一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。Java SE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了(通过synchronized块或者方法所提供的)隐式获取释放锁的便捷性,但是却拥...

2020-03-08 19:49:11 249

原创 springBoot实现邮件发送

1.邮件协议背景知识1.1 SMTP协议(Simple Mail Transfer Protocol)SMTP协议,又称简单邮件传输协议,是建立在FTP文件传输服务上的一种邮件服务,SMTP的重要特性之一是其能跨越网络传输邮件,能够在不同的网络中“接力”传输。可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。1.2 POP3协议(Post Of...

2020-02-23 21:51:16 494

原创 spring事务管理

事务回顾1、事务的特性:①原子性:事务是不可分割的,要么都成功,要么都失败②一致性:事务发生前和事务发生后,事件的总数状态不变。(例如:转账操作)③隔离性:多个事务在执行时可能会收到彼此的影响,所以采用了不同的隔离级别来避免这种影响④持久性:事务一旦提交,它对数据的改变就是永久性的,即使数据库发生故障也不应该有什么影响。2、多个事务造成的影响①脏读:一个事务读取到了另一...

2018-10-27 22:37:26 321

原创 spring循环依赖问题

什么是循环依赖循环依赖就是循环引用,就是两个或多个bean之间相互持有对象,比如A引用B,B引用C,C引用A,他们最终反映为一个环,如下类图所示: spring如何解决循环依赖spring容器的循环依赖分为两类:一类是构造器循环依赖,另一类是setter循环依赖。(1)构造器循环依赖构造函数构成的循环依赖是无法解决的,只能抛出BeanCurrentlyInCreatio...

2018-10-27 22:03:19 790

原创 CyclicBarrier栅栏

CyclicBarrier有什么作用?在现实生活中,在进行某个活动前需要等待人全部都齐了才开始。例如吃饭时要等全家人都上座了才动筷子,旅游时要等全部人都到齐了才出发,比赛时要等运动员都上场后才开始。栅栏就可以很好的模拟这类场景,利用CyclicBarrier类可以实现一组线程相互等待,当所有线程都到达某个屏障点后再进行后续的操作。下图演示了这一过程。 CyclicBarrier...

2018-10-22 17:12:19 259

原创 线程池ThreadPoolExecutor

为什么使用线程池,线程池有什么优势?因为线程的创建和销毁都会伴随着系统的开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率。而且线程并发数量过多,抢占系统资源从而导致阻塞。所以需要对线程进行简单的管理,比如:延时执行,定时循环执行,这就需要线程池来进行管理。线程池有以下好处:1、降低资源消耗; 2、提高响应速度; 3、提高线程的可管理性。Java1.5中引入的Executo...

2018-10-11 18:43:44 275

转载 CountDownLatch闭锁

什么是闭锁闭锁的作用相当于一扇门:用来同步一个或多个任务,强制他们等待由其他任务执行的一组操作完成。在闭锁到达结束状态之前,这扇门一直是关闭的,并且没有任务线程能通过。直到闭锁达到结束状态时,这扇门才会打开,并且允许所有的线程通过。当闭锁到达结束状态后,这扇门将永远保持打开状态,因为闭锁将不会在改变其状态。CountDownLatch是一种灵活的闭锁实现,它的内部提供了一个计数器,该计数器...

2018-10-11 16:23:04 460

原创 线程之间的协作——Exchange

Exchanger作用      Exchanger是个线程间协作的工具类。Exchanger用于进行线程间的数据交换。它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过 exchange*() 方法交换数据,如果第一个线程先执行exchange()方法,它会一直等待第二个线程也执行exchange方法,当两个线

2018-10-10 15:01:32 322

原创 happen-before原则

happen-before是JMM最核心的概念,所以在了解happen-before原则之前,首先需要了解java的内存模型。JMM内存模型     java内存模型是共享内存的并发模型,线程之间主要通过读-写共享变量来完成隐式通信。java中的共享变量是存储在内存中的,多个线程由其工作内存,其工作方式是将共享内存中的变量拿出来放在工作内存,操作完成后,...

2018-10-09 23:27:30 36823 7

原创 Condition接口

Conditionwait()、notify()与synchronized配合可以实现等待通知,condition和Lock配合同样也可以实现等待通知,但是两者之前还是有区别的。Condition定义了等待/通知两种类型的方法,当前线程调用这些方法时,需要提前获取到Condition对象关联的锁,Condition对象是由Lock对象创建出来的(Lock.newCondition),换句话说,...

2018-10-09 22:50:36 1153

原创 深克隆和浅克隆

为什么需要克隆?new出来的对象中的属性都是初始化时候的值,当需要一个新的对象来保存当前对象的“状态”就靠clone方法了。直接使用Object a=new Object();Object b;b=a不行吗,答案是不行的。因为这只是克隆了引用。如何实现克隆?首先由两种克隆的方式,一个是深克隆,一个是浅克隆。他们之间的区别在于:是否支持引用类型的成员变量的复制,深克隆会克隆引用类型的成员变量。...

2018-09-30 17:53:44 133

原创 redis内存淘汰策略

     Redis内存淘汰指的是当缓存内存不够用的清情况下,用户存储的一些键被可以被Redis主动地从实例中删除。内存的淘汰机制的初衷是为了更好地使用内存,用一定的缓存miss来换取内存的使用效率。首先缓存都有哪些清空策略?场景的缓存清空策略一般有:FIFO(first in first out)先进先出策略,最先进入缓存的数据在缓存...

2018-09-28 09:45:33 449

原创 删除倒数第K个节点

题目描述: 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.思考: 链表因为其特殊的结构,在操作链表的时候最常见的就是使用多种指针操作,对于这个问题使用两个指针就可以搞定了,具体的思路如下图所以...

2018-08-01 08:52:30 1283

原创 两个单向链表的第一个公共结点

leetcode160:相交链表题目:编写一个程序,找到两个单链表相交的起始节点实例:A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3思路:因为链表是单向链表,所...

2018-08-01 08:44:31 815

原创 动态规划--0-1背包问题

问题描述:有一个背包,它的容量为C(Capacity),现在有n种不同的物品,编号为0..n-1,其中每一件物品的重量为W(i),价值为v(i)。问可以向这个背包中盛放那些物品,使得在不超过背包容量的基础上,物品的总价值最大使用递归解决问题的时候,要首先知道递归要解决怎样的问题,也就是说定义状态。首先有两个变量n个物品,容量为C的背包,所以: F(n,C)考虑将n个物品放进容量为C...

2018-07-23 20:42:39 371

原创 内存屏障

                锁在保证可见性的时候,会有两个操作刷新处理器缓存(获得锁)和冲刷处理器缓存(释放锁)。前一个动作保证了:当前线程能够读取到前一个线程对共享数据的更新,后一个动作保证了:该锁的所有持有线程对这些数据所做的更新对该锁的所有持有线程可见。而这两个动作的实现是通过:内存屏障完成的。什么是内存屏障?       内存屏障是一种CPU指令,用于控制特定条件下的重排序...

2018-07-23 20:25:49 377

原创 JVM运行时内存划分

一、运行时数据区域JVM在执行java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。这些区域有各自的创建和销毁的时间,这些区域可分为线程私有和共有两类,线程私有的有:程序计数器、java虚拟机栈、本地方法栈;线程公有的有:堆、方法区。如图所示:1、程序计数器(线程私有)也就是字节码的行号指示器(模拟的是CPU的程序计数器),指示当前进程所要执行的字节码(而不是下一条),这个指令...

2018-07-12 23:32:16 1311

原创 spring 事务管理

事务回顾1、事务的特性:①原子性:事务是不可分割的,要么都成功,要么都失败②一致性:事务发生前和事务发生后,事件的总数状态不变。(例如:转账操作)③隔离性:多个事务在执行时可能会收到彼此的影响,所以采用了不同的隔离级别来避免这种影响④持久性:事务一旦提交,它对数据的改变就是永久性的,即使数据库发生故障也不应该有什么影响。2、多个事务造成的影响①脏读:一个事务读取到了另一个事务还没有提交的数据(脏数...

2018-07-10 16:02:27 177

原创 LeetCode27:移除元素

给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。...

2018-05-29 20:18:25 2311

原创 leetcode24:两两交换相邻的节点

描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.说明:你的算法只能使用常数的额外空间。 你不能只是单纯的改变节点内部的值,而且对于链表的操作,一般都要求操作节点而仅仅是修改节点上的数据。思路:    因为需要操作头结点(head),为了统一过程,需要新建一个表头节点(preHe...

2018-04-27 20:56:05 2540 1

转载 IntellJ Idea中找不到tomcat的解决办法

问题描述:    在使用idea搭建环境的过程中,发现点击“+”找不到tomcat,以为是没有安装tomcat插件,然后去搜索tomcat插件,发现idea上无法安装tomcat插件失败,可能是因为我用的是java7的原因。解决办法:    其实造成这种情况的原因是在软件设置中没有将tomcat的插件开启。所以只需要在setting里找到tomcat server然后开启就行了。具体做法如下图所示...

2018-04-21 10:41:27 15726 3

转载 Mysql中常用的日期时间函数

日期和时间函数可能的需求:  当前时间是多少、下个月的今天是星期几、统计截止到当前日期前 3 天的收入总和……上述需求就需要使用日期和时间函数来实现:MySQL服务器中的三种时区设置:  ①系统时区---保存在系统变量system_time_zone  ②服务器时区---保存在全局系统变量global.time_zone  ③每个客户

2018-01-17 09:10:00 2021

转载 快速幂取模算法

当我们计算AB%C的时候,最便捷的方法就是调用Math函数中的pow方法,但是有时A的B次方数字过大,即使是双精度的double也会溢出,这个时候为了得到AB%C的结果,我们会选择使用快速幂取模算法,简单快速的得到我们想要的结果。为了防止数字溢出并且降低复杂度,我们需要用到下面的公式:ab mod c = (a mod c)b mod c这个公式的意思就是:积的取余等于取余的积的取余。很容易看出来这

2017-12-25 17:10:37 450

转载 快速幂取模算法

当我们计算AB%C的时候,最便捷的方法就是调用Math函数中的pow方法,但是有时A的B次方数字过大,即使是双精度的double也会溢出,这个时候为了得到AB%C的结果,我们会选择使用快速幂取模算法,简单快速的得到我们想要的结果。为了防止数字溢出并且降低复杂度,我们需要用到下面的公式:ab mod c = (a mod c)b mod c这个公式的意思就是:积的

2017-12-25 17:04:07 166

转载 Java常量池的大概理解

java常量池是一个经久不衰的话题,也是面试官的最爱,题目花样百出,小菜早就对常量池有所耳闻,这次好好总结一下。 理论          小菜先拙劣的表达一下jvm虚拟内存分布:      程序计数器是jvm执行程序的流水线,存放一些跳转指令,这个太高深,小菜不懂。     本地方法栈是jvm调用操作系统方法所使用的栈。     虚拟机栈是jvm执行java

2017-12-25 00:20:20 204

转载 java.net.SocketException: Unrecognized Windows Sockets error: 10106: create

不知道什么原因tomcat启动不起来,每次启动都会显示这样的错误,在网上也找了很久,网上的回答各异,找了很久终于解决。首先看一下我的错误情况:java.net.SocketException: Unrecognized Windows Sockets error: 10106: create at java.net.ServerSocket.createImpl(ServerSock

2017-12-20 16:36:37 1571

转载 IntelliJ IDEA启动Tomcat后,无法访问Tomcat主页

今天在运行项目启动Tomcat后,发现无法访问Tomcat首页,出现404错误。即输入http://localhost:8080时无法访问Tomcat首页,但却可以正确访问项目的其他页面。问题如下图所示:后台上网查找后,终于找到了一个解决办法。该问题出现是因为:我们的项目的工件输出目录在下图红色矩形框出来的地方,而不是在安装的tomcat的Apache-tomcat

2017-12-16 21:11:39 852

转载 文件上传的细节问题

1、中文乱码问题文件名中文乱码问题: ①调用ServletUpLoader的setHeaderEncoding方法, ②设置request的setCharacterEncoding属性普通字段的乱码: ①手工转换 ②FileItem.getString("UTF-8"); //获得名称的时候传一个字符集上传文件的乱码: ServletFileUpload.s

2017-09-17 14:21:57 303

原创 关于发送邮件提醒的错误:java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream

今天才注册163邮箱账号,试着玩玩邮件的发送,可总是提醒java.lang.NoClassDefFoundError:com/sun/mail/util/LineInputStream错误,百度后才知道主要的原因是因为:          我们使用的是javaee5的库,其中javax.mail和javax.activation这两个包已经在javaEE5当中属于基础包了,就是JDK中自带

2017-09-14 00:22:14 2215

转载 can't return outside function or method解决方法

今天写web项目作业时,发现jsp中“Cannot return from outside a function or method” 提示return出错,百度了一下,网上说这是myeclipse的一个bug,去掉return就好了,去掉之后果然不报错,但是之后发现onSubmit()不能阻止表单提交,再百度之,原来这个return还真不能去掉。以下就是今天错误的解决方法           1

2017-09-12 21:18:32 4657

原创 Servlet初识

1、什么是ServletServlet是JavaWeb的三大组件之一(Servlet,Listener,Filter),它的工作就是:接受客户端的请求数据;完成请求;返回响应。Servlet是和平台无关的服务器端组件,它运行在Servlet容器中(如:Tomcat Servlet容器负责Servlet和客户的通信以及调用Servlet的方法)它是作为来自 Web 浏览器或其他 HTTP 客户端

2017-09-12 21:14:50 203

原创 JSON初识

1、什么是JSON          JSON(javascript Object Notation)是一种轻量级的数据交换格式。           JSON是用字符串来表示javascript对象,例如可以在Servlet中发送一个JSON格式的字符串给客户端javascript,javascript可以执行这个字符串,得到一个javascript对象。           XML也可以用来

2017-09-11 00:05:11 187

原创 xStream(javabean转换成xml)

1、什么作用将JavaBean转换为(序列化)为xml。这样就可以和ajax技术对接上,服务器可以将对象转换成xml,在使用ajax技术发送给客户端。2、使用jar包核心jar包:stream-1.4.7.jar必须依赖包:xpp3_min-1.1.4c.jar (XML pull parser: 一款速度很快的xml解析器)3、使用步骤XStream xstream=new XStrea

2017-09-10 18:32:43 464

原创 生成验证码

import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import j

2017-09-10 09:27:58 222

原创 发送邮件

JavaMail实现发送邮件是java提供的一组API,用来发送和接受邮件jar包:mail.jar和actvition.jar邮件协议概述:SMTP:发送邮件协议(主要使用它)POP3:接受邮件的协议IMAP:即可发送邮件又能接受协议。SMTP的端口号:25 , POP3的端口号:110核心类:Session 如果你得到他,表示已经与服务器连接上了,与Conn

2017-09-10 09:20:09 441

原创 文件上传和下载

文件上传1、上传对表单的限制 * 首先表单的提交方法:post * 必须添加属性:enctype=”multipart/form-data”(多部件表单数据)          * 必须添加文件表单项:<input type="file" name="xxx"> 2、上传对Servelt的限制          * 首先以前获取

2017-09-08 14:02:24 414

原创 重载、重写、多态的区别

重载的特点:  1、方法名相同,参数列表不同(个数、顺序、类型)2、返回的类型、访问权限、抛出的异常都不能影响重载,也就是说不做为区分的依据。3、方法的异常类型和数目不会对重载造成影响重写的特点: 1、参数列表必须完全与被重写的方法的相同   2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>priv

2017-09-06 22:08:32 487 1

原创 链表的抽象数据结构

将作为类型的List(表)和Position(位置)以及函数的原型都列在  .h 头文件中。具体的Node(结点)声明则在 .c 文件中。

2017-08-09 23:15:42 846

原创 栈的应用—逆波兰表达式

逆波兰表达式又称为“后缀表达式”。例:4.99*1.06+5.99+6.99*1.06 的后缀表达式为 4.99 1.06 *5.99 +6.99 1.06 +正常写的表达式又称为中缀表达式,如何将一个中缀表达式表达式转换成后缀表达式?这里就要用到栈。但见到一个数时就把他推入栈中,在遇到一个运算符时就将该运算符作用于该栈弹出的两个数(符号)上,将说得结果推入栈中。 举个例子:6 5

2017-08-09 10:09:03 346

原创 Tomcat服务器的搭建和配置和结构简介

首先下载相应版本的Tomcat服务器,下载地址为:http://tomcat.apache.org/。将下载好的文件加压到相应的目录中。      接下来配置环境变量,点击电脑的属性->高级系统设置->环境变量->新建系统环境变量->变量名:CATALINK_HOME    变量值:Tomcat安装的路径。      最后测试安装效果,打开Tomcat中的bin目录双击startup.bat,出现黑

2017-08-07 23:59:47 290

分布式系统原理介绍

介绍人分布式系统中的一些与原理性改变,有助于读者对于分布式系统有个宏观的理解和感受

2019-02-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除