自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Servlet详解(四): Servlet3.0新特性详解

Servlet2.5是JavaEE5.0规范,最低运行环境为JDK5.0以及Tomcat5.0。而Servlet3.0是JavaEE6.0规范,最低环境为JDK6.0以及Tomcat7.0。Servlet3.0的新特性主要分为以下几个点: 三大组件基于注解的配置 文件上传API的优化 异步处理 组件可插性 动态注册三大组件 <dependency> <groupId>javax.servlet</groupId> <artifactId>j

2021-04-28 20:28:50 846

原创 Java日志框架总结

日志的概念 日志文件是用于记录系统操作事件的文件集合,可分为事件日志和消息日志。 Java日志演进历史 print、alert、echo 互联网发展的早期,不管是C/S模式(客户端+服务端模式)还是B/S模式(浏览器+服务端模式),因为只有前端和后端交互这一层,验证逻辑基本上用的是前端alert,后台用System.out.print,服务器用echo命令回显。链路短,基本上够用。 JUL Jav...

2021-03-13 19:30:50 547

原创 CMake使用

CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库(so(shared object))。因此CMake的编译基本就两个步骤: cmake make cmake 指向CMake...

2021-02-18 13:50:25 218

原创 Linux系统编程

学习课程: https://www.bilibili.com/video/BV1KE411q7ee https://www.bilibili.com/video/BV1iJ411S7UA 基础部分 Shell 命令解释器,格局输入的命令执行相应的命令。查询当前操作系统有哪些shell: cat /etc/shells .s 查询当前系统正在使用的shell: echo $SHELL 终端 Co...

2021-02-16 01:17:00 310

原创 Kafka 详解

http://kafka.apache.org/ Kafka是Apache开发的一款开源流处理平台(网络信息流,日志流, 采样流), 由Scala和Java编写. Kafka是一种高吞吐量的分布式发布订阅消息系统, 一般用作系统间解耦, 异步通讯, 削峰填谷等作用. 此外还提供了流处理插件 Kaka Streaming(类似Storm, Spark, Flink), 并且运行在应用端. 具有简...

2021-01-31 22:25:46 283

原创 DNS详解

DNS, Domain Name System的缩写, 也就是域名系统. 因为在互联网中, 我们通过IP地址进行通讯, IP使用数字表示, 不便于记忆, 所以就需要DNS将域名与IP对应起来, 通过DNS服务可以将IP和域名相互转换. 在操作系统中, HOSTS文件优先于DNS对域名进行转换. 早期使用Hosts解析域名, 有以下几种缺点: 名称解析效能低下, Hosts文件较大 Ho...

2021-01-23 05:34:33 225

原创 rpm 包管理器具体用法

安装一个包: rpm -ivh package_name 查询已安装的软件包: rpm -q 已安装的软件包名称 模糊查询已安装的软件包名称: rpm -qa | grep 字符串 查询某一个已经安装的软件的所有相关目录以及文件: rpm -ql 软件名 列出该软件的所有配置文件: rpm -qc 软件名 查询某个软件的依赖的其他软件: rpm -qR 软件名 查询文件属于哪个软件包:...

2021-01-21 08:57:50 82

原创 Zookeeper的安装与集群环境的搭建

下载地址, 注意, 现在bin类型的release版本: https://zookeeper.apache.org/releases.html 准备四台主机, 以下是主机名和ip地址 : server1 : 192.168.1.111 server2 : 192.168.1.112 server3 : 192.168.1.113 server4 : 192.168.1.114 zookeep...

2021-01-21 06:31:33 48

原创 git stash 的使用

应用场景 我在功能开发分支feature_001中正在开发代码。此时经理找我说需要修改一个生产 的紧急bug。这时,我需要创建一个 hotfix_xxx 分支,然后切换到此分支进行bug修复。但是我在feature_001的代码还在开发中,如果我直接切换分支,会导致代码丢失;并且,由于开发并未完成,所以我并不想提交代码到分支上。此时我就使用git stash 命令将修改的内容保存到堆栈区。然后切...

2021-01-04 12:24:44 317

原创 Javaassist操作字节码

2020-12-06 02:53:00 69

