自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 1. activiti6.0

eclipse集成activiti插件:打开eclipse ----> help —> install new software选择add -----> http://activiti.org/designer/update/然后便是不停的next和finish了,组图如下:

2020-06-29 00:25:29 137

原创 3. 用户管理 + VIM编辑器

vim命令用于编辑文本文件,如图,我在根目录下新建了一个test文件夹,然后通过vim vimtest001(没有这个文件的话就会新建一个)这个命令,会直接打开编辑界面。如图所示:退出vim编辑器: 按住esc,然后输入“ : ”,最后输入 q! :这个表示不保存退出按抓esc ,输入: ,再输入wq : 表示保存并退出然后按一下 i ,才可以在文件中输入。如图:grep 查询日志。...............

2020-06-28 23:24:22 408

原创 2 linux的常用命令

这里我们使用SecureCRT客户端去连接linux系统安装,一直next即可,安装成功后,使用root用户登陆,密码就是自己当初安装centos的时候设置的root密码,如图所示:如果此处不知道自己的ip,可以使用ifconfig命令在vmware中进行查看。linux的常用命令:......

2020-06-28 00:59:27 428

原创 1 linux知悉

第一步自然是安装vmware,我这里安装的是vm 9的版本安装就是next,next,next,可以参考这个:https://jingyan.baidu.com/article/154b463185bc6468cb8f4120.htmlvm安装成功之后,准备安装centos的镜像文件,如下:a. 点击 file,选择 new virtual machine… 如图:b. 第二,选择typic,然后点击next,如图c. 如图:选择iso,然后选择自己的iso的镜像文件的位置,注意避免..

2020-06-28 00:50:29 416

原创 10 xss攻击

什么是XSS攻击?XSS(Cross Site Scripting)攻击全称跨站脚本攻击.通俗的来说就是我们的页面在加载并且渲染绘制的过程中,如果加载并执行了意料之外的程序或代码(脚本、样式),就可以认为是受到了 XSS攻击.多发生于前段脚本注入。XSS攻击的危害包括1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力3、盗窃企业重要的具有商业价值的资料4、非法转账5、强制发送电子邮件6、网站挂马7、控..

2020-06-27 23:01:23 133

原创 9 模拟请求

使用token + 验证码来避免接口被模拟

2020-06-27 21:41:00 68

原创 8. 表单重复提交,防止Http重复提交

重复提交问题出现的原因:a. 网络延时b.重新刷新c. 交表单后,点击浏览器的【后退】按钮回退到表单页面后进行再次提交解决方案:a. 在js中申明一个变量,用来标识是否已经提交(治标不治本)b. 表单提交之后,将提交按钮设置为不可用(治标不治本)c. java代码中处理:使用token来解决:(1)在服务器端生成一个唯一的随机标识号,专业术语称为Token(令牌)(2)在当前用户的Session域中保存这个Token(3)然后将Token发送到客户端的Form表单中,在Fo..

2020-06-27 21:36:58 104

原创 7 跨域

