自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

懂幸福,爱生活

关注风控系统,算法工程,分布式存储。https://github.com/leaguenew

  • 博客(154)
  • 收藏
  • 关注

原创 【机器学习实战之三】:C++实现K-均值(K-Means)聚类算法

聚类是一种无监督的学习,它将相似的对象归到同一个簇中。它有点像全自动分类(类别体系是自动构建的)。聚类方法几乎可以应用于所有对象,簇内的对象越相似,聚类的效果越好。本文要介绍一种称为K-均值(K-means)聚类的算法。之所以称之为K-均值是因为它可以发现k个不同的簇,且每个簇的中心采用簇中所含值的均值计算而成。

2015-01-08 17:18:01 29970 11

原创 【推荐系统实战】:C++实现基于用户的协同过滤(UserCollaborativeFilter)

好早的时候就打算写这篇文章,但是还是参加阿里大数据竞赛的第一季三月份的时候实验就完成了,硬生生是拖到了十一假期,自己也是醉了。。。找工作不是很顺利,希望写点东西回顾一下知识,然后再攒点人品吧,只能如此了。一、问题背景二、基于用户的协同过滤算法介绍三、数据结构和实验过程设计四、代码

2014-10-03 20:18:53 9578 10

原创 【机器学习实战之二】:C++实现基于概率论的分类方法--朴素贝叶斯分类(Naive Bayes Classifier)

C++实现基于概率论的分类方法--朴素贝叶斯分类(Naive Bayes Classifier)

2014-02-22 16:53:56 11640 2

原创 【机器学习实战之一】:C++实现K-近邻算法KNN

本文不对KNN算法做过多的理论上的解释,主要是针对问题,进行算法的设计和代码的注解。KNN算法:优点:精度高、对异常值不敏感、无数据输入假定。缺点:计算复杂度高、空间复杂度高。适用数据范围:数值型和标称性。工作原理:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一个数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征

2013-11-24 23:08:01 23208 19

原创 【大道模式】状态模式 - State Pattern(审核状态流转)

状态模式实现审核状态流转

2022-12-04 22:17:25 916 1

原创 【Testing】基于Mockito的FeignClient单元测试

在微服务框架模式下,往往需要在外部服务没有准备好的情况下进行测试。本文主要是讨论在SpringCloud体系下,以FeignClient进行通信时,对其进行mock的方式。

2022-07-31 17:28:54 1778

原创 微服务TraceId设计(SpringCloud OpenFeign)

微服务框架下traceId的生成和传递以及多线程环境下的一致性保证。

2022-07-31 16:50:44 2842

原创 【Kubernetes】基于K8S & SpringCloud OpenFeign的一种微服务构建模式

在构建微服务之前,需要进行微服务框架选型,之前的微服务完全基于springcloud构建,而现在则需要基于云原生的方式来构建。

2022-07-31 15:54:18 1787 2

原创 如何进行架构技术选型

一、什么是技术选型为了达到业务需求,从各种技术选择中选取最优的过程。开发语言:Java,Python,C++中间件:Mysql/PGSQL,Redis/Memcache微服务框架:SpringCloud,Dubbo,K8S二、怎么做技术选型2.1)需求分析技术选型应该以业务需求为基础,尽可能稳定,高效的支持业务发展。2.1.1)需求满足:尽力理解需求,以及未来需求可能的变化,即发展的方向。2.1.2)指标要求:理解需求的关键因素,性能、稳定性、存储周期、存储量等。

2022-05-03 20:33:03 1162

原创 【大道模式】策略模式二-Strategy Pattern 2

目录一、策略模式定义二、为什么需要策略模式三、如何实现策略模式3.1 策略的定义3.2 策略的创建3.3 策略的使用四、原有代码五、重构代码5.1 策略定义5.2 策略创建5.3 策略使用之前的一个策略模式简单描述了策略模式的基本含义,本文将在生产环境的一个代码重构中重温一下。一、策略模式定义策略模式即定义一族算法类,将每个算法分别封装起来,让它们可以相互提花。此模式可以使算法的变化独立于使用他们的业务代码。二、为什么需要策略模式

2022-03-15 09:58:10 449

原创 说说ThreadPoolExecutor饱和策略CallerRunsPolicy

之前在文章深入线程池ThreadPoolExecutor中聊到了线程池

2021-06-21 00:00:30 15309

原创 【稳定性】为什么监控和告警是必须的?

在工作中会有深度思考监控告警相关问题,我们都知道监控和告警的目的是要在事中及时发现问题并定位系统问题。我问过自己一个问题,为什么要加监控和告警?如果不加监控告警行不行?结论是:不行。一、定义首先来看一下为什么是监控告警。监控:通过数据量化服务器的各种行为。告警:当监控获取的数据发生异常并且达到告警阈值或者触发告警策略的时候,进行通知。二、能不能不加监控依然让系统稳定地提供服务?答案是可以,但是前提条件是:2.1 对系统存在的风险有全面100%的认知;2.2 ...