原创 db2 常用命令

连接到本地数据库名: db2 connect to <数据库名> 列出所有schema: select schemaname from syscat.schemata

2020-12-05 15:39:39 92

原创 中台的概念

中台就是大中台,小前台。中台就是后面的炮兵战队,小前台就是侦察兵。侦察兵侦察完毕后,指哪儿炮兵就打哪儿。

2020-11-02 21:06:54 56

原创 Java PDF操作总结

最近公司有个需求,要求根据数据动态生成PDF文件,然后再送往无纸化系统进行签章。现在公司的无纸化系统,只支持传递固定的pdf表单,当数据是一个长度不固定的列表时。PDF的表单就没发满足现有的需求。 通过模板引擎生成html,并将html转换为pdf文件 相关依赖: <dependency> <groupId>org.apache.velocity</grou...

2020-09-15 05:08:02 169

原创 单点登录流程解析实现

shixi俺

2020-08-30 16:01:05 63

原创 有关审核的总结

现公司的审核模型

2020-08-04 10:21:58 48

原创 Git在实际项目中的实践

Git Flow 参考: https://nvie.com/posts/a-successful-git-branching-model/ Git Flow 分为两个长期分支和三个短期分支: 长期分支: master、develop 短期分支: features、release、 hotfix 长期分支会跟随项目的生命周期,自创建时就存在,项目删除才会被删除,短期分支则是为了完成某一特定的功...

2020-07-19 13:10:33 131

原创 版本控制系统简述

版本控制系统 用于记录文件修订情况的系统。可以用于版本备份、文件回溯、协同开发。 版本控制系统分类 集中式版本控制系统 比如: CVS、SVN、Perforce,都有一个单一的集中管理的中央服务器,用于保存所有文件得修订版本,所有协同工作人员通过客户端对文件进行取出、提交等操作。 优点: 每个协同工作者做出修改,其他人员都可以及时看到 管理员可以通过管理中心仓库,控制开发人员的权限 缺点: ...

2020-07-12 03:20:05 873

原创 Spring Cloud Netflix Eureka 详解

搭建单节点Eureka Server 创建 eureka-server 项目,其pom文件如下: <!-- eureka 服务端依赖 --> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <ar...

2020-05-30 17:06:26 199

原创 算法与数据结构的定义、算法的时间复杂度、选择排序、冒泡排序、插入排序...

算法与数据结构的定义 算法是为了完成一项功能,所需要设计的流程,这个流程就是算法。算法的完成需要借助不同的数据结构来完成,有些数据结构专门为某一算法设计,而有些数据结构则是为了组织数据。 所以数据结构和算法是密不可分的。 算法的评估 算法的优劣拥有三个核心指标: 算法的时间复杂度(流程决定) 额外的空间复杂度(流程决定) 常数时间项(实现细节决定) 时间复杂度 ...

2020-04-18 19:50:19 53

原创 HTTPS原理详解

三四年前还在上学的时候就看了HTTPS,只知道个大概,脑子里的概念比较模糊。最近在B站上看到一个讲的比较清楚的视频,趁着空闲就又理了一遍,并且重新整理了以下以前的笔记。 HTTP的安全性 HTTP在传输过程中使用明文传输,其安全性是无法保障的。这里的安全性主要指两点: 数据必须是正确的,未被篡改的 数据内容私密,不可被他人截取查看 HTTP的安全性的保证在许多场景下是必要的,比如购物、网上银行...

2020-02-09 12:02:45 108

原创 Docker 入门

什么是容器化技术 应用部署演化主要分为三个阶段: 物理机时代 虚拟机时代 容器化时代 物理机时代 经济成本较高:物理服务器硬件成本高,不易于维护 受制于硬件:内存、CPU能力提升有限 部署成本较高:主机存放、系统安装、程序环境、应用部署多个步骤 资源浪费:应用对硬件的要求不一,可能造成磁盘浪费,或者是cpu的浪费 难于扩展和迁移:比如增加内存、主机迁移、操作系统更换等 虚拟化时代 相比...

2020-01-07 08:51:55 144 2

原创 委派模式 Delegation