跨域原因产生:在当前域名请求网站中,默认不允许通过ajax请求发送其他域名浏览器默认网站资源 都是必须在同一个资源下的。通常都是ajax请求不同域名导致的跨域。这种不会导致跨域解决方案:a. jsonp解决跨域,但是只支持get请求,不支持postb. 使用接口网关,在nginx中操作c. springcloud中使用的zuul(常用方式)d. 使用httpclient进行内部转发e. 在header请求头中设置参数允许跨域访问.response.setHeader(“Acc..

2020-06-27 00:26:01 155

原创 6 长连接与短连接

HTTP协议与TCP/IP协议的关系:HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP有可靠,面向连接的特点HTTP协议是无状态:TTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和你之前打开这..

2020-06-26 10:34:58 110

原创 5. http与https区别

两者之间最大的区别在于:https采用的是ssl + 证书 。超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协.

2020-06-26 09:34:15 808

原创 4. 反盗链技术&重定向的实现原理

http响应码中:304:表示从本地缓存中读取资源403:参数错误302:重定向502:正在发布服务为什么在请求的后面使用时间戳之后,可避免浏览器的缓存?浏览器在缓存的时候,会将资源路径(url)作为key缓存在本地,如果加了时间戳,那么这个key就会不一样,就不会去本地缓存读取资源了,而是去服务器请求资源。http防盗链技术:在浏览器的request header中,有一个参数可以查看当前请求的资源是否非法从别处获取的,如图所知:解决方案:a. 首先实现一个Filter接..

2020-06-25 20:11:00 211

原创 3 http协议知悉

http协议: 对浏览器客户端 和 服务器端 之间数据传输的格式规范。在B/S架构中,同步的概念指的就是一次请求与相应的过程,是请求发送以后的一种即时响应。异步请求: 通过中间件的操作,比如说消息中间件,不是即时响应。...

2020-06-23 23:55:35 134

原创 2. servlet,cookkie,session知悉

servlet是单例的,线程不安全的。所以避免在servlet中申明变量即使申明了变量,也需要用volatile关键字修饰。并且在调用这个变量的时候,需要加锁。cookie:由response设置,并且传递到客户端。客户端保存cookie到本地,下次发起request请求的时候会 将cookie带过去。...

2020-06-23 23:02:04 91

原创 2. 本地服务器映射外网

内网: 相当于局域网访问,在同一个网关,局域网是可以通讯的。外网:在广域网络进行访问。将本地服务发布到外网: 需要去借助一些外网的映射工具。

2020-06-23 00:35:23 397

原创 1. DNS域名解析

什么是DNS域名解析?就是将服务器ip映射成域名的过程。举个例子,我们在浏览器中输入www.baidu.com,我们其实并不知道百度服务器的ip地址。但是浏览器却能根据这个域名去找到百度的服务器。然后与百度服务器根据http协议进行连接那么具体的解析过程都有哪些操作呢?a. 首先,当我们在浏览器地址栏输入www.baidu.com的时候,此时浏览器并不会去直接连接百度的服务器,而是现在计算本地的host文件(本地映射文件)去寻找。b.那么外网是如何映射的呢?本地host没有的话,就会走签订网络.

2020-06-23 00:05:51 80

原创 13 分代算法

一个新的对象会先在Eden区,随这调用,标记的次数增多,会进入s0,s1区域,然后被调用次数过多,会进入老年代。进入老年代的对象,很少会被gc回收gc在进行回收的时候,其他的线程会被短暂阻塞。因为g如果在回收,别的线程还在执行的话,那么gc会不停地回收,所以gc会让别的线程进行阻塞。分代算法: 根据不同的区域选择不同的算法。一般在eden区域,选择使用计数法,s0,s1使用复制算法,老年代:标记压缩...

2020-06-22 23:44:53 201

原创 12 标记清楚与标记压缩算法

标记清楚与标记压缩算法:

2020-06-14 23:58:45 193

原创 11 复制算法

复制算法主要用在新生代中,老年代中没有这个算法,因为新生代中有s0,s1区,并且这两个区是相等的。新生代分为: edn区 +s0 + s1新创建的对象在eden区,当这个对象被经常使用,那么这个对象就会被移动到s0区。当又创建一个新的对象,并且这个对象也被频繁的使用的情况下,这个对象还是会被放在s0区,而不会放到s1区域的。为什么呢?当某个对象不被经常使用的时候,那些还是可达的对象会被复制到s1区域,而那些不可达的对象还是s0区域中,那么这个时候gc会直接将s0全部清理掉。这个就是..

2020-06-14 23:58:05 280

原创 10 引用计数法

见名知意: 给对象的引用进行计数(统计).每当有一个地方引用它时,计数器就加1,当引用失效时,计数器就减1;任何时刻计数器为0的对象就是不可能在被使用的.客观的说,引用计数算法的实现简单,判定的效率很高,在大部分的情况下是一个不错的算法.默认标记次数 = 15次,当标记 = 0,gc直接回收对象被引用的话,就会 +1,然后放到 s0或者s1区,如果还是被频繁使用,那么会放入老年代中。给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1..

2020-06-14 23:35:10 1943

原创 9 内存溢出与内存泄露

内存溢出的定义:对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着。(应用系统中存在无法回收的内存或者使用的内存过多,最终使得程序运行所需要的内存大于JVM所提供的最大内存)程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果(比如说项目中定义了诸多的静态变量,gc是不会去回收静态变量所占用的内存的)...

2020-06-14 22:29:07 98

原创 8 垃圾回收机制以及算法

垃圾回收机制: gc不定时的从堆内存中清理不可达的对象。可达对象: 这个对象还在使用不可达对象: 这个对象没有在使用(不可达的对象并不会马上就会被直接回收,而是至少要经过两次标记的过程)可达与不可达的区别在于这个对象引用是否被使用。比如说:Test t = new Test(); //只有声明的而没有使用,这就是不可达对象Test t1 = new Test();Test t2 = t1; //这个时候就是可达对象finalize(),Object..

2020-06-14 22:21:50 106

原创 28 AbstractQueuedSynchronizer(AQS)详解

在了解AQS之前,首先需要理解公平锁和非公平锁ReentranLock分为公平锁和非公平锁。二者的区别就在获取锁机会是否和排队顺序相关公平锁: 公平是针对锁的获取而言的,如果一个锁是公平的,那么锁的获取顺序就应该符合请求的绝对时间顺序就是说:如果锁被另一个线程持有,那么其他申请锁的线程会被挂起等待,加入等待队列。如果是公平的,那么就应该谁先申请锁,谁排在等待队列的最前面。后申请的就应该排在后面。当锁被释放的时候,通知等待线程再次尝试获取锁,公平锁会让最先进入队列的线程获得锁。而非公平锁则会唤醒所有.

2020-06-14 21:52:28 136

原创 7 栈溢出解决方案

什么是栈溢出: 无限递归调用。注意:是在方法中递归调用这个方法,循环中调用方法是不会出现栈溢出的。(循环调用不叫递归)栈是有深度的。所以需要设置增加栈的深度参数是: -Xss512m 设置最大调用深度....

2020-06-13 22:29:47 183

原创 6 堆内存溢出解决方案

设置堆内存大小,经常看到的报错: java.lang.OutOfMemoryError: Java heap space 堆内存溢出。Tomcat内存溢出在catalina.sh 修改JVM堆内存大小JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m"个人觉得这个难免也需要根据项目的实际情况来定。...

2020-06-13 22:22:31 177

原创 5. 配置新生代老年代

如何让GC优先去回收新生代呢?-Xmn 新生代大小,一般设为整个堆的1/3到1/4左右-XX:SurvivorRatio 设置新生代中eden区和from/to空间的比例关系n/1public class JvmTest{ public static void main(String[] args) { //-Xms20m -Xmx20m -Xmn1m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+UseSerialGC byte .

2020-06-13 22:16:32 131

原创 4 虚拟机参数配置

堆的参数配置:-XX:+PrintGC 每次触发GC的时候打印相关日志-XX:+UseSerialGC 串行回收-XX:+PrintGCDetails 更详细的GC日志-Xms 堆初始值-Xmx 堆最大可用值-Xmn 新生代堆最大可用值-XX:SurvivorRatio 用来设置新生代中eden空间和from/to空间的比例. 含以-XX:SurvivorRatio=eden/..

2020-06-13 22:03:00 167

原创 3. 堆----新生代与老年代

jvm的调优对象主要是堆,垃圾回收机制。堆又可以分为: 新生代与老年代。设置新生代与老年代的目的是为了垃圾回收。新生代又可以划分为: eden,s0,s1三个区。a. 刚创建的对象存放在新生代中(具体位置是eden区)新创建的对象,显示存放在eden区中,如果这个对象被频繁使用,那么这个对象会被放入到s0或者s1区域(s0与s1是同样大小的)大小相等的目的是为了垃圾回收的复制算法。如果放入s0或者s1的对象还是在被频繁的使用,那么这个对象就会被放入老年代中。所以那些在老年代中被频繁使用的对..

2020-06-13 21:41:08 140

原创 2. jvm内存结构概述

方法区中是永久的,不回收的,所以常量不宜定义太多。会产生内存溢出的问题。方法区被所有线程共享的。还需要注意线程安全问题。栈:每个线程私有,不会共享。不会有线程安全问题。本地方法栈:主要是调用c语言的.pc寄存器: 每个线程启动的时候,都会创建一个PC(Program Counter,程序计数器)寄存器。PC寄存器里保存有当前正在执行的JVM指令的地址。 每一个线程都有它自己的PC寄存器,也是该线程启动时创建的。保存下一条将要执行的指令地址的寄存器是 :PC寄存器。PC寄存器的内容总是指向下一条将..

2020-06-13 18:13:04 82

原创 1. 初始Netty

netty产生的背景: 解决NIO阻塞代码的bug,并进行封装。解放了开发人员。netty是一个通讯框架。应用场景: 分布式开源框架中dubbo,Zookeeper,RocketMQ底层rpc通讯使用的就是netty.

2020-06-13 17:39:57 138

原创 2 NIO之缓冲区

缓冲区(Buffer):一个用于特定基本数据类型的容器。由 java.nio 包定义的,所有缓冲区都是 Buffer 抽象类的子类

2020-06-12 22:39:47 63

原创 27 JAVA原子类以及实现原理

volatile只能保证内存的可见性,取法保证原子性操作,所以java提供了各种各样的原子类以便于我们进行原子化的操作。代码如下:package com.threestone.thread;import java.util.concurrent.atomic.AtomicInteger;/**生成自增的seq 使用java原子类进行并发操作@author Administrator*/public class Seq {/**AtomicInteger: Interger.

2020-06-09 00:20:35 322

原创 1 NIO简介

Java NIO(New IO[或者称其为Non Blocking Io,非阻塞io ])是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.NIO与原来的IO使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。既然称其为非阻塞io,可想而知,NIO将以更加高效的方式进行文件的读写操作。NIO与传统IO的主要区别:原先的io(inputstream,outputstream)流是单向的在数据文件和程序之间进行流动,而NIO的缓冲区是在数据.

2020-06-08 23:41:05 113

原创 26 再谈volatile

volatile相当于轻量级锁被volatile修饰的变量在线程之间是可见的(一个线程修改了这个变量的值,在另外一个线程之中能够读到修改后的值)synchronized也是可以保证变量被线程修改之后,线程之间的的可见性的。可见性的前提是多个线程对同一个锁进行竞争。volatile的实现原理:a. 被volatile修饰的变量,在jvm执行的时候,会比那些没有volatile修饰的变量多一个lock指令。b. 将各自线程拷贝的变量(缓存行中)经过修改之后写回主存中c. 使其他线程中拷贝的变量失.

2020-06-08 21:27:17 85

原创 25 深入理解自旋,死锁和重入锁 -2

锁重入: synchronized,Lock都是重入锁,所谓的重入,比如说在一个类中,有两个方法,各自都是被synchronized进行修饰,都是对这个类进行枷锁,此时有一个线程进行访问,假设调用了一个方法,并且已经获取了这个对象的锁,而在这个方法中又调用了别的方法(而这个方法也是被synchronized修饰的),那么此时不再需要重新获取锁,而是可以直接调用的。package com.threestone.thread;/**同一线程下的锁重入@author Administrator.

2020-06-07 20:08:42 123

原创 24 深入理解自旋,死锁和重入锁 -1

自旋是极其消耗cpu资源的(自旋就相当于while(true){} ),wait是不会消耗cpu资源的。单例模式下的锁引发的问题(此处省略部分代码):注意: 此此处距离说明的是懒汉模式下的问题,恶汉模式下不存在线程的安全性问题。//用volatile来修饰实例变量,避免jvm的指令重排序问题private static volatile Singleton instance;/*此处使用的是: 双重检查机制但是由于jvm的自行优化,那么一旦指令重排序,那么有可能会先 进行实例化操作而.

2020-06-07 17:18:20 149

原创 23 轻量级锁

所谓的轻量级锁就是说可以同时让多个线程进入同步代码块中****。那么轻量级的锁匙如何加锁的呢?a. 在线程执行同步代码块之前,jvm会先在当前线程的栈帧中创建用于存储锁记录的空间 。b. 栈帧:在虚拟机栈中存放是栈帧,每一个栈帧存放的是代码中方法的信息,那么这个栈帧会将markworld中存放的锁信息拷贝至当前栈帧中,就会将markworld中的锁标志位的锁信息改为轻量级锁。c. 然后开始执行同步代码块。d. 多个线程的竞争的话,某一个线程获取这个锁之后,其他的线程只能等待。e. 等待的想要执.

2020-06-07 11:31:49 138

原创 22 从jvm的角度谈线程的安全性问题

当我们用synchronized来同步一个代码块的时候,在jvm的层面是基于两条jvm的指令–monitorenter–monitorexit

2020-06-07 10:27:44 155

原创 21 从线程的优先级看待饥饿问题

某一个线程的优先级比较低,所以有可能很长时间都没有办法获取cpu的资源,最后被饿死了。从调用start()方法开始进入就绪状态,到最后进入运行状态,需要对cpu的资源进行竞争,而这种竞争是无法完全保证公平的。竞争不到的线程会被饿死,我们只能在一定程度上进行干预导致线程饿死的原因:a. 高优先级的线程会抢占低优先级线程的时间片。使其无法执行b. 线程被一直阻塞在等待获取锁的状态,而无可奈何(比如说有两个线程同时去调用一个被synchronized的代码,先获取锁的线程一直在执行而无法结束,那么那个.

2020-06-06 11:34:21 593

原创 20 synchronized与volatile比较

synchronized获得并释放监视器——如果两个线程使用了同一个对象锁,监视器能强制保证代码块同时只被一个线程所执行synchronized在“ 主”内存区域同步整个线程的内存volatile只是在线程内存和“主”内存间同步某个变量的值,而synchronized通过锁定和解锁某个监视器同步所有变量的值synchronized要比volatile消耗更多资源。...

2020-06-04 11:55:40 87

原创 19 volatile

volatile是Java关键字,修饰变量所以当用这个关键字修饰变量的时候,就是告诉编译器,这个变量是易变的,不稳定的。所以不要试图对该变量使用缓存等优化手段。应该每次都从它的内存地址中去读取。实际上,volatile让变量每次在使用的时候,都从主存中取。而不是从各个线程的本地内存。使用volatile修饰的变量在读取的时候不需要使用锁,将会减少产生死锁的频率。volatile修饰的变量只提供了内存的可见性,并没有提供内存的原子性,就是说读取的时候去内存地址中读取,并不是每次修改..

2020-06-04 10:56:46 110

空空如也

空空如也

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

TA关注的人

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