自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 计算机和实际问题

有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?2^10 = 1024,很明显,这个问题是可解的。

2023-10-24 19:11:46 85

原创 水池抽样算法

2022-03-22 13:49:57 285

原创 ThreadLocal的研究

ThreadLocal是什么?线程本地/局部变量,可以缓存数据到线程上,使数据在线程其他任何地方进行使用。如下:ThreadLocal tl = new ThreadLocal();tl.set("name=shenshaoqin");String val = tl.get(); // val = "name=shenshaoqin";ThreadLocal的原理?ThreadLocal的原理其实特别简单,考虑一下,如果不用ThreadLocal,要怎么用Java实现类似的功能?其实就是

2021-10-20 16:10:05 117

原创 布隆过滤器

布隆过滤器(Bloom Filter)是什么?我的理解是,一种可以在缓存等系统中,可以通过简单快速的操作初步判断元素是否在系统的方法。(以算力换时间)通俗讲:比如说,我现在有三个值x、y、z,通过某种规则编辑映射为1、2、3数字值;那么另一个值过来的时候,我用这个规则,把他也编成一个值,如果这个值不在1、2、3里面,那么这个值 【肯定不在】 这里面,如果这个值在1、2、3里,那么,这个值 【有较大的可能性】 在我现有的x、y、z,其实也是函数y=f(x)的思想, y相同,x不一定相同,y不同,x一定不同

2021-06-27 17:15:53 159

原创 字符串匹配算法的思考

最近刚好回看了一下KMP算法,对KMP算法有了更深的理解,于是在这里记录一下,使用清晰的文字,将自己的理解记录归纳,目的是让没有看过KMP算法的能够通过此文理解KMP算法,因为我自己有可能某一天也会忘记。所以此文要能够令自己从一个“无知”的状态到理解。甚至进行代码的实现。前置待搜索串: Sn=S0S1S2…Sn。如:abbaabbaaba待匹配串:Pm=P0P1P2…Pn。如:abbaaba...

2020-04-18 22:48:35 211

原创 关于maven插件的一点事(三)实践

需求需求:一个web项目,需要对其中某些jar包以及web代码进行加密,为了节省资源以及方便起见,不影响本地开发,只对用于测试和部署的war进行操作。已知:加密程序是jar程序(但是还调用了 dll和so),只能加密jar/war包里的代码,加密时要设置jar/war原始依赖(包括servlet.jar),原操作是手工解war里的jar出来单个加密,再放回war包中。作为一个程序员,肯定是不能...

2020-04-15 23:40:13 200

原创 关于maven插件的一点事(二)插件

配置除了一些执行参数,完成插件目标和生命周期绑定之外,插件还有一些自己的参数需要配置。可以通过命令行或者在pom中配置进来。命令行配置命令行配置是通过Java自带的-D参数来进行配置的,-D 传递参数也比较常见,如 springboot运行时传递端口参数 java -Dserver.servlet.port=8800 -jar springbootdemo.jar 等。Maven常见通过命...

2020-03-08 14:49:11 273

原创 关于maven插件的一点事(一)生命周期

生命周期提到maven插件, 就不得不理解maven的生命周期. 因为maven的生命周期是抽象的(一致统一的构建标准),各个阶段都是靠插件来完成的. maven有三套生命周期, clean生命周期, default生命周期(构建), site生命周期. 每个生命周期又包含多个阶段(phase). 不同生命周期是相互独立的.clean生命周期clean生命周期的目的是清理项目.包含 pr...

2020-03-08 11:15:33 197

原创 Vue环境搭建

Vue到 https://nodejs.org/en/download/ 下载安装包进行安装相关命令# 查看 node 版本node -v # 查看 npm 版本(node包管理器)npm -v# 更新 npmnpm install npm@latest -ghello world: 打开cmd,输入node回车,输入 console.log(“hello ...

2020-01-02 16:15:42 338

原创 关于https

Client Hello: 客户端告诉服务器信息,如要访问的域名,TLS版本,支持的加密套装,给服务端生成的一个随机数Server Hello: 服务端告诉客户端信息,选中的加密套装。如 签名校验使用的算法服务器发送证书及其签发者证书,证书里面主要包括了证书的公钥、证书的适用公用名、证书的有效期还有它的签发者、签发者签名等信息。然后,客户端根据这些信息开始身份校验,验证信息是否真实。...

2019-10-17 14:54:57 264