委派模式不属于23种设计模式,但在Spring种又是很常用的一种设计模式,比如DispatcherServlet 就使用了委派设计模式。 什么是委派模式 顾名思义,委派模式含有委派类和被委派类。委派类负责任务的调度和任务分配,将任务分配给被委派类。委派模式与代理模式很类似,但是代理模式注重过程,而委派模式注重结果。属于行为型设计模式;不属于23种设计模式。 以老板和下属的关系为例,老板负责任务分配...

2019-12-31 06:21:04 106

原创 TDD 测试驱动开发

TDD是什么 TDD是测试驱动开发(Test-Driven Development)的英文简称,是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD虽是敏捷方法的核心实践,但不只适用于XP(Extreme Programming),同样可以适用于其他开发方法和过程。 TDD的基本思路就是通过测试来推...

2019-12-11 03:35:08 103

原创 ThreadLocal详解

ThreadLocal:线程局部变量。线程局部变量会将共享变量拷贝一份到当前线程中,保证了变量初始值的共享,线程之间变量的隔离,以及单个线程内的数据共享。 使用ThreadLocal 以JDBC Connection为例,每个dao都需要一个Connection对象用于进行数据库操作。因为Dao在Spring中是单例的,所以属性Connection可能会被多个线程访问,但是Connection并不...

2019-12-09 12:12:17 153

原创 JUC源码解析——AQS

阅读源码的原则 跑不起来不读 解决问题就好:目的性 一条线索追到底 无关细节略过 一般不读静态 一般动态读法 什么是AQS AQS-AbstractQueuedSynchronizer,是JUC下各种锁、队列以及信号量等功能的实现基础,也是JUC的核心类。 下面是AQS在JUC中的应用场景: ReentantLock ReentantLock对代码块进行加锁解锁时,使用的是AQS。在 Ree...

2019-12-09 03:42:07 71

原创 Java 并发编程相关面试题

