自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计模式前期准备:设计原则与类图

设计原则这里先将原则都罗列出来,在后续的具体模式中再具体讲解。单一职责原则:应该有且仅有一个原因引起类的变更里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象依赖倒置原则:面向接口编程接口隔离原则:接口尽量细化,同时接口中的方法尽量少迪米特法则:一个对象应该对其他对象有最少的了解开闭原则:类应该对扩展开放,对修改关闭类图类图(Class diagram)...

2018-05-27 16:35:33 584 1

原创 SSL/TLS与密码通信工具

1.先说一下密码通信的工具:对称加密,非对称加密,单向散列函数,消息认证码,数字签名.这里使用openssl进行举例:(使用openssl -help参看介绍) 主要有三部分: a)标准命令: ca:CA管理ciphers:列出加密套件crl:证书吊销列表管理dgst:生成消息摘要enc:对称加密解密genrsa:生成RSA私钥rand:生成伪随机数rsa:RSA密码处理工具re

2018-02-02 17:02:00 1465

原创 JWT实现基于token的鉴权

一.介绍 1.JSON Web Token,简称JWT,本质是一个token,是一种紧凑的URL安全方法,用于在网络通信的双方之间传递。 2.一般放在HTTP的headers 参数里面的authorization里面,值的前面加Bearer关键字和空格。 3.主要用于身份认证和信息交换 4.由三部分组成,用英文句点连接(.),例如:xxxxxx.yyyyyy.zzzzzz二.J

2018-01-25 17:59:15 4711

原创 negroni

一.简介negroni是一个web中间件,方便使用net/http的库;它实现了http.Handle接口,兼容http.Handle.获取方式:go get github.com/urfave/negroninegroni的主要的结构:type Negroni struct { middleware middleware //节点结构 handlers []Handl

2018-01-25 16:54:16 918

原创 一致性哈希库:stathat.com/c/consistent

应用场景: 假如你有 N 个 cache 服务器,那么你可能会使用hash(object)%N将对象 object均匀映射到 N 个 cache上,这样可以运行,但是当服务器宕掉或者添加服务器时,映射规则都会改变,所有的cache都会失效。所以需要使用一致性哈希算法避免这种情况。关于一致性哈希算法可以参考:http://blog.csdn.net/cywosp/article/deta

2018-01-17 17:37:46 1005

原创 fatal error: concurrent map read and map write

一.问题map是线程不安全的,即使并发读写没有冲突也会报错(fatal error: concurrent map read and map write):func main() { m := make(map[int]int) go func() { for { _ = m[1] } }() go func() { for { m[2] = 2 }

2018-01-16 18:04:31 6790

原创 Docker运行Redis

一.docker运行单个redis1.拉取镜像: docker pull redis2.运行容器(本地image是:docker.io/redis latest 8f2e175b3bd1 2 weeks ago 106.6 MB): docker run -d --name redis-S -v /home/tym

2017-11-21 23:08:34 15732

原创 first path segment in URL cannot contain colon

一:问题func main(){ url,err:= url.Parse("127.0.0.1:8080") if err!=nil{ fmt.Println(err) } fmt.Println(url.Host,url.Port())}使用url.Parse()解析host是ip的url时(eg:127.0.0.1:8080),出现:first pa

2017-11-15 14:00:23 36989

原创 Spring的Bean-singleton模式

一.问题 在spring中,Bean的scope默认为singleton。可能我们会把spring的singleton与设计模式中的singleon 类比然后等价。事实是:在spring中的singleton不是以单例模式创建,而是在容器中以单例存在。二.源码分析(这里以spring3.2.0为例) 创建一个示例,通过调试找到入口在:org.springframewor

2017-11-02 16:26:44 2652

原创 go中结构体与json的格式转换

基于简单结构体的处理,结构体的嵌套类似type User struct { UserName string PassWord string }1)结构体->json user := User{ UserName: "tyming", PassWord: "1234567890",//这里逗号不能少 } //json.Marsha

2017-10-09 13:24:37 10853

原创 安装xorm工具出现第三方工具依赖

一.问题 1).当输入go get github.com/go-xorm/cmd/xorm 时出现: package golang.org/x/net/context: unrecognized import path “golang.org/x/net/context” (https fetch: Get https://golang.org/x/net/context?go-get=1: d

2017-10-05 12:56:55 1364

原创 xorm的基本使用

中文文档:http://www.xorm.io/docs/ github地址:https://github.com/go-xorm/xorm 安装:go get github.com/go-xorm/xorm一.创建连接

2017-10-04 23:38:31 14987

原创 Gin框架初识

关于Gin的具体说明与源码:https://github.com/gin-gonic/gin一.安装 命令行输入:go get github.com/gin-gonic/gin 安装位置:go的环境变量中配置的全局的lib目录二:基本应用1. GET 1)gin.Context中的Query方法:get的URL传参func getQuery(context *gin.Context){

2017-10-04 17:35:48 4249

原创 Go的并发

首先并行!=并发,并发是逻辑上的并行. 例如:多个程序在单核处理器上运行,每个程序只能在对应的时间片上运行,因为时间片很短,看起来就像是并行. 一.go语言级别的线程goroutine goroutine是Go语言中的轻量级线程实现.它是一个普通的函数,只需使用保留字 go 作为开头。 例如:两个goroutine打印1-10//这个程序是不会输出的,因为go还没执行完成,m

2017-09-29 14:51:55 966 1

原创 GO的路径问题

在go语言中,import导入的时候导入的是路径,而在使用的时候使用的是package名 例如: test.go:package t_unit//import "fmt"type Sort interface { Min(a int) bool}//func init() {// fmt.Println("aaassadas")//}root.go:package mai

2017-09-28 17:44:20 920

原创 springmvc文件上传

1.配置环境 a)导入上传文件的jar包: b)在springmvc.xml中配置multipart类型解析器<!-- 文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

2017-08-15 15:57:17 204

原创 @ModelAttribute和@SessionAttributes

@ModelAttribute@SessionAttributes 将模型中的属性暂存在session中,使同一个控制器类中的请求之间可以共享.@ModelAttribute和@SessionAttributes在ModelFactory中的加载 基于:org.springframework.web.method.annotation.ModelFactory模型初始化:pub

2017-08-15 12:08:50 609

原创 <mvc:annotation-driven>

1.<mvc:annotation-driven>作用: 注册了HandlerMapping,HandlerAdapter,HandlerExceptionResolver;比如:自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter,在springmvc.xml配置文件中使用<mvc:annotation-driven>替代注解

2017-08-12 11:15:12 635

原创 @RequestBody与@ResponseBody

1.@RequestBody与@ResponseBody的作用@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容转换为json、xml等格式的数据并绑定到controller方法的参数上。 @ResponseBody注解用于将Controller的方法返回的对象,通过HttpMessageConve

2017-08-11 22:40:10 624

原创 springMVC拦截器执行过程和使用

1.拦截器: 用于对handle进行预处理和后处理 2.执行过程 在org.springframework.web.servlet.DispatcherServlet#doDispatch中:HandlerExecutionChain mappedHandler = null;//首先获取HandlerExecutionChain(handle和拦截器)// Determine h

2017-08-11 10:35:25 1228

原创 二叉查找树(BST)

二叉查找树(Binary Search Tree缩写:BST):也称二叉排序树,特征:1)如果左子树不为空,左子树的值小于对应的父节点;2)如果右子树不为空,右子树大于对应的父节点;也就是左<中<右;插入操作:类似二叉链表,就是在二叉链表的基础上加上判断条件typedef int dataType;typedef struct Node{ dataType data; struc

2017-08-09 21:24:08 282

原创 非阻塞通信(服务器端)

一.非阻塞 1.非阻塞:线程执行方法时,如果操作没有就绪,就立即返回,不会一直等待操作就绪2.java.nio提供非阻塞通信的类: 1)ServerSocketChannel:代替Server 2)SocketChannel:代替Socket 3)Selector:监控就绪事件 4)SelectionKey:注册事件的句柄3.服务器端程序使用多线程处理阻塞IO,虽然可以响应多用户,但是存在