2021-02-08 12:10:50 1481

原创 【Dubbo】dubbo线程池被打爆事故及分析

记一次线上故障,dubbo线程池被打爆导致服务不可用,基于此再学习一下线程模型和优化。一、翻车现场 某个周末,收到报警异常报警,翻看日志如下:[2020-10-xx xx:xx:xx] api name = xxx, method = xxx, param = xxx,org.apache.dubbo.rpc.RpcException: fail to invode the method...Caused by: java.util.concurrent.Exe...

2021-01-10 12:34:33 1196

原创 【大道模式】享元模式-FlyWeight Pattern

一、什么是享元模式? 运用共享技术有效地支持大量细粒度的对象。二、为什么要用享元模式? 需要降低细粒度对象给系统带来的内存压力。三、如何实现享元模式? 对象池技术,用于减少创建对象的数量,以减少内存占用和提高性能,通过hashmap保存对象,代码模板:public class FlyWeight { private HashMap<String, Object> flyweight = new Hash...

2020-12-05 21:46:33 149

原创 【稳定性】混沌工程

1.什么是混沌工程?在可控的范围和环境下,通过注入故障,来验真系统的对于故障的容错手段,从而持续不断提升系统的稳定性和高可用性。2.为什么要混沌工程?发现系统弱点,来提升系统稳定性和可用性。3.如何实践混沌工程?以下原则描述了应用混沌工程的理想方式(源自 Netflix 在产生环境中对系统弹性测试的经验总结:http://principlesofchaos.org/): 原则 说明 建立一个围绕稳定状态行为的假说 ..

2020-10-25 18:20:22 263

原创 【稳定性】FMEA方法在系统可用性设计上的应用

最近在跟进软件系统的交付质量专项,需要解决的就是在软件交付之后出现故障过多的问题,这是一个较为宏观的问题,而有一个核心的点就在于系统可用性方案设计上的问题,设计上有了风险隐患点,测试上大概率也无法测试出风险隐患点(软件质量是设计出来的,不是测试出来的),那么上线之后就必然会出现问题,因此需要有一个方法来找到系统可用性设计上的风险隐患点,那么在系统设计的过程中尽量规避它们,同时能为测试用例提供明确的方向,这个方法就是FMEA。一、什么是FMEAFMEA,Failure mode and ...

2020-10-25 18:08:15 733 2

原创 【Spring】SpringBoot配置多Redis数据源

一、需求背景 最近在做项目的时候需要访问redis多数据源,做个记录。二、如何做的2.0 配置文件bootstrap.yml:spring: application: name: cloud-cros devtools: restart: #热部署生效 enabled: true #设置重启的目录 ...

2020-09-26 12:29:18 855

原创 【大道模式】外观模式-Facade Pattern

当你的系统需要分层设计 或者 需要在子系统和客户端之间建立一个高层接口使得子系统更容易复用时,就需要考虑使用外观模式了。基本介绍:1.外观模式(Facade),也叫"过程模式":外观模式为子系统中的一组接口提供一个一致(稳定)的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(复用)。2.外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节。3.当系统需要进行分层设计时,可以考虑Facade模式。...

2020-08-08 13:15:37 219

原创 【Redis】Redis最大连接数maxTotal设置过小的问题

最近由于不合理的配置了redis中的最大连接数导致了线上服务间歇性不可用的问题,问题无小事,稳定大于一切。一、结论 先直接说结论:并发量激增,redis最大连接数过小,导致获取redis连接超时,超时导致大量请求阻塞,从而导致客户端因超时主动关闭连接,服务端大量请求阻塞,无法关闭连接,慢慢积累出现close_wait,大量close_wait出现,旧连接不释放,新连接无法创建,导致没法对外提供服务。 方案:1)redis连接池要根据具体的业务量进行设置,太大连接数过多...

2020-06-27 18:16:22 18274

原创 金字塔结构式表达利器

众所周知,语言传递存在严重的损耗,同一个事情A,小明给小王表达,小王理解成B,小王给小红表达,小红理解成C。职场中,如何在有限时间内突出重点、思路清晰、层次分明的表达观点,一直是大家面临的挑战之一。在这里向大家介绍深得人心的金字塔结构式表达技巧,供大家参考。一、金字塔结构式表达的理念 "以听众为中心,让听众听懂"。这是沟通的本质,也就是所谓的"道",下面说的具体的方法都是所谓的"术"。沟通是否达到效果,不是讲的人说了算,而是听的人说了算。在每次表达中我们都需要秉承以...

2020-06-14 11:21:39 5530 1

原创 【大道模式】策略模式-Strategy Pattern

当你的代码中出现大量的if else的时候,是时候考虑一下策略模式了。基本介绍:1)策略模式中,定义算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。2)这算法体现了几个设计原则:第一、把变化的代码从不变的代码中分离出来;第二、针对接口编程而不是具体类(定义了策略接口);第三、多用组合/聚合,少用继承(客户通过组合方式使用策略)动机(Motivation):>在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将...