T1:写两个线程,针对一个List容器,线程1 添加10个元素到容器中,线程2 实现监控元素个数,当到达5个时,线程2给出提示并结束 错误的示范:使用volatile import java.util.ArrayList; import java.util.List; /** * 使用volatile. * 这是一个错误的解法,volatile只能保证基本类型和对象的引用的可见性,对象内部属...

2019-11-13 21:36:18 96

原创 分布式事务解决方案

2019-10-30 03:18:58 36

原创 分布式ID解决方案总结

在分布式场景下,特别是在高并发,高数据量的情况下,ID的生成策略尤其重要。一个分布式ID,首先要保证以下几个特点: 全局唯一性(分布式数据库,可能造成序列的重复) 有序性,可根据一定的特性进行排序 信息安全,如果ID是连续的,比如 1,2,3,4...,那么第三方进行数据爬取的任务就非常容易,特别是订单号这种私密性较高的数据,禁止使用有明显规律的ID生成策略 高可用性 高并发 下面就针对以上几...

2019-10-22 21:20:28 91

原创 使用JMH进行基准测试

什么是JMH Java Microbenchmark Harness, 由JIT开发人员开发的,于2013年发布的一款基于Java的微基准测试工具,现已归于JDK。 官网: http://openjdk.java.net/projects/code-tools/jmh/ JMH主要用于量化Java代码的性能,主要应用场景如下: 对于已知的热点函数进行进一步优化 确认函数执行时间以及于参数的关系 ...

2019-10-20 06:05:27 214

原创 IBatis常用操作

公司技术较老,使用的iBatis,即MyBatis 曾经的版本,整理了以下常用操作,方便索引: 组装in语句,参数为数组 <select id="selectOrgIdByNameStr" resultClass="Integer"> SELECT id FROM org WHERE name IN <iterate close=")" open="(" conjunction...

2019-10-16 08:55:33 90

原创 IBM DB2 SQL去重和分页的写法

吐槽一下,在这边公司写sql时,发现某张表(账户表)居然没有主键,这是我这么多年见过的第一张没有主键的表!!!具体的代码未看过,不知道有没有在逻辑层进行数据唯一性校验。 分页SQL DB2的分页同Oracle类似,都是通过rowid进行分页,如下: -- 从第一条查到第一千条 select * from ( select 字段列表, rownumber() over ...

2019-10-08 19:22:55 346

原创 Zookeeper特性分析和核心原理

官方对zk的介绍 在 apache.zookeeper.org 上,可以看到针对Zookeeper的相关描述,官网是这么解释Zookeeper的: ZooKeeper is a distributed, open-source coordination service for distributed applications. It exposes a simple set of primiti...

2019-09-21 16:27:38 133

原创 Tengine的介绍和安装

关于Tengine 有很多基于nginx的http服务器,他们是对nginx的扩展,常见的主要有Tengine(来自淘宝)以及OpenRestry。Tegine它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。 Tengine官网 安装Tengine 安装步骤与nginx类似“ 安装前需要安装相关依赖包:yum install gcc openssl-devel pcre...

2019-09-20 09:39:16 201

原创 Proxy 代理模式

什么是代理模式 定义:为对象提供一种代理,以控制对这个对象的访问。 生活案例: 租房中介, 执行者:中介 被代理人:我 这房子必须找,但是自己找麻烦,所以委托中介 需要将你将租房的要求告诉中介 黄牛, 执行者:黄牛 被代理人:我 这票必须买,但是买不到,只有找黄牛 你需要什么票需要告诉黄牛 媒人, 执行者:媒婆 被代理人:我 这媳妇必须找,但是自己找不到/没空找 你要找什么类型的妹子,你...

2019-09-11 00:09:24 49

原创 Redis详解

磁盘, 寻址ms级别,带宽:G/M 内存,寻址ns级别, 是磁盘的十万倍,带宽(双通道DDR400的带宽为6.4GBps) 硬盘的原理: https://www.bilibili.com/video/BV11a4y1x7PC?from=search&seid=15696094628094262938 磁盘的扇区大小通常为512byte,但是操作系统读取磁盘时,无论读取多少磁盘数据,都读...

2019-09-10 13:02:37 177

原创 JUC: AtomicXXX

使用 JDK在java.util.concurrent.atomic下提供了一系列AtomicXX类型,这些类型提供了一系列原子方法,可以避免线程安全问题。下面是AtomicInteger的使用方式: AtomicInteger i = new AtomicInteger(10); i.incrementAndGet(); // 多个线程同时增加,不会造成线程安全问题 原理 Atomic类型皆是使...

2019-09-09 22:24:18 78

原创 JUC: 同步辅助类

java.util.concurrent包下,有一些关于同步的辅助工具类,比如CountDownLatch、CyclicBarrier等。 CountDownLatch 允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。CountDownLatch允许创建时传入一个初始值,代表门闩的数量,cdl调用await方法进行阻塞;cdl通过countDown()方法拿掉一个门闩,直到门闩...

2019-09-09 08:34:40 75

原创 锁的分类与对应的Java实现

锁的分类 按照锁的不同特性进行划分,可以划分如下锁: 可重入锁/不可重入锁 可重入锁和不可重入锁 如果线程获取了当前实例的锁(this),并进入方法A,这个线程在没有释放这把锁时,这个线程是否能再次进入方法A? 可重入锁:可以再次进入,方法A递归了 (线程可以进入任何一个它已经拥有的锁所同步着的代码块。) 不可重入锁:不可再次进入,只有等待锁被释放,才能进入方法A 在Java中,synchro...

2019-09-09 03:50:43 93

原创 线程同步: volatile

并发可见性问题 可见性:线程对主内存的修改可以及时的被其他线程观察到 static boolean stop = false; new Thread(() -> { // 线程1 执行 System.out.println("线程1 is running..."); // 线程1 等待线程2将 stop状态改为true,然后停止执行 while (!stop...

2019-09-06 18:13:43 86

原创 线程同步:synchronized及其原理

线程竞争问题 多个线程同时共享并操作同一个数据,就会发生线程竞争。就有可能引发线程安全问题;下面是经典的银行取钱问题: public class ThreadSafeTest { public static class People implements Runnable { private int withdrawMoney = 0; public ...

2019-09-06 09:41:33 93

ValidateCode.jar

ValidateCode.jar 生成验证码

2016-12-10

空空如也

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

TA关注的人

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