2017-08-08 21:10:10 984

原创 实现线程池

1.线程池优点: 1).减少创建和销毁线程的次数 2).可以根据系统的能力,调整线程池中线程的数目 3).减少切换线程的开销2.实现自定义线程池 思路: 1)将线程池线程定义为守护线程(这样可以保证在线程池中的线程结束后自动退出,同时监视线程池) 2)创建一个工作队列保存线程(Runnable) 3)执行线程的类 4)定

2017-08-06 22:12:59 223

原创 互斥共享

描述:模拟两个售票员同时售票的情况,对电子票箱需要互斥共享。//售票点(共享数据)class Clerk{ int ticket = 10; public synchronized void book(int tk){ if(ticket>=tk) { System.out.println("book:" + tk); t

2017-08-04 15:09:50 2118

原创 线程同步示例

描述:父亲和儿子共享一个盘子,父亲放苹果,儿子吃苹果,盘子里面只能放一个,父亲放苹果的时候,儿子不能吃,儿子取的时候,父亲不能放,盘子只放一个苹果,完成两个线程的同步问题 注:synchronized修饰的非静态方法是对象锁,静态方法是类锁//盘子class Dish{ int apple =0; public synchronized void add() throws Exc

2017-08-04 14:49:29 304

原创 mybatis延迟加载

延迟加载:先简单查询、需要时再从关联表去关联查询1.配置:(在mybatis配置文件中开启延迟加载)<settings> <!--打开延迟加载开关--> <setting name="lazyLoadingEnabled" value="true"/> <!--将积极加载改为消极加载--> <setting name="aggressi

2017-08-02 21:28:26 263

原创 classpath:与classpath*:分析

1.在spring中classpath:和classpath*:为前缀的文件加载过程: classpath:String CLASSPATH_URL_PREFIX = ResourceUtils.CLASSPATH_URL_PREFIX;/** Pseudo URL prefix for loading from the class path: "classpath:" */ public

2017-08-02 17:48:54 1979

