单分派、双分派及两种设计模式

2019-09-16
阅读 6 分钟
3.4k
对于消息表达式a.m(b,c),按照一个对象的实际类型绑定对应方法体,称为单分派。当然,这个“一个对象”比较特殊,每一个消息表达式a.m(b,c)只有一个消息接收者,这个“一个对象”就是指消息接收者,即a.m(b, c)中的a。所以,仅按照消息接收者的实际类型绑定实际类型提供的方法体,即单分派(singledispatch),就是面向对象...

Mybatis是如何跟Spring整合的

2019-09-15
阅读 10 分钟
1.6k
写在前面 Mybatis官网中,有这么一节专门介绍如何注入一个mapper 对于单个mapper,有两种方式可以注入,分别是xml和注解 其中,xml这种方式耐人寻味。 {代码...} 不妨我们今天就手写一个小框架,来实现mapper注入的功能。 动态代理 我们都知道,mybatis通过动态代理来实现将interface接口转为具体的类,来执行相应的mapp...

那些年,我们遇到的OOM

2019-08-11
阅读 5 分钟
2.6k
这张图真是常看常新,今天我们从内存溢出的角度重新再审视一遍。方法区,也称非堆,hotspot中,1.7叫perm区,1.8叫元空间,因此这个区域溢出,1.7就是OutOfMemoryError: PermGen space,1.8是OutOfMemoryError: Metaspace

cpu idle过低问题

2019-08-10
阅读 1 分钟
3.8k
工作中,如果机器cpu idle过低,会收到告警 P2主机名: set-xr-xxxx监控项: all(#5) cpu.idle < 30 当前值: 0 排查的步骤如下, 使用top + 大写P,查看cpu占用过高的进程 这里往往就是后台java服务,然后要通过进程来排查具体的线程,这时有两种方法方法一: top -H -p [pid] , 这时可以看到该进程下的所有线程,同样...

方法区到底是个什么鬼

2019-05-02
阅读 4 分钟
4.5k
《Java虚拟机规范》只是规定了有方法区这么个概念和它的作用,并没有规定如何去实现它。那么,在不同的 JVM 上方法区的实现肯定是不同的了。 同时大多数用的JVM都是Sun公司的HotSpot。在HotSpot上把GC分代收集扩展至方法区,或者说使用永久代来实现方法区。换句话说:方法区是一种规范,永久代是Hotspot针对这一规范的一...

从Thread.join说开去

2019-03-25
阅读 7 分钟
2.2k
看《Java特种兵》的时候发现,Thread.join可以使线程进入WAITING状态,再结合姊妹篇线程的状态我们可以了解到,有两个类状态非常接近:WAITING(TIMED_WAITING) 与 BLOCKED,这两者都会让线程看上去“阻塞”在某处了。

线程的状态

2019-03-25
阅读 5 分钟
1.3k
线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中 获取cpu 的使用权 。

线程池底层原理

2019-03-03
阅读 11 分钟
2.6k
JAVA通过多线程的方式实现并发,为了方便线程池的管理,JAVA采用线程池的方式对线线程的整个生命周期进行管理。1.5后引入的Executor框架的最大优点是把任务的提交和执行解耦。

gof23行为类模式(golang版)

2018-12-08
阅读 9 分钟
2.3k
命令模式是一个高内聚的模式,其定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排除或者记录请求日志,可以提供命令的撤销和恢复功能。

gof23结构类模式(golang版)

2018-12-02
阅读 7 分钟
1.9k
github欢迎star [链接] 适配器模式 Adapter模式也被称为Wrapper模式,有以下两种: 类适配器(使用继承) [链接]实现目标接口,继承被适配类 对象适配器(使用委托) 继承目标类,依赖被适配类 参考[链接] {代码...} 适配器TurkeyAdpater,持有turkey Turkey,实现Duck接口。 代理模式 uml:[链接] 代理模式中的成员构成...

gof23创建类模式(golang版)

2018-12-01
阅读 5 分钟
1.8k
区块链的征程已开启 github欢迎star [链接] 单例模式 Java中的单例模式的实现可以有饿汉式、懒汉式、双锁、静态内部类、枚举等形式,在go中如何实现单例呢,先来最简单的形式,不考虑高并发的情况下,应该怎样实现 {代码...} 问题就是并发的时候会取到多个对象,解决方案加锁 {代码...} go语言特性,支持一种更为方便的...

golang之树的遍历

2018-11-18
阅读 3 分钟
7.9k
go语言在区块链编程中有巨大的优势,其中fabric和ethereum都是基于go语言编写的。为了能更好的学习区块链的底层技术,先将go的基础打好。

SpringMVC学习笔记

2018-07-29
阅读 22 分钟
2.7k
一、SpringMVC概述 Spring为展现层提供的基于MVC设计理念的优秀的Web框架,是目前最主流的MVC框架之一 Spring3.0之后全面超越Struts2,成为最优秀的MVC框架 SpringMVC通过一套MVC注解,让POJO成为处理请求的控制器,而无须实现任何接口 支持REST风格的URL请求 采用了松散耦合可挺拔组件结构,比其他MVC框架更具扩展性和...

Spring初级学习笔记

2018-06-30
阅读 21 分钟
1.9k
一、Spring简介 1.1 Spring是什么 Spring 是一个开源框架. Spring 为简化企业级应用开发而生. 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能. Spring 是一个 IOC(DI) 和 AOP 容器框架. 具体描述 Spring: 轻量级:Spring 是非侵入性的 - 基于 Spring 开发的应用中的对象可以不依赖于 Spring 的 API...

Mybatis学习笔记

2018-06-30
阅读 27 分钟
1.6k
1. HelloWorld 导入mybatis {代码...} 1.1 配置文件法 从XML中构建SqlSessionFactory {代码...} mapper {代码...} JavaBean {代码...} 单元测试 {代码...} 驼峰命名法问题: mybatis-config.xml配置文件配置时,要注意节点顺序 {代码...} 增加设置 {代码...} 1.2 接口式编程 配置文件 {代码...} mapper接口 {代码...} 单...

RabbitMQ学习笔记

2018-06-27
阅读 20 分钟
2.1k
一、内容大纲&使用场景 1. 消息队列解决了什么问题? 异步处理 应用解耦 流量削锋 日志处理 ...... 2. rabbitMQ安装与配置 3. Java操作rabbitMQ simple 简单队列. work queues 工作队列 公平分发 轮询分发 . publish/subscribe 发布订阅. routing 路由选择 通配符模式 . Topics 主题 手动和自动确认消息 队列的持久化...

Redis学习笔记

2018-06-15
阅读 24 分钟
3.2k
1、 NoSQL入门和概述 1.1 入门概述 1.1.1 历史 互联网时代背景下,为什么要用NoSQL? 90年代的互联网,访问量不大,单个数据库可以应付。 单机架构 瓶颈是: 1、数据量的总大小一个机器放不下时 2、数据的索引(B+Tree)一个机器的内存放不下时 3、访问量(混合读写)一个实例不能承受时 Memcached(缓存)+MySQL+垂直拆分...

mybatis学习笔记

2018-06-09
阅读 27 分钟
2.5k
1. HelloWorld 导入mybatis {代码...} 1.1 配置文件法 从XML中构建SqlSessionFactory {代码...} mapper {代码...} JavaBean {代码...} 单元测试 {代码...} 驼峰命名法问题: mybatis-config.xml配置文件配置时,要注意节点顺序 {代码...} 增加设置 {代码...} 1.2 接口式编程 配置文件 {代码...} mapper接口 {代码...} 单...

SpringBoot学习笔记--Web

2018-05-29
阅读 40 分钟
5.7k
四、Web 1. 简介 使用SpringBoot 创建Spring Boot应用,选中我们需要的模块; SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来 自己编写业务代码 自动配置原理? xxxAutoConfiguration自动给容器中配置组件xxxProperties 配置类来封装配置文件的内容 2. SpringBoot对静态资源的映...

Xpath、Jsoup、Xsoup(我的Java爬虫之二)

2018-05-21
阅读 4 分钟
9k
XPath是W3C的一个标准。它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计。XPath是一种表达式语言,它的返回值可能是节点,节点集合,原子值,以及节点和原子值的混合等。

一步步构建自己的智能合约

2018-05-09
阅读 51 分钟
5.7k
所有的 Solidity 源码都必须冠以 "version pragma" — 标明 Solidity 编译器的版本. 以避免将来新的编译器可能破坏你的代码。

Spring Boot学习笔记--日志

2018-05-08
阅读 4 分钟
3.5k
三、Spring Boot与日志 1、日志框架 市面上的日志框架 JUL、JCL、Jboos-logging、logback、log4j、slf4j 日志门面(日志的抽象层) 日志实现 JCL、slf4j、jboss-logging log4j、JUL、log4j2、logback 左边选择一个facade,右边选择一个实现 日志门面:slf4j 日志实现:logback Spring Boot:底层是Spring框架,Spring框...

SpringBoot学习笔记--入门及配置

2018-05-08
阅读 21 分钟
2.7k
一、Spring Boot入门 1、 Srping Boot简介 简化Spring应用开发的一个框架整个Spring技术栈的一个大整合 J2EE开发的一站式解决方案 2、微服务 martin fowler 总结说,微服务是一种架构风格 一个应用应该是一组小型服务;可以通过HTTP的方式进行互通 每一个功能元素最终都是一个可独立替换和独立升级的软件单元。 与之对...

图论(中)有权图之最小生成树问题

2018-05-02
阅读 11 分钟
1.8k
有权图的设计 增加一个边的类,邻接表和邻接矩阵中保存的都是类的对象 {代码...} 加权图的接口 {代码...} 邻接表 {代码...} 在此处任性地增加一段知识点 | Summary of Queue methods | Method Throws exception Returns special value Insert add(e) offer(e) Remove remove() poll() Examine element() peek() 最小生成...

图论(上)无权图

2018-04-29
阅读 8 分钟
3.9k
图论Graph theory 基础 研究由点和边组成的数学模型 应用:交通运输 社交网络互联网工作安排 脑区活动程序状态执行 图的分类 图的连通性 简单图(Simple Graph) 图的表示 邻接表适合表示稀疏图(Sparse Graph)邻接矩阵适合表示稠密图(Dense Graph) 邻接矩阵 表示无向图表示有向图 邻接表 表示无向图 表示有向图 图的实现 ...

数据结构与算法 整理笔记---并查集

2018-04-19
阅读 4 分钟
1.9k
连接问题Connectivity problem 任意两点是否连接在一起?更抽象一点为 网络中节点间的连接状态 网络是个抽象的概念:用户之间形成的网络(facebook中两个人是否认识) 数学中的集合类实现 与路径问题的区别 连接问题比路径问题要回答的问题少 并查集的实现 对于一组数据,主要支持两个动作 union(p, q) find(p) 用来回答一...

数据结构与算法 整理笔记---二叉搜索树

2018-04-19
阅读 8 分钟
1.7k
int mid = (low + high) / 2;如果low 和 high足够大时,low + high会越界。更好的写法为int mid = low + (high - low) / 2;

数据结构与算法 整理笔记---堆排序

2018-04-13
阅读 5 分钟
1.7k
在N个元素中选出前M个元素,例如在1000000个元素中选出前100名这类问题,排序的时间复杂度为O(nlogn),而优先队列为O(Mlogn)。

数据结构与算法 整理笔记---O(nlogn)的排序算法

2018-04-11
阅读 8 分钟
2.4k
归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

数据结构与算法 整理笔记---O(n^2)的排序算法

2018-04-07
阅读 5 分钟
2.1k
算法与数据结构 本系列为慕课网相关课程笔记整理 准备工作,SortTestHelper 生成随机数 {代码...} 总结 随机数种子的产生方法 产生在[rangeL, rangeR]范围内随机数的标准做法 排序算法 O(n^2)的排序算法 选择排序 思想:每次找到剩余元素中最小的,放到应该的位置上。 {代码...} 升级版,可以排序实现了Comparable接口的...