mysql5.7免安装版配置

1.下载 mysql5.7 免安装版本,mysql5.7-downloads
2.解压文件到 D:\mysql-5.7.27-winx64
3.配置环境变量,系统环境变量新增 MYSQL_HOME 值为 D:\mysql-5.7.27-winx64。在 path 变量中添加 %MYSQL_HOME%\bin
4.在 D:\mysql-5.7.27-winx64 目录下新增 my.ini 文件,文件类容如下:

1
2
3
4
5
6
7
8
9
10
[mysqld]
port = 3306
basedir=D:/mysql-5.7.27-winx64
datadir=D:/mysql-5.7.27-winx64/data
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysql]
default-character-set=utf8

5.以管理员身份打开 cmd 命令窗口,将目录切换到 MySQL 的安装目录的 bin 目录下。依次执行

1
2
3
mysqld --install
mysqld --initialize-insecure --user=mysql
net start mysql

eclipse activiti-designer 插件安装

在学习 activiti 框架的过程中,设计流程是必不可少的一步,虽然官方给出了一个 war 包,提供了 web 网页形式的流程设计工具。但是其不和开发环境集成在一起,每次新增修改流程图都是一件比较麻烦的事情,于是使用 eclipse 插件的方式来设计和修改流程图模型。这里简单记录一下插件的安装过程。

JPA实体关系映射

JPA 实体关系映射:@ManyToMany 多对多关系、@OneToMany @ManyToOne 一对多多对一关系和 @OneToOne 的实例解析。

代码精进之路——减少错误

编写优秀的代码,不能仅仅依靠 一个人的战斗。高质量的代码,依赖于高质量的流水线。作为一个程序员,大家都希望写出优秀的代码。不被 bug 所困扰,可是如何才能编写出没有错误的代码呢?

代码精进之路——开篇

写出优秀的代码是我们每一个程序员的毕生追求,毕竟写代码本身就是个技术活,代码的 好坏,其实也就是我们工艺的好坏。作为一个技术类的工种,我们没有理由不去思考如何 写出优秀、让人惊叹的代码。

作为一个程序员,每天都在和代码打交道,但是在写代码的时候我们一部分是在完成任务,大多数的时候我们都会在想如何将代码写的漂亮,易于维护。中国程序员有一个问题,那就是“不会写代码”。我们自以为将某某语言的 API 学习了一遍,通过一些教程将框架搭建了起来然后写了一个 Hello World,或者是在公司的框架上完成了某一个复杂的功能点就算是会写代码了。

Thread类

Java 多线程最基本的类就是位于 java.lang 包下的 Thread 类 ,这个类继承 Object 类,实现了 Runnable。

public class Thread extends Object implements Runnable

Thread 有优先级的区分,优先级较高的线程优先于优先级较低的线程执行(但不是绝对的)。每一个线程都可以作为一个守护线程。

itextpdf简单使用

前不久公司需要为用户生成一份报告,报告的模板是统一的,内容不同,并且用户可以打印。于是调研了有关 PDF 生成的方式,这里简单记录一下。方案是使用 itextpdf 这个类库对 PDF 模板进行内容填充,从而达到效果。demo 代码中有用到 zxing 进行二维码的生成,多张 PDF 合并成一张 PDF 等。

MacLaunchpad图标大小调整

defaults write com.apple.dock springboard-columns -int 10

defaults write com.apple.dock springboard-rows -int 8

defaults write com.apple.dock ResetLaunchPad -bool TRUE

killall Dock

MybatisPagehelper分页局限

这几天在搭建框架的时候使用了 Mybatis 的一款分页插件,名叫 MybatisPagehelper。在阅读官网文档中常见问题的时候,有一个问题——为什么不支持一对一和一对多结果映射的分页查询?官方给出的答案是:在一对一和一对多时,根据分页条件查询出 100 条数据时,由于一对一和一对多会去重,经过嵌套处理后数据量会减少,因此分页想要获得 100 条数据无法实现。想要支持这种情况可以使用嵌套查询。嵌套查询是要额外执行SQL,主SQL可以得到正确的结果数量,因此可以正常分页。