原创 ssm中Invalid bound statement (not found)错误的处理(IDEA中)

根据提示发现if (ms == null) { throw new BindingException("Invalid bound statement (not found): " + statementName); }说明是ms==null导致的,而ms的定义为:MappedStatement ms = null;也就是没有找到Statement,如果sprring

2017-07-31 15:58:46 2016 3

原创 mybatis自增主键设置

1.自增主键设置(字段是自增的才可使用)<insert id="insertUser" parameterType="cn.itcast.mybatis.po.User"> <!-- 将插入数据的主键返回,返回到user对象中 SELECT LAST_INSERT_ID():得到刚insert进去记录的主键值,只适用与自增主键 key

2017-07-31 13:51:59 5691

原创 resultType和resultMap总结

一.resultType与resultMapresultType:使用resultType进行输出映射,只有查询出来的列名与pojo中的属性一致,该列才会映射成功.resultMap:可以将查询结果映射为pojo二.区别和对比1.一对一查询(查询订单信息,关联用户信息)表结构: sql语句: select orders.*, user

2017-07-29 16:32:47 1970

原创 mybatis逆向工程生成的Example类的使用

一.逆向工程 逆向工程可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml、po),根据数据库的表生成java代码(逆向工程代码示例:https://github.com/tongyiming/mybatis)二.Example类的使用Example类的成员: //升序还是降序:字段+空格+asc(desc) protected S

2017-07-24 15:56:59 25514 3

原创 linux上传本地已有项目到github

1.登陆github:https://github.com/,同时登陆自己的账户 2.点击start a project创建一个远程仓库 3.进入本地项目根目录,初始化本地仓库git init 4.提交当前项目源代码1)git add .2)git commit -m "springmvc"3)git remote add origin https://github.com/tongyim

2017-07-18 21:09:45 855

原创 内存对齐

为什么要内存对齐 为了提高程序的性能,数据结构(尤其是栈)应该尽可能的在自然边界上对齐。因为访问未对齐的内存,处理器需要作两次内存访问,但是,对齐的内存访问只需要一次访问。内存对齐尽管会牺牲一些空间,但是可以提高程序的性能。 比如32位机,字长为32位即4字节。如果一个字操作数跨越了4字节边界那么就需要两次总线周期来访问内存。对齐规则 1.每个成员分别按自己的方式对齐,并能最小化长度。 2.

2017-07-18 17:43:50 271

原创 IDEA中xml文件引入schema约束报错:uri is not registered

解决方法: 复制报红的URI,在file->settings->languages & Frameworks->Schemas and DTDs中点击右下方的加号,将复制的URI输入

2017-07-17 16:27:10 4573 1

原创 redhat上安装jdk,maven(记录)

jdk1)在官网http://www.oracle.com/technetwork/java/javase/downloads/index.html下载对应的jdk版本,例如jdk-8u131-linux-x64.rpm(这是64位的)下载.rpm的 2)删除自带的jdk,命令【rpm -qa | grep gcj】查看自带的jdk信息,命令【rpm -e –nodeps 文件名】删除相关文件

2017-06-15 14:29:10 765

原创 下载挺快的maven镜像仓库设置

在setting.xml的mirrors中添加:<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf>

2017-06-06 18:04:24 315

原创 堆排序(大顶堆)

一:堆 堆可以看做一个完全二叉树,同时该完全二叉树满足双亲结点大于等于孩子结点(大顶堆),或者双亲结点小于等于孩子结点(小顶堆)。 二:堆排序(以大顶堆为例) 大顶堆产生顺序序列,小顶堆产生逆序序列。 已知序列[a0,a1,…,an]。测试序列为{5,9,3,7,6,5}; a)将序列初始化,从最后面的非叶子结点开始调整产生大顶堆。 b)

2017-05-16 16:51:04 9302 1

原创 背包问题总结

1.01背包 有n种物品,一个容量为c的背包,每种物品的体积是v,重量是w,且每种物品只有一件,可以选择放或者不放。求那些物品放入背包可以让背包重量最大。初始化问题:这里有两种情况1)恰好装满:这时就只有背包容量为0的可以被0个物品恰好装满,所以容量为零的背包初始化为0,其余的均不符合合法状态所以初始化为负无穷大。2)不要求恰好装满:这时每个容量的背包都有什么都不装的合法解所以初始化为0。例题:h

2017-03-28 14:54:49 348

原创 二叉树的恢复

1.先序+后序//先序和中序恢复,a是先序序列,b是后序序列,n是结点个数node * restore(char a[],char b[],int n) { if(n<=0) { return NULL; } node *root = new node(); root->data=*a; int i; for(i=0; i<

2017-03-26 21:06:44 427

原创 完全二叉树的简单应用

例题:http://acm.nyist.net/JudgeOnline/problem.php?pid=63 小猴子下落 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 有一颗二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从左到右从上到下的编号为1,2,3,·····,2的D次方减1。在结点1处放一个小猴子,它会往下跑。每个内结点上都有一个开关,初始全

2017-03-25 11:03:47 1694

空空如也

空空如也

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

TA关注的人

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