原创 TCP三次握手与四次挥手

为什么需要第三次?如果没有第三次握手,那么server端在第二次回复就必须打开就绪,但是client端发起连接的过程有可能第一次握手延误(网络问题等),以致于认为本次握手失效(重连),那么,对这次失效的client请求进入就绪状态,会造成资源浪费。另外,由于之后传输(聊天),是基于报文(一个一个字),多个报文可能会走不同的路由,导致报文无序,所以,握手还初始化商定了一个序列值(SYN=Syn...

2019-10-12 15:02:12 118

原创 clamav使用:定时扫描与提醒

centos下安装与配置官网上写的是比较清楚的了. clamav安装sudo yum -y groupinstall "Development Tools" sudo yum -y install openssl openssl-devel libcurl-devel zlib-devel libpng-devel libxml2-devel json-c-devel bzip2-dev...

2019-08-22 11:45:43 2862

原创 centos发送邮件配置

QQ# vi /etc/mail.rcset [email protected] smtp=smtp//smtp.qq.com:587set [email protected]#授权码set smtp-auth-password=rkhrjavmbtzdcjdgset smtp-auth=loginset smtp-use-star...

2019-08-22 11:39:48 633

原创 JAVA代码proguard混淆

一,通用设置#输出log-verbose#略过warning,不输出warning(有warning时无法继续)-ignorewarnings#不输出warning,这里可以限定某些类不要warning-dontwarn #不校验.校验可以提高java虚拟机的加载效率(java6)-dontpreverify#不混淆#-dontobfuscate#需要混淆的目录 #-obf...

2019-08-12 11:14:05 1995

原创 关于JAVA代码性能优化一点记录

写在前面性能优化是一个包含很广有深度的知识,相对于自己浅显有限的经验实在有点难度。这里只是记录自己工作中一点常见的问题。正文性能说明:代码执行的通常主要瓶颈在第三方上(即其它的地方执行速度),例如磁盘IO 和 网络 IO,由于网络IO,取决于网络条件,更是有很大不确定性如延迟,所以通常如果优化代码速度,首要考虑的就是这一方面。常见例子:在 循环里 里调用数据库查询或更改,这个是最常见的,因...

2019-07-02 16:01:24 728

原创 JAVA获取MYSQL索引数据

最近工作上有个需求,要比较索引,因此要获取数据库的原数据。按照正常方式获取 java.util.sql.DatabaseMetaData.getIndexInfo获取到结果集ResultSet,但是有一个需要的信息–创建索引时的length却获取不到,即如下, alter table table_name add index index_name(column_name(length))。我要获取...

2019-05-09 15:08:30 1891

原创 算法导论三-分治法

分治法简单说,分治法即分而治之,即将问题分化为小问题来处理。简化起来看有二到三个步骤:分:将问题分解为若干子问题(复杂度n降低)。治:递归解决子问题。合:合并子问题的解。常见分治法的递归式为: T(n) = 2T(n/2) + θ(n) ,即分为两个解法一样的子问题,以及额外的线性时间。满足主方法的条件2,可得解为: T(n) = n * lg n。...

2019-05-04 23:51:01 788

原创 关于Tomcat的session共享引起的思考

起因由于在部署项目的时候发现,每次部署都要往tomcat的lib加 `jedis.jar,redis-session.jar,commons-pool.jar,而且只能使用tomcat7x的版本来部署。于是想了解一下怎么回事,了解一下tomcat和redis-session的源码。关于session管理器tomcat的session通过session管理器产生。内置的session管理器类图...

2019-04-27 15:50:57 637

原创 mysql主从配置

主从原理mysql通过binlog 的传递来实现主从,主库binlog里记录了mysql执行的事件,从库获得binlog之后,回放binlog的事件,达到同步的目的。mysql当前写入的binlog会在每次重启或者FLUSH LOG等命令之后切换。连接mysql之后执行 show binlog events ;可以查看binlog内容。主库配置log-bin=master-bin ...

2019-04-18 16:11:05 136

原创 存储过程和触发器调试

当我们的存储过程或触发器写好,符合语法后,怎么知道运行时里面上下文是正确的呢?无工具时回想刚开始学习某种语言时,如java,那时候要知道运行到某一处数据是否正确,除了Assert之外就是print输出来了,输出某个数据看是否符合预期,这是我们最基础的调试方式之一。当没有其它工具的时候,SQL也可以如此,可以通过select输出来。trigger没有控制台输出,因此我们需要把输出定位到表,这...

2019-04-08 11:25:25 602

原创 docker的一点学习笔记

安装安装devicecmapper 和设置存储库sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.rep...

2019-04-07 21:37:47 182

原创 keepalived实现nginx高可用

1,nginx 和 keepalived是什么?nginx,此处使用tengine早期是专为 LVS 设计的,主要用来监控LVS集群中各个节点状态内部基于 VRRP协议 实现,即虚拟路由冗余协议,从名字不难看出,协议本身是用于保证实现路由节点高可用的keepalived的作用是检测后端TCP服务的状态,如果有一台提供TCP服务的后端节点死机,或者工作出现故障,keepalived会...

2019-04-07 18:08:18 267

原创 CopyOnWrite类解析

CopyOnWrite顾名思义,写时复制, 即做Write更新的操作时,进行复制。那么为什么要这样子做呢? 接下来我们以CopyOnWriteArrayList的源码来做分析。CopyOnWriteArrayListCopyOnWriteArrayList可以看成是ArrayList的线程安全版本,所以很多方面与ArrayList相同,我们略过一些相同的方面,先来看其主要属性 ...

2019-04-05 10:26:45 288

原创 集合Set解析

SetSet体现的是数学上的集合的概念,集合内没有相同的元素,这也是与List主要的区别。另一方面,由于java的Map的key就是没有重复的,所以很多情况下,Set的内部实现就是其相应的Map,把Map的key作为Set,value存为null或Object,例如HashSet内部是HashMap, TreeSet内部也是TreeMap。HashSetprivate transien...

2019-04-05 10:04:48 265

原创 HashMap源码解析

先看一道题HashMap,put100次数据,key值不重复,但是监控发现key的hash冲突了2次,那么现在的Entry[]全部长度和非空长度分别是多少?a.100,98b.100,100c.128,100d.128,98如果不知道这道题问题什么,怎么做。那么也许该了解一下HashMap,下面就说一下HashMap。什么是hash ?简单理解,可以当作是一种数学函数,输入x ...

2019-04-04 21:21:47 241

原创 List相关类源码解析之从Vector学习装饰模式

关于Vector, Vector源码的话,和ArrayList基本差不多, 因此没必要再讲一次。实际上, 我基本没用过Vector。 只是在看ArrayList的时候大概浏览了一下Vector源码。这里要说的是 Vector的由来, 加深对装饰模式的理解.思考一下,在没有 current包和Vector之前。我们要如何实现List的线程安全? 那时候也没有锁如ReentrantLock的,...

2019-04-04 20:47:48 169

原创 List相关类源码解析之LinkedList

类图一, 要分析 LinkedList, 我们最好先了解一些背景知识.1, LinkedList 和ArrayList类似, 是 List的一个实现. 因此, 我们可以大概知道. LinkedList实现的功能和ArrayList 是类似的, 底层的结构不同2, 链表的实现必须要有类似指针的对象, 指向下一个对象, 通过进入一个get方法, 可知. get首先获取的是一个 Node对象,...

2019-04-04 19:37:10 174

原创 redis主从配置

配置主redis:无须额外配置。一般会把protected-mode 设为 no, 假设ip为 192.168.0.2从redis:增加如下配置。假设 ip为 192.168.0.3slaveof 192.168.0.2 6379 # 主redis的地址#masterauth xxxxxx # 主redis的密码,如果有设置的话#requirepass xxx...

2019-04-04 18:01:09 115

原创 jenkins三--插件

安装我安装的插件列表主要如下:Subversion Plug-in , svn版本管理Build With Parameters Plugin , 参数化构建Parameterized Trigger plugin , 参数传递插件,将本次job需要使用的参数如版本号传递给下一个jobGreen Balls , 使用绿色代替默认的蓝色表示任务运行成功的状态Email Extensi...

2019-04-04 14:56:42 273

原创 jenkins二--用户及权限管理

用户建立用户, 系统管理 -> 管理用户. 需要则新建即可.用户也有几种策略, 在 系统管理->全局安全配置. 这里我们选择简单即可.默认也是如此. 并且不允许自主注册.插件我们这里安装 基于角色授权 的插件来管理用户权限.系统管理 -> 插件管理,点击可选插件,然后在过滤中输入role, 选中出现的插件,然后点击直接安装,如图.安装之后需要启用. 系统管...

2019-04-04 14:37:44 495

原创 jenkins一--安装与全局工具配置

安装与简单操作安装没什么好说的, 照着文档来即可. 我是centos, 就直接看这个文档. https://pkg.jenkins.io/redhat-stable/简单说明:先安装java8,然后执行如下命令, 这样安装的是作为服务,跟随系统启动的.wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat...

2019-04-04 11:58:53 3133

原创 java正则表达式使用

正则表达式是什么: 正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串干什么:正则主要用于 字符串中 为方便 字符串操作 ,很多地方不使用正则表达式也能达到目的,但是可能麻烦很多。怎么用:在java中的标准使用如下://编译正则表达式,这样子可以重用模式。Pattern p = Pattern.compile("a*b");// 用模式检查字符串Matcher m...

2019-03-27 11:41:45 12616 4

原创 算法导论二-递归

一,递归式二,代换法解递归三,递归树法解递归四,主定理法解递归

2019-03-22 20:55:46 457

原创 算法导论二-渐进符号

一,渐近紧确界 θ 。数学定义:设 f(n) 和 g(n) 是定义域为自然数集合的函数。如果n→∞ 时,lim f(n) / g(n)存在,并且等于某个常数c ( c >0 ), 那么 f(n) = θ(g(n))。通俗理解为 f(n) 和 g(n) 和 g(n) 同阶,θ用来表示算法的精确阶。如 5n +100 = θ(n)二, 渐近上界 O数学定义: 设 f(n) 和 g...

2019-03-22 09:28:51 1441

原创 算法导论一-算法分析

一,插入排序: 插入的定义排序简单来说,就是把待排序值通过比较交换的方式插入到已排序的列表中。找了个比较形象的图:一个简单的例子:#如待排列表为: [3,4,1,2,4,5]#由于第一个是排好序的,因此我们从第二个开始比较。#第一次排序结果: [3,4,1,2,4,5]#第二次排序结果: [1,3,4,2,4,5] 。#得到第二次结果的数据移动情况: [3,4,1,2,4,...

2019-03-19 01:23:13 369

原创 程序员的数学笔记

一,零的故事计算机为什么用2值表示. 方便的表示开关链通和断开的状态. 进制转换 十进制转换为二进制. 不断除以2之后余数的倒置. 如12 . 12 / 2 = 6 余0 ,6 / 2 = 3 余 0, 3 / 2 = 1 余1 , 1 / 2 = 0 余 1. 那么12 = 1100. 二进制转换为十进制. 如. 1100 = 1 * 2³ + 1 * 2²+ 0 ...

2019-03-17 19:17:36 719

原创 jenkins四--一次实践

安装安装没什么好说的, 照着文档来即可. 我是centos, 就直接看这个文档. https://pkg.jenkins.io/redhat-stable/简单说明:先安装java8,然后执行如下命令, 这样安装的是作为服务,跟随系统启动的.wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-...

2019-02-28 14:58:32 997

原创 docker配置使用mysql镜像

##################################################拉取镜像docker pull mysql:5.7################################################## 直接启动,设置映射端口3318,mysql的root密码为root,容器移除之后不会保存数据。docker run -p 3318:330...

2019-02-16 09:57:44 590

原创 常用设计模式之装饰模式

装饰(包装)模式是一种对象功能增强模式。类图如下 该类图的是把装饰对象也抽取出一个独立接口。当然,我本人比较常用的是使用DecoratorA,DecoratorB的方式。而不是另外抽取出Decorator接口。功能增强技术有三种,1)继承 2)装饰 3)代理 比较容易跟装饰模式混淆的是继承,代理是另一种模式,在这里就不说了。 比较来说,装饰是比较灵活和方便的,至于为什么这么说,等一

2019-01-30 14:03:03 411

原创 设计模式——从单例模式开始

设计模式——从单例模式开始第一次使用markdown来写博客。 单例设计是为了保证一个类仅有一个实例。在保证了一个类只有一个实例之后,要再对外界提供一个全局访问实例的方法。在java中,保证类只有一个实例,通过构造方法私有化防止外部进行实例化;全局访问点通过类的静态方法返回类的实例。使用单例的好处:保证一个类只有一个实例,减少对象,节省内存方便对对象的控制什么时候用:设计模式真正难点在使用场

2019-01-30 14:02:35 413

空空如也

空空如也

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

TA关注的人

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