减小war包体积

现在使用 Jenkins 自动化部署项目有这样一个问题,那就是项目使用到的 jar 包比较多,这就导致每次将 war 包上传到服务器上的时间就比较长。今天无意间看到一个方法可以大幅减少 war 包大小,提升效率。

阻塞、非阻塞和同步、异步的区别

同步场景中阻塞和非阻塞

我们是用传统的水壶烧水。在水烧开之前我们一直做在水壶前面,等着水开。这就是阻塞的。

我们是用传统的水壶烧水。在水烧开之前我们先去客厅看电视了,但是水壶不会主动通知我们,需要我们时不时的去厨房看一下水有没有烧开。这就是非阻塞的。

异步场景中阻塞和非阻塞

我们是用带有提醒功能的水壶烧水。在水烧发出提醒之前我们一直做在水壶前面,等着水开。这就是阻塞的。

我们是用带有提醒功能的水壶烧水。在水烧发出提醒之前我们先去客厅看电视了,等水壶发出声音提醒我们。这就是非阻塞的。

Java中的三种IO模型

在Java语言中,一共提供了三种IO模型,分别是阻塞IO(BIO)、非阻塞IO(NIO)、异步IO(AIO)。

BIO (Blocking I/O):同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。

NIO (New I/O):同时支持阻塞与非阻塞模式,但主要是使用同步非阻塞IO。

AIO (Asynchronous I/O):异步非阻塞I/O模型。

白话文:

BIO (Blocking I/O):有一排水壶在烧开水,BIO的工作模式就是,叫一个线程停留在一个水壶那,直到这个水壶烧开,才去处理下一个水壶。但是实际上线程在等待水壶烧开的时间段什么都没有做。

NIO (New I/O):NIO的做法是叫一个线程不断的轮询每个水壶的状态,看看是否有水壶的状态发生了改变,从而进行下一步的操作。

AIO ( Asynchronous I/O):为每个水壶上面装了一个开关,水烧开之后,水壶会自动通知我水烧开了。

布隆过滤器

今天在学习 Redis 时,看到一个名词叫做布隆过滤器,出于好奇的心里学习了一下,这里记录相关内容。

Redis常见面试题

在平时我们常常使用 Redis ,这里总结一下 Redis 的相关面试题和一些常见问题的解决方案。

Sql的优化方法

1.比较运算能用 = 就不用 <>
2.明知就只有一条查询结果就使用 limit 1,这样可以避免全表扫描。
3.建表时为列选择合适的数据类型。
4.使用 union all 代替 union,如果结果集允许重复的话。union 会对结果集去重,效率很低。
5.为获得相同结果集的多次执行,请保持 SQL 语句前后一致。
比如第一次查询 select * from u_user where name = '张三' and age = '21',那么第二次查询请保持 nameage 的查询顺序不便,这样可以使用查询缓存,提高查询效率。
6.劲量避免 select *
7.使用 Explain 关键字去查看执行计划,根据执行计划对 SQL 进行优化。
8.合理使用 inexists 关键字,exists 适合外表小而内表大的情况。而 not innot exists 更推荐使用 not exists
9.避免在 where 字句中对字段进行 null 值判断,对 null 值判断将会进行全表扫描。
10.不建议使用 % 前缀模糊查询,这种查询会导致索引失效而进行全表扫描。可以使用 like name%。但是如果需要进行前缀模糊查询的时候,我们可以对需要模糊查询的列添加全文索引。
11.劲量使用小表去驱动大表,比如 A left join B 那么 A 表最小是小表。

数据库优化

最近公司项目有几个逻辑运行的比较慢,于是通过对其执行的 SQL 进行分析,优化部分实现,以满足性能的要求,这里简单记录一下优化的过程和方法。