自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Keyu

学生/非典型猫型程序员

  • 博客(44)
  • 收藏
  • 关注

原创 Paxos算法理解(分布式系统中一致性问题的共识算法)

Paxos是什么是用于解决分布式系统中一致性问题的共识算法(Consensus Algorithm)Paxos要解决的根本问题可以概括为一句话将所有节点都写入同一个值,且被写入后不再更改。Paxos基础角色Proposers(提议人) 为达成一致性提出意见,他可以提出议案(value),不同的Proposer可以提出不同的value Acceptors(决策者)...

2019-03-18 16:20:38 469

原创 常见Web站点安全性问题

SQL注入介绍SQL注入为常见的网站攻击方式,其攻击原理主要是在站点执行SQL语句时,传入非法参数例子https://keyu.site?page=1其中page是传入的参数,page的值为1,在服务器进行处理时,可能会将page的值写入SQL中,比如:select * from post where page=1这样就完成了一次查找操作,并返回我们想要的值但是若是进行非法...

2019-03-02 12:57:08 1061

原创 finnally和return的优先级问题

当finally有return时测试用例public static Integer testFinally(Integer n){ try { if (n.equals(0)){ throw new Exception("test"); } return ++n; }catch (Exception e){...

2019-02-28 12:06:16 1088

原创 Bit-map(位图与海量数据处理)

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)“和"Reduce(归约)”基本思想使用一个bit位来标记某个元素对应的value,而key就是该元素在若干bit中的位置。这样大大节省了存储空间。应用排序对于海量的无重复密集元素排序,其有着占用少的优点。步骤:将Bit-map所有bit置为1将第一个value为n的...

2019-01-23 22:43:02 296

原创 项目实战:Spring Boot下关于MyBatis的二级缓存

MyBatisMyBatis作为一个优秀的ORM框架,缓存是其必不可少的功能之一。 其本身具有缓存的功能,默认开启一级缓存,它的一级缓存是SqlSession级别的缓存。在操作数据库时需要构造SqlSession对象,其对象中有一个内存区域用于存储缓存数据。但是不同的sqlSession之间的缓存区域却是相互不影响的。 其有内置的二级缓存,但是默认关闭。其实SqlSessionFactor...

2019-01-20 17:50:09 403

原创 Web登录注销的实现

思想在登录的过程中,我们需要考虑一系列的问题登录的安全性一次登录后,在网站的其他网页也能记录信息服务器能够记录登录的信息登录过期,防止信息泄露后永久泄露。。。实现访问令牌当用户登录时,在服务器中保存令牌信息,并且将令牌的拷贝发给客户端。令牌上可以设置过期时间,若客户端的令牌过期则不予访问。当用户注销时,将服务器中令牌删除。(通常不删除,只是将状态设为无效)若客户端的令...

2019-01-18 00:27:53 3940

原创 Java典型线程通讯方式

等待\通知机制如果不使用等待\通知机制,当线程1要向线程2实现线程通讯,可以通过共享一个变量,线程2可以使用while不停地对某一条件进行检测,直到线程1对其进行了修改(从而使条件满足),就实现了一次线程1到线程2的通讯,不过这样将浪费CPU的资源。实现wait()方法:Object类的一个方法,该方法将当前线程置入预执行队列中,并且在wait()代码处停止执行,直到接受到通知来...

2019-01-14 18:32:38 180

原创 SpringBoot使用Devtools进行热部署

官方地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#using-boot-devtoolsMaven配置<dependency> <groupId>org.springframework.boot</groupId> ...

2019-01-14 16:58:52 173

原创 二叉树遍历

设一个二叉树节点的树根为V,左右孩子分别为L,R。按照某种次序访问树中的节点,每个节点被访问恰好一次。由局部根节点访问的次序可以分为3种遍历方式。先序遍历 V->L->R中序遍历 L->V->R后序遍历 L->R->V先序遍历递归实现template <typename T,typename VST&gt

2019-01-07 16:48:31 205

原创 Cookie&&Session技术

从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。存储无状态的客户端信息Cookie技术:将客户端信息存储在客户端本地Session技术:将客户端信息存储在服务器Cookie服务器端向客户端发送一个Cookie创建一个Cookie:Cookie cookie = new Cookie(String cookieName,String cook...

2019-01-06 21:38:41 138

原创 记一次蚁群算法解决TSP问题

算法规则1)范围蚂蚁观察到的范围是一个方格世界,蚂蚁有一个参数为速度半径(一般是3),那么它能观察到的范围就是3*3个方格世界,并且能移动的距离也在这个范围之内。2)折叠环境蚂蚁所在的环境是一个虚拟的世界,其中有障碍物,有别的蚂蚁,还有信息素,信息素有两种,一种是找到食物的蚂蚁洒下的食物信息素,一种是找到窝的蚂蚁洒下的窝的信息素。每个蚂蚁都仅仅能感知它范围内的环境信息。环境以一定的速率让信...

2019-01-01 14:40:31 1097

原创 ReentrantLock的加锁和解锁原理

ReentrantLock的实现依赖于Java同步器框架AQS。AQS使用一个整型的volatile变量(命名为state)来维护同步状态。ReentrantLock分为公平锁和非公平锁公平锁使用公平锁时,加锁方法lock()的调用轨迹:ReentrantLock:lock() FairSync:lock() AbstractQueuedSynchronizer:acquire...

2018-12-29 14:16:45 1203

原创 java中CAS实现的原理

从书中看到java中可以通过CAS的方式实现原子操作。在这里用了JAVA提供的用于原子操作的atomic类中的atomicInteger。例子中的安全计数器代码如下:private void safeCount(){ for(::){ int i = atomicI.get(); boolean suc = atomicI.compareAndSe...

2018-12-29 00:16:32 414

原创 GOF的23种设计模式

总结将每一种设计模式的理解和示例分享在了有道云笔记上,以下是链接:创建型 单例(Singleton) 简单工厂(Simple Factory) 工厂方法(Factory Method) 抽象工厂(Abstract Factory) 生成器(Builder) 原型模式(Prototype) 行为型 责任链(Chain Of Responsibility) 命...

2018-12-28 20:59:22 185

原创 synchronized原理

在多线程并发编程中synchronized一直是元老级角色,很多人称之为重量级锁。而后在Java SE 1.6后对synchronized进行了优化,有的时候它就没有那么重了,引入了偏向锁和轻量级锁。 锁的释放和获取的内存语义当线程释放锁时,JMM会把线程对应的本地内存中的共享变量刷新到主内存中。 当线程获取锁时,JMM会把该线程对应的本地内存置为无效。从而可以使得被监视器保护的临界...

2018-12-27 22:02:03 161

原创 volatile关键字详解

实现原理//instance是volatile变量instance = new Singleton();转换为汇编代码:0x01a3de1d: movb $0×0,0×1104800(%esi);0x01a3de24: lock add1 $0×0,(%esp)在有volatile变量修饰的共享变量进行写操作时会多出第二行代码。 lock前缀的指令在多核处理器中会引发两...

2018-12-25 22:54:10 126

原创 Redis的主从复制

集群的作用主从备份,防止主机宕机。 读写分离,分担master的任务。 任务分离,如从服务器分别分担备份工作于计算工作。主从复制的启动过程slave从服务器自动向主服务器master请求sync同步。 master开始执行BGSAVE,并使用缓冲区记录BGSAVE之后的所有写命令。 slave根据配置决定是继续使用现有的数据来处理客户端请求,还是发送错误命令。 master的B...

2018-12-25 17:47:53 107

原创 Redis持久化方式

目录 常见的持久化方式快照(snapshotting)工作原理相关参数优点缺陷只追加文件(append-only-file,AOF)工作原理相关参数优点缺点注意常见的持久化方式主从:通过从服务器保存和持久化,如mongoDB和replication sets配置 。 日志:操作生成相关日志,并通过日志来恢复数据。快照(snapshot...

2018-12-24 19:57:49 141

原创 多线程基础 Java并发1

目录 线程和进程概念同步和异步概念多线程创建方式继承Thread类(不推荐)实现runnable接口,重写run方法使用匿名内部类多线程的运行状态守护线程、非守护线程join方法()优先级线程安全同步方式同步代码块:同步方法注意线程和进程概念进程是独立的应用程序,进程中一般会有多个线程,进程是线程的集合。 线程就是一条执行路...

2018-12-22 15:32:07 121

原创 githubpage 配置 出现DNS解析失败

解决方法:1.域名没有实名制,因此dns服务商没有提供解析服务。2.给解析添加A类型,以下地址任选一185.199.108.153 185.199.109.153 185.199.110.153 185.199.111.153配置完成图...

2018-12-20 18:00:05 2967 1

原创 虚拟机字节码执行引擎 JVM笔记4

目录 概述运行时栈帧结构局部变量表操作数栈方法返回地址附加信息方法调用解析分派静态分派动态分派单分派与多分派虚拟机动态分派的实现基于栈的字节码解释执行引擎概述输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。 运行时栈帧结构 栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构。它是虚拟机运行时数...

2018-12-20 13:40:29 115

原创 类文件结构与虚拟机类加载机制 JVM笔记3

目录 平台无关性Class类文件的结构魔数与Class文件的版本常量池访问标志类索引、父类索引与接口索引集合字段表集合方法表集合属性表集合虚拟机类加载机制类加载的时机类加载的过程加载验证准备解析初始化类加载器类与类加载器双亲委派模型自定义类加载器实现平台无关性平台无关性是JVM所具有的另一重要特性。这些...

2018-12-13 15:35:13 113

原创 垃圾收集器和内存分配策略 JVM笔记2

目录对象已死吗引用计数算法可达性分析算法再谈引用生存还是死亡回收方法区垃圾回收算法标记-清除算法复制算法标记-整理算法分代收集算法HotSpot的算法实现垃圾收集器Serial收集器ParNew收集器Parallel Scavenge 收集器Serial Old收集器Parallel Old收集器CMS收集器G1收集器...

2018-12-08 15:26:49 116

原创 Java内存区域与内存溢出异常 JVM笔记1

目录运行时数据区域程序计数器虚拟机栈本地方法栈堆方法区直接内存对象的内存布局对象头实例数据对齐填充对象的访问定位运行时数据区域JAVA虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。程序计数器一块较小的内存空间,可以看作当前线程所执行的字节码的行号指示器。 通过改变这个计数器的值来选取下一条需要执行的字...

2018-12-05 18:14:39 149

转载 Spring中bean的生命周期

满足以下的条件的Java类被称为bean:1、所有属性为private2、提供默认构造方法3、提供getter和setter4、实现serializable接口(允许序列化,便于框架等使用)在传统的Java应用中,bean的生命周期很简单。使用Java关键字new进行bean实例化,然后bean就可以用了。一旦该bean不再被使用,则由Java自动进行垃圾回收。以下是bean...

2018-12-03 15:46:14 107

原创 TCP协议深入了解

目录IP运输层的多路复用和多路分解多路复用多路分解TCP协议TCP首部格式TCP 的三次握手TCP 的四次挥手TCP片段丢失(丢包)TCP拥塞控制加性增,乘性减(AIMD)慢启动超时重传快速重传和快速恢复IP在谈到传输协议前必须要先理解IP(Internet Protocal,互联网协议)的基本概念。IP包含两个基本的功能,寻址和分...

2018-11-30 17:41:30 334

原创 rdt(可靠运输协议)理解

逐步解决可靠运输在这里我们介绍rdt(Reliable Data Transfer)协议,即可靠数据传输协议的逐步完善。假如底层通道完全可靠(rdt1.0)我们首先考虑最简单的情况,即底层通道完全可靠,不会发生错误,此时将协议定为rdt1.0。此时发送方和接受方的状态如下。rdt1.0发送方发送方仅有一个状态,通过rdt_send来接受高层的数据,进行分路复用,将packet发送至...

2018-11-29 11:32:40 7233

原创 Java中的类文字(Class literal)是什么?

类文字(class literal)From the Java tutorial:Finally, there’s also a special kind of literal called a class literal, formed by taking a type name and appending “.class”; for example, String.class. Th...

2018-11-18 22:44:01 1487

原创 类与接口 JAVA笔记3

目录1.使类和成员的可访问性最小化2.使可变性最小化3.复合优先与继承4.要么为继承而设计,并提供文档说明,要么就禁止继承5.接口总体看来优于抽象类6.接口只用于定义类型。7.类层次优于标签类8.用函数对象表示策略。9.优先考虑静态成员类。1.使类和成员的可访问性最小化模块设计的好坏与它是否隐藏其内部数据和其他实现细节有很大的关系。设计良好的模块会隐藏所...

2018-11-17 20:11:59 139

原创 Java的序列化

Java 序列化Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。整个过程都是 Java 虚拟机(JVM)独立的,也就...

2018-11-16 17:00:25 137

原创 Object通用方法 JAVA笔记2

概览public native int hashCode()public boolean equals(Object obj)protected native Object clone() throws CloneNotSupportedExceptionpublic String toString()public final native Class<?> ge...

2018-11-16 16:59:26 134

原创 创建及销毁对象 JAVA笔记1

Posted by KeYu Blog on November 9, 20181.静态工厂方法示例://类中提供公有的静态方法,用于返回类的实例public static Boolean valueOf(boolean b){ return b?Boolean.True : Boolean.False;}类可以通过静态工厂方法来提供它的客户端,而不一定都是通过构造器,...

2018-11-16 16:54:11 160 1

原创 OOP思想> IS-A,IS-LIKE-A,HAS-A的区别

IS-A代表类与类之间的继承关系在知识表示、面向对象程序设计与面向对象设计的领域里,is-a英语,包含架构)指的是类的父子继承关系,例如类D是另一个类B的子类(类B是类D的父类)。 换句话说,通常”Dis aB”(B把D包含在内,或是D被包含在B内)指的是,概念体D物是概念体B物的特殊化,而概念体B物是概念体D物的一般化。举例来说,水果是苹果、橘子、芒果与其他水果的一般化。“is...

2018-11-16 16:52:39 433

原创 [GUI]JSlider的美化重写

Swing本来提供的滑块JSlider丑的实在不忍直视,所以很有必要进行优化重写提供有两种方法进行JSlider的美化运用look and feel那什么是 LookAndFeel 呢?通俗的说,这就是皮肤;从功能上说。这是一种批量管理 Swing 控件外观的机制;从根源来说,这是 Swing 的核心。在Swing中只需一行代码就可以改变皮肤UIManager.setLoo...

2018-10-21 12:18:46 760

原创 java中Jbutton的方法

JButton 实现了普通的三态外加选中、禁用状态,有很多方法可以设置。很多时候没有必要去写鼠标监听器。 setBorderPainted(boolean b) //是否画边框,如果用自定义图片做按钮背景可以设为 false。setContentAreaFilled(boolean b) //是否填充,如果你的自定义图片不是矩形或存在空白边距,可以设为 false 使按钮看起...

2018-10-19 19:22:47 13850

原创 wxpython 按钮切换界面方法

#-*- coding:utf-8 -*-import wxclass TestFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1,u'登陆',size=(370,280),style=wx.MINIMIZE_BOX| wx.SYSTEM_MENU|wx.CAPT...

2018-10-11 22:14:35 8249 1

原创 mysql数据库和MySQLdb环境配置

安装MysqlWindows环境下安装数据库,网址:https://dev.mysql.com/downloads/installer/选取MSI Installer这个安装包文件傻瓜式,主要在安装过程中记住自己设置的权限密码就行了.安装完毕后,配置环境变量.在win10系统下,步骤如下1.找到此电脑,右键属性2.点击高级系统设置3.点击环境变量4.在系统的pat...

2018-09-22 20:14:35 1010

原创 C++ map容器用法

C++ map容器用法 介绍Map是键-值对的集合,map中的所有元素都是pair,可以使用键作为下标来获取一个值。Map中所有元素都会根据元素的值自动被排序,同时拥有实值value和键值key,pair的第一元素被视为键值,第二元素被视为实值,同时map不允许两个元素有相同的键值。用法头文件#include<map>声明及其初始化map...

2018-09-22 20:09:01 20814 2

原创 C++ vector容器用法

C++ vector容器用法 介绍vector(向量):是一个顺序的容器,与数组类似。它也可以采用下标对其元素进行访问。但是它与数组比起来有着更多的优越性。相对于数组,它有较好的动态拓展型,所以避免了内存的浪费,或者是越界的发生。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组...

2018-09-22 20:08:21 342

原创 haskell函数式编程实现的五种排序

插入排序insert :: Int -> [Int] -> [Int]insert x [] = [x]insert x (y:ys) | x < y = x:y:ys | otherwise = y : insert x ysinsertSort :: [Int] -> [Int]insertSort [] = []insert...

2018-05-05 15:16:38 1174

空空如也

空空如也

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

TA关注的人

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