- 博客(260)
- 资源 (1)
- 收藏
- 关注
原创 Golang中error的一个坑
err != nil第一个问题是:为什么值为 nil 的 error 却不等于 nil?思考如下代码:package mainimport ( "errors" "fmt")type Err struct { err string}func (e *Err) Error() string { return e.err}func ...
2019-10-29 16:01:51
2896
原创 Golang中Channel详解
Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication)。它的操作符是箭头 <-ch <- v // 发送值v到Channel ch中v := <-ch // 从Channel ch中接收数据,并将数据赋值给v(箭头的指向就是数据的流向)就像 map 和 slice 数据类型一...
2019-08-26 20:32:40
2577
原创 Go工程单元测试覆盖率
在go test命令后面添加 -cover参数开启测试覆盖率统计,其结果如下:ok models 0.012s coverage: 71.4% of statements in models-coverpkg 标记来指定要被统计的代码包之后,未被指定的代码则肯定不会被统计,即使是被直接测试的那个代码包。go test -coverpkg=./... pkg2可以跑pkg2下的所有单元测试及pkg...
2019-07-28 16:10:51
3513
1
原创 java并发编程--线程中断
使用interrupt()中断线程当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回。这里需要注意的是,如果只是单纯的调用interrupt()方法,线程并没有实际被中断,会继续往下执行。下面一段代码演示了休眠线程的中断:public class SleepIn...
2019-05-05 15:49:54
283
原创 源码|并发一枝花之ConcurrentLinkedQueue
首先声明,本文是伪源码分析。主要是基于状态机自己实现一个简化的并发队列,有助于读者掌握并发程序设计的核心——状态机;最后对源码实现略有提及。ConcurrentLinkedQueue不支持阻塞,没有BlockingQueue那么易用;但在中等规模的并发场景下,其性能却比BlockingQueue高不少,而且相当稳定。同时,ConcurrentLinkedQueue是学习CAS的经典案例。根...
2019-05-05 11:07:57
425
原创 源码|并发一枝花之BlockingQueue
今天来介绍Java并发编程中最受欢迎的同步类——堪称并发一枝花之BlockingQueue。JDK版本:oracle java 1.8.0_102继续阅读之前,需确保你对锁和条件队列的使用方法烂熟于心,特别是条件队列,否则你可能无法理解以下源码的精妙之处,甚至基本的正确性。本篇暂不涉及此部分内容,需读者自行准备。接口定义BlockingQueue继承自Queue,增加了阻塞...
2019-04-25 15:03:34
184
原创 Java实现生产者-消费者模型
考查Java的并发编程时,手写“生产者-消费者模型”是一个经典问题。有如下几个考点:对Java并发模型的理解 对Java并发编程接口的熟练程度 bug free coding styleJDK版本:oracle java 1.8.0_102本文主要归纳了4种写法,阅读后,最好在白板上练习几遍,检查自己是否掌握。这4种写法或者编程接口不同,或者并发粒度不同,但本质是相同的——...
2019-04-24 17:47:10
552
原创 wait/notify/notifyAll使用
在Java中,可以通过配合调用Object对象的wait()方法和notify()方法或notifyAll()方法来实现线程间的通信。在线程中调用wait()方法,将阻塞等待其他线程的通知(其他线程调用notify()方法或notifyAll()方法),在线程中调用notify()方法或notifyAll()方法,将通知其他线程从wait()方法处返回。 Object是所有类的超类...
2019-04-24 16:54:23
271
原创 源码|并发一枝花之ReentrantLock与AQS(3):Condition
JDK版本:oracle java 1.8.0_102接口声明public interface Lock { ... Condition newCondition(); ...}public interface Condition { ... void await() throws InterruptedException; bo...
2019-04-24 16:03:53
161
原创 源码|并发一枝花之ReentrantLock与AQS(2):lockInterruptibly
JDK版本:oracle java 1.8.0_102接口声明public interface Lock {...void lock();void lockInterruptibly() throws InterruptedException;void unlock();...}Lock#lockInterruptibly()是Lock#lock()的一个...
2019-04-23 22:55:58
256
原创 源码|并发一枝花之ReentrantLock与AQS(1):lock、unlock
显示锁ReentrantLock的内部同步依赖于AQS(AbstractQueuedSynchronizer),因此,分析ReentrantLock必然涉及AQS。本文假设读者已熟练掌握AQS的基本原理(参考AQS的基本原理),通过分析ReentrantLock#lock()与ReentrantLock#unlock()的实现原理,用实例帮助读者理解AQS的等待队列模型。JDK版本:...
2019-04-23 11:52:56
316
原创 浅谈偏向锁、轻量级锁、重量级锁
为了换取性能,JVM在内置锁上做了非常多的优化,膨胀式的锁分配策略就是其一。理解偏向锁、轻量级锁、重量级锁的要解决的基本问题,几种锁的分配和膨胀过程,有助于编写并优化基于锁的并发程序。内置锁的分配和膨胀过程较为复杂,限于时间和精力,文中该部分内容是根据网上的多方资料整合而来;仅为方便查阅,后面继续分析JVM源码的时候也有个参考。如果对各级锁已经有了基本了解,读者大可跳过此文。隐藏在...
2019-04-23 11:50:05
737
原创 求质数算法----层层递进的N种算法
题目1:给出一个正整数n,打印出所有从1~n的素数(即质数);题目2:给出一个正整数n,打印出自然数中最小的n个素数(即质数);先讨论问题1.普通解法傻瓜法对于每个数m,逐个去除以小于它的数,看是否只有1能够整除。优化对于每个数m,逐个去除以小于等于sqrt(m)的数,看是否只有1能够整除。进一步优化对于每个数m,其实只需要对小于m的已经求出来的质数进行试除,直到sq...
2019-04-21 18:51:02
1436
原创 正确理解Thread Local的原理与适用场景
ThreadLocal解决什么问题由于 ThreadLocal 支持范型,如 ThreadLocal< StringBuilder >,为表述方便,后文用变量代表 ThreadLocal 本身,而用实例代表具体类型(如 StringBuidler )的实例。不恰当的理解写这篇文章的一个原因在于,网上很多博客关于 ThreadLocal 的适用场景以及解决的问题,描述...
2019-03-06 19:23:13
445
原创 HTTP和WebSocket协议的区别与联系
那天和boss聊天,不经意间提到了Meteor,然后聊到了WebSocket,然后就有了以下对话,不得不说,看问题的方式不同,看到的东西也会大不相同。A:Meteor是一个很新的开发框架,我觉得它设计得十分巧妙。B:怎么个巧妙之处?A:它的前后端全部使用JS,做到了真正的前后端统一;前端浏览器里存有一份后台开放出来的数据库的拷贝,快;使用WebSocket协议来做数据传输协议,来同步前后端的...
2019-02-20 15:39:48
9569
3
原创 JPA 已作废的SQLQuery.class、setResultTransformer方法替换
jpa可以使用setResultTransformer,将查询结果以map返回,key为字段名全大写。hibernate 5.2 之后,SQLQuery.class、setResultTransformer方法已作废,其用法如下:Query query = entityManager.createNativeQuery(sql, clazz);query.unwrap(SQLQuery...
2019-01-25 11:23:19
6263
8
原创 ES官方说明:Removal of mapping types
Indices created in Elasticsearch 6.0.0 or later may only contain a single mapping type. Indices created in 5.x with multiple mapping types will continue to function as before in Elasticsearch 6.x. Map...
2018-12-24 11:22:29
483
原创 Elasticsearch 连接查询
ES中的连接在ES中支持两种连接方式:嵌套查询 和 has_child、has_parent父子查询嵌套查询:文档中包含嵌套的字段,这些字段以数组的形式保存对象,这样每个嵌套的子对象都可以被搜索。has_child、has_parent父子查询:父子文档是存储在同一个索引中的不同类型,在索引数据前定义父子关系。在父子查询中,父子关系通过类型引用。嵌套查询嵌套类型需要实现...
2018-12-20 20:48:41
501
原创 Elasticsearch DSL介绍
ES支持一种JSON格式的查询,叫做DSL,domain specific language。这门语言刚开始比较难理解,因此通过几个简单的例子开始:下面的命令,可以搜索全部的文档:{ "query": { "match_all": {} }}query定义了查询,match_all声明了查询的类型。还有其他的参数可以控制返回的结果:curl -XPOST 'localho...
2018-12-20 20:35:47
2726
原创 ElasticSearch DSL中Query Filter的区别
举个DSL例子GET _search{ "query": { "bool": { "must": [ { "match": { "title": "Search" }}, { "match": { "content": "Elasticsearch&
2018-12-20 20:27:23
325
原创 ES快速入门
安装并运行Elasetisearch cd elasticsearch-<version>./bin/elasticsearch 如果你想把 Elasticsearch 作为一个守护进程在后台运行,那么可以在后面添加参数 -d 。 如果你是在 Windows 上面运行 Elasticseach,...
2018-12-18 16:46:47
2002
原创 JPA屏蔽实体间外键
在用jpa这种orm框架时,有时我们实体对象存在关联关系,但实际的业务场景可能不需要用jpa来控制数据库创建数据表之间的关联约束,这时我们就需要消除掉数据库表与表之间的外键关联。但jpa在处理建立外键时存在一些问题,在stackoverflow上搜索了相关的jpa创建实体对象关联关系但不建立外键这一系列问题后,发现这个是jpa在处理外键时存在一定的bug,官方给出的答复是在hibernate 5...
2018-12-14 20:00:21
3869
原创 Springboot中JPA的使用
前言第一次使用 Spring JPA 的时候,感觉这东西简直就是神器,几乎不需要写什么关于数据库访问的代码一个基本的 CURD 的功能就出来了。下面我们就用一个例子来讲述以下 JPA 使用的基本操作。新建项目,增加依赖在 Intellij IDEA 里面新建一个空的 SpringBoot 项目。具体步骤参考SpringBoot 的第一次邂逅。根据本样例的需求,我们要添加下面三个依赖...
2018-12-13 16:28:33
258
原创 分布式事务方案
一、事务定义事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。简单地说,事务提供一种“要么什么都不做,要么做全套(All or Nothing)”机制。特性说到数据库事务就不得不说,数据库事务中的四大特性,ACID:A:原子性(Atomici...
2018-11-12 15:12:31
199
原创 Linux上java进程虚拟内存VIRT占用高的问题
1. 现象最近发现线上机器 java 8 进程的 VIRT 虚拟内存使用达到了 50G+,如下图所示:2. 不管用的 -Xmx首先第一想到的当然使用 java 的 -Xmx 去限制堆的使用。但是无论怎样设置,都没有什么效果。没办法,只好开始苦逼的研究。3. 什么是 VIRT现代操作系统里面分配虚拟地址空间操作不同于分配物理内存。在64位操作系统上,可用的最大虚拟地址空间有16EB,即大概180亿G...
2018-05-29 15:13:29
18792
1
原创 Mysql EXPLAIN详解
在工作中,我们用于捕捉性能问题最常用的就是打开慢查询,定位执行效率差的SQL,那么当我们定位到一个SQL以后还不算完事,我们还需要知道该SQL的执行计划,比如是全表扫描,还是索引扫描,这些都需要通过EXPLAIN去完成。EXPLAIN命令是查看优化器如何决定执行查询的主要方法。可以帮助我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时...
2018-05-10 10:39:27
308
原创 Sentinel简介
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。自动故障迁移(Automati...
2018-05-04 10:42:15
1159
原创 Metrics使用简介
Metrics可以为你的代码的运行提供无与伦比的洞察力。作为一款监控指标的度量类库,它提供了很多模块可以为第三方库或者应用提供辅助统计信息, 比如Jetty, Logback, Log4j, Apache HttpClient, Ehcache, JDBI, Jersey, 它还可以将度量数据发送给Ganglia和Graphite以提供图形化的监控。Metrics提供了Gauge、Counter、...
2018-05-02 10:00:51
5230
原创 多平台Token系统架构设计
1 概述在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情。随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格局 。不同的客户端产生了不同的用户使用场景,这些场景:有不同的环境安全威胁不同的会话生存周期不同的用户权限控制体系不同级别的接口调用方式综上所述,它们的身份认证方式也存在一定的区别。本文将使用一定的篇幅对这些场景进行一些分析和梳理工作。2 ...
2018-04-16 15:56:36
3703
原创 机器学习入门笔记(十一)----推荐系统
推荐系统是目前非常受欢迎的一个机器学习应用。下面将以电影推荐为例子简单介绍实现推荐系统的方法。前提假设我们运营一个电影网站,每个用户可以对电影评分:0-5分。 n(u) 代表用户数量 n(m) 代表电影数量 r(i,j) 代表用户j是否对电影i进行评分。1 已评。0 未评 y(i,j) 代表用户j对电影i的评分。目的推荐系统的目的是运行算法,预测用户对他们没打过分的电影的分数,然后进行推荐。
2017-10-25 20:14:16
721
原创 机器学习入门笔记(十)----异常检测
介绍异常检测是机器学习的一个常用应用,主要针对非监督学习问题。 比如: * 飞机引擎制造商,采集生产的引擎的各个特征,通过异常检测算法来鉴定引擎有异常的概率。 * 信用卡欺诈账户检测 * 服务器集群,异常节点监测。高斯分布俗称:正态分布。 两个参数定义一个分布: 1. 均值μ 2. 方差σ^2 图形: μ决定中心位置,σ决定波峰宽度。y轴为x取某值的概率。 公式: 算法利用
2017-10-22 19:17:35
942
原创 机器学习入门笔记(九)----无监督学习
一、特征对于无标签的数据,算法自动的解析出数据中的结构。二、应用市场细分、用户关系网络分析、星系数据分析等等三、K均值算法步骤:(1)随机选取聚类中心 (2)计算与聚类中心的距离,进行分类 (3)计算每个分类的均值,作为新的聚类中心 (4)重复2 3步骤,直到分类结果稳定参数:(1)K分类个数 (2)数据优化目标: c(i)为第i个样本所属的聚类索引:1…K uk为第k个聚类中心 uc
2017-10-17 11:40:22
598
原创 机器学习入门笔记(八)----支持向量机SVM
支持向量机SVM在复杂的非线性方程方面,比逻辑回归和神经网络表现的更为清晰、强大。1. 通过逻辑回归了解SVM大致形式设z = thetaT * x假设函数:h(x) = 1 / (1 + e^(-z))分类为1 if h > 0.5 即 z >0分类为0 if h 代价函数:两图分别为y=1和y=0时的曲线,粉色手绘图为曲线的近似折线表示。为别取名co
2017-09-25 10:14:03
959
原创 机器学习入门笔记(七)----机器学习实用方法
当我们实现一个机器学习模型后,发现效果并不是很理想,改进的方法有非常多,那么如果诊断当前模型,选择一条合适的道路去优化就成了一项必不可少的技能,否则‘拍脑门’的胡乱尝试,将会是一件非常浪费时间的事情,且最终也不一定能得到很好的效果。1. 评估一个假设模型:我们通过算法得到一个假设模型后,该模型可能是欠拟合或过拟合的。即在训练数据上表现的比较好,但是在额外的位置数据中,其实并不能很好的进行预
2017-09-19 09:44:37
527
原创 机器学习入门笔记(六)----神经网络
1.模型表示:模型分层:输入层、输出层、隐藏层。a(i) i表示第几层。thera(i) : 为第i层到第i+1层间的权重参数。2. 向前传播:g(theta(i) * a(i))得到a(i+1)。最后一层即是h(x)3. 解决分类问题:类别 c = 2时,输出层仅一个节点,与逻辑回归相同,表示某一个分类的概率。类别 c > 2时,输出层c个节点,每个节点的
2017-09-14 18:58:35
405
原创 机器学习入门笔记(五)----过拟合问题
上右边的图像,展示过拟合的情况。过拟合问题,解决方法:1.减少特征数量2.正规化:保留所有特征,弱化特征参数。正规化(regularization):代价函数: 1.线性回归: (1)梯度下降对theta0不惩罚,其余theta引入正规化参数lamada。(2) 方程法:2.逻辑回归与线性回归相同,加入theta惩罚项。
2017-09-07 18:33:48
427
原创 机器学习入门笔记(四)----逻辑回归
1.逻辑回归用于解决分类问题,简单举例 : 判定邮件是否为垃圾邮件;肿瘤是良性的还是恶性的.2.假设函数: 3.预测结果h(x)值的含义为 : x的分类结果属于'1'的概率, 概率表示:
2017-08-31 23:13:21
520
原创 机器学习入门笔记(三)----Octave简单使用
1. 四则运算:1 + 2 1 * 2 1 / 2 1 - 22. 变量赋值a = 1a = 1; % 不显示赋值结果3. 注释: %4. 相等 / 不等 : 1 == 2 %结果是0,表示为假1 ~= 2 %结果为15. 逻辑 / 位运算:1 || 0 % 11 && 0 % 0xor(1, 0) % 1, 异或
2017-08-26 21:32:36
3087
原创 机器学习入门笔记(二)----线性回归
1. 目标 : 找到使代价函数最小的函数h。2. 代价函数:cost function,J。平方误差代价函数:J(θ0,θ1)=12m∑i=1m(y^i−yi)2=12m∑i=1m(hθ(xi)−yi)2...3. 梯度下降法:将代价函数J取值最小化。定义:θj:=θj−α∂∂θjJ(θ0,θ1)α:速率、步长。太小导致速度慢。太大,导致不能收敛、甚至发散。常规做法
2017-08-24 22:54:17
673
原创 机器学习入门笔记(一)----初次见面
1. 尝试对机器学习进行定义:给予机器自我学习的能力对于任务T完成质量的度量P,可以随着经验E提升。2. 分类:监督学习:已有数据前提下,给出一个算法。算法可以得出数据集中的结果,并尽量得出更多数据集外的正确结果。无监督学习:不确定结果是什么样子的自主学习。3. 监督学习:回归问题:房价预测分类问题:肿瘤良性、恶性4. 无监督学习:
2017-08-23 20:45:02
357
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人