2020-05-31 19:29:58 428

原创 【Spring】Mybatis Chinese Character Empty Problem

在测试项目的过程中有中文条件查询,但是发现通过spring mybatis竟然查询不到结果,即结果为空,需要解决这个问题。先说一下这个问题的解法:1.在spring的数据库配置中需要使用utf8编码,即:useUnicode=true&characterEncoding=utf8jdbc.driver.default=com.mysql.jdbc.Driverjdbc.url.default=jdbc:mysql://xxx:3306/database?useUnicode=...

2020-05-28 20:51:09 192

原创 【大道模式】拦截过滤器模式-Intercepting Filter Pattern

最近在交接项目的过程中看到了拦截过滤器模式,用于在核心请求的"前后处理",比如在请求前对参数进行校验、做请求统计、数据埋点;在请求后记录返回结果、打印日志、处理日志(写入ES,HBase等),有点类似于aop的环绕around通知。核心组件:Filter(过滤器):在处理请求之前或者之后执行相应动作。Filter Chain(Filter Chain):一组过滤器的组合,按照添加的顺序依次执行。Target:目标处理对象Filter Manager:过滤管理器管理...

2020-05-23 19:18:40 331

原创 【Spring Cloud Feign】超时重试总结

最近在生产环境中出现配置了ribbon的重试参数,但是没有生效,表现就是下游服务上线的过程中,上游服务总是拿到超时降级的错误码,配置如下:hystrix: threadpool: group: coreSize: 20 maximumSize: 100 allowMaximumSizeToDivergeFromCoreSize: ...

2020-05-02 22:03:36 2497

原创 【Redis】高可用之复制

redis集群中的从服务器同步主服务器上的数据称之为:复制。一、旧版复制功能的实现(2.8以前)redis的复制功能分为同步(sync)和命令传播(command propagate)两个操作。>同步:将从服务器的数据库状态更新至主服务器当前所处的数据库状态。>命令传播:用于在主服务器的数据库状态被修改,导致主从服务器的数据库状态出现不一致时,让主从服...

2020-02-03 19:46:36 189

原创 【Spring Cloud Hystrix】【三】:资源隔离

Hystrix使用“舱壁模式”实现线程池的隔离,它会将每一个依赖服务创建一个独立的线程池,这样就算某个服务出现延迟过高的情况,也只是对该依赖服务的调用产生影响。 如HBASE Client超时机制优化一文的场景中提到:生产服务遇到过一个故障,大体来说就是hbase集群故障,在没有设置hbase客户端超时的情况下,导致大量线程阻塞,从而影响了tomcat对其他服务请求...

2020-01-07 23:19:42 590

原创 【Spring Cloud Hystrix】【二】:属性详解

在上一篇服务容错快速入门中定义了hystrix的配置参数,如下:hystrix: threadpool: testGroup: coreSize: 20 maximumSize: 100 allowMaximumSizeToDivergeFromCoreSize: true maxQueueSize: 200 ...

2020-01-07 22:24:32 423

原创 【Spring Cloud Hystrix】【一】:服务容错快速入门

一、Why服务容错 在微服务架构中,需要将系统拆分成多个服务单元,各单元的应用间通过服务注册与订阅的方式相互依赖。由于服务之间通过远程过程调用RPC的方式执行,就有可能因为网络原因或者依赖服务自身问题造成调用失败或延迟,而这些问题会直接导致调用方的对外服务也出现延迟,若此时调用方的请求不断增加,最后就会因等待出现故障的依赖方响应延迟造成任务积压,最终导致自身服务的瘫痪。 ...

2020-01-05 16:06:23 184

原创 【HBase学习之四】HBase Client超时机制优化

生产服务遇到过一个故障,大体来说就是hbase集群故障,在没有设置hbase客户端超时的情况下,导致大量线程阻塞,从而影响了tomcat对其他服务请求的正常响应(504网关超时,超时率30%),需要规避这个问题需要两个方面,1.设定客户端访问超时时间;2.服务资源隔离。本篇关注第一点。hbase.rpc.timeout:一次RPC请求的超时时间,如果某次RPC时间超过该值,客户端就会主...

2020-01-04 13:46:46 1429 1

原创 【JVM】OOMError之Unable to create new native thread

最近线上出现了一个OOM的问题,使得服务异常以至于不可用。一、现象 从现象来看就是请求服务全部失败,线程数激增,cpu和内存显示相对正常。查看error.log,都是"error.log:unable to create new native thread"错误:[ERROR] [org.springframework.boot.web.servlet.su...

2019-12-08 20:40:38 1291

原创 【Mysql】记一次limit优化

在实际生产场景中,遇到过需要分页读取的记录的问题,当时表在百万级别,当用limit查询几十万页(每页10条)的时候就已经很慢了。我们进行分析,当然分析的前提是对explain分析执行计划有所了解。表结构如下:CREATE TABLE `table_detail` ( `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COM...

2019-12-01 00:05:03 183

原创 【Mysql】Explain关键字分析SQL性能

在生产项目中,总有需要分析sql性能的时候,看看自己写的sql慢在哪里,那就需要用到explan关键字来进行分析,那什么是explain,下面就来分析一下。一、什么是explain? 使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MYSQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。它的语法就是:explain + sql...

2019-11-30 23:14:56 994

原创 深入线程池ThreadPoolExecutor

我们先从阿里编程手册里面关于并发编程的两点来说明。6.3:线程资源必须通过线程池创建,不允许在应用中自行显示创建线程。说明:使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源的不足的问题。如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者"过度切换"的问题。6.4:线程池不允许使用Executors创建,而是通过ThreadPool...

2019-08-18 17:48:39 495

原创 从CAS底层原理说到ABA问题

一、什么是CAS? CAS(Compare and sweep):比较并交换(compareAndSet),是解决多线程并行情况下使用锁造成性能损耗的一种机制。比较当前工作内存中的值和主内存中的值,如果相同则执行规定操作,否则继续比较知道主内存和工作内存中的值一致为止。CAS有3个操作数,内存值为V,旧的预期值为A,要修改的更新值为B。当且仅当预期值A和内存值V相同时,将内存值V修...

2019-07-30 23:03:57 514

原创 volatile语义及底层原理

当我们使用volatile关键字去修饰变量的时候,所以线程都会直接读取该变量并且不缓存它。这就确保了线程读取到的变量是同内存中是一致的。结合JMM的特性,volatile是一个最轻量级的同步机制,三大特点,1.保证主存可见性;2.不保证原子性;3.禁止指令重排序。一、可见性 可见性是指当一条线程修改了这个变量的值,新值对于其他线程来说是可以"立即"得知的...

2019-07-29 17:17:28 203

原创 Java Memory Model - Java内存模型

Java虚拟机规范定义了Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。JMM本身是一种抽象的概念并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态变量和构成数组对象的元素)的访问方式。一、主内存和工作内存 ...

2019-07-28 21:04:40 154

原创 【微服务稳定性之限流降级】【三】Sentinel简介和示例

Sentinel是面向分布式服务架构的轻量级流量控制框架,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。一、主要概念资源:它可以是Java应用程序中的任何内容,例如,由应用程序提供的服务,或者由应用程序调用的其他应用提供的服务,甚至可以是一段代码。只要通过Sentinel API定义的代码,就是资源,能够被Sentinel保护起来。...

2019-07-13 20:42:21 653

原创 【微服务稳定性之限流降级】【二】RateLimiter实战

RateLimiter是guava中concurrent包下的一个限流工具类,使用了令牌桶算法。下面简单的介绍一下。一、RateLimiter API 修饰符 方法 描述 double acquire() 从RateLimiter获取一个许可,该方法会被阻塞知道...

2019-07-13 14:28:27 1086

原创 【微服务稳定性之限流降级】【一】限流概念和算法

微服务稳定性稳定性三大杀器,缓存,队列,限流降级。这一部分讲一下限流降级。每个系统都有自己的最大服务能力,即在达到某个临界点之前,系统都可以正常提供服务。为了保证系统在面临瞬间的流量时仍然可以对外提供服务,我们就需要使用限流技术。下面就讲一讲笔者认为的降级和熔断的概念。限流:1)服务的入口的限流,在流量激增的情况下对流量进行控制;2)当然还有一个情况就是,服务A在调用B,下游服务...

2019-07-13 12:10:37 925

原创 【Spring Cloud Eureka】【二】:Eureka进阶

一、基础架构图 registry:注册;renew:续约;cancel:下线。二、服务提供者Provider2.1 服务注册 Provider在启动的时候会通过发送REST请求的方式将自己注册到Eureka Server上,同时带上了自身服务的一些元数据信息。Eureka Server接收到请求之后,将元数据信息存储在一个Map<K1, ...

2019-07-07 11:39:51 246

空空如也

空空如也

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

TA关注的人

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