自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (9)
  • 问答 (1)
  • 收藏
  • 关注

原创 Spring Security,没有看起来那么复杂(附源码)

权限管理是每个项目必备的功能,只是各自要求的复杂程度不同,简单的项目可能一个 Filter 或 Interceptor 就解决了,复杂一点的就可能会引入安全框架,如 Shiro, Spring Security 等。其中 Spring Security 因其涉及的流程、类过多,看起来比较复杂难懂而被诟病。但如果能捋清其中的关键环节、关键类,Spring Security 其实也没有传说中那么复杂。本文结合脚手架框架的权限管理实现(jboost-auth 模块,源码获取见文末),对 Spring Secur

2021-01-27 12:18:37 286 1

原创 像程序员一样思考——提高解决问题的能力

在以前的文章中,曾经提过“技术人员的价值,不在于你能写出多么优美的代码,也不在于你能设计出一个多么大而全的高屋建瓴的架构,而在于你实实在在的解决问题的能力,在于你使用技术手段服务于业务的能力”。最近一段时间,因工作中遇到一些现象,让我重又想起这句话,并且试图思考如何来提高解决问题的能力,有没有一种方法论的手段或者技术性的框架来实践?先罗列一两个遇到的现象:某同事汇报,测试提了一个Bug,当某个用户绑定的卡信息超过50个的时候,后台显示数据就会出现混乱,问能不能限制绑定的卡不超过50个。我问:数据显示

2020-11-20 11:30:18 425 1

原创 Kubernetes笔记(六):了解控制器 —— Deployment

Pod(容器组)是 Kubernetes 中最小的调度单元,可以通过 yaml 定义文件直接创建一个 Pod。但 Pod 本身并不具备自我恢复(self-healing)功能。如果一个 Pod 所在的节点出现故障,或者调度程序自身出现问题,以及节点资源不够或节点进入维护而驱逐 Pod 时,Pod 将被删除,且不能自我恢复。因此,Kubernetes 中我们一般不直接创建 Pod, 而是通过 Controller(控制器)来管理 Pod。ControllerController 能为 Pod 提供如

2020-11-19 08:48:09 1718

原创 Kubernetes笔记(五):了解Pod(容器组)

Kubernetes 中, 容器总是以 Pod(容器组)的方式进行调度与运行。因此对 Pod 的理解与掌握是学习 Kubernetes 的基础。理解 PodPod(容器组)是 Kubernetes 中最小的调度单元,每一个Pod都是某个应用程序的一个运行实例。以前我们的 Web 应用都是以 Tomcat 等 Web 容器进程的形式运行在操作系统中,在 Kubernetes 中,我们需要将 Web 应用打成镜像,以容器的方式运行在 Pod 中。Kubernetes 不会直接管理容器,而是通过 Pod 来

2020-11-17 14:36:44 752

原创 在 Kubernetes Ingress 中支持 Websocket/Socket 服务

Kubernetes Ingress 可将集群内部的 Service 通过 HTTP/HTTPS 的方式暴露供外部访问,并通过路径匹配规则定义服务的路由。但是 Ingress 对 TCP/UDP 的服务却支持的不那么好。如果我们服务中有使用 Websocket 或 Socket, 需要暴露给外部访问,在 Kubernetes 中该如何配置呢?大致有两种方式[见参考文档1]:使用 NodePort, 使用节点 IP 与 NodePort 暴露的端口访问使用 ClusterIp + Ingress +

2020-11-17 14:23:13 2049

原创 浏览器缓存常用策略及Vue应用的Nginx缓存设置

最近一次移动端Vue应用的上线,导致某些用户使用某些功能时出现问题,经主动清空缓存后恢复。有时候清空微信应用的存储空间缓存仍不能解决问题,此时安卓机可借助微信TBS调试工具 http://debugx5.qq.com (微信中打开页面,勾选最下面四个选项清除缓存),但该工具目前只支持安卓手机,苹果机就比较麻烦了。为了找到问题的本质,从根本上避免问题,最近浏览了一些文章,其中有一篇对浏览器缓存的分析及在Nginx中对应的处理策略总结的比较好,这里分享给大家。原文标题:http常用缓存策略及vue-cli单

2020-08-08 16:31:57 4383 1

原创 一个轻量级的基于RateLimiter的分布式限流实现

上篇文章(限流算法与Guava RateLimiter解析)对常用的限流算法及Google Guava基于令牌桶算法的实现RateLimiter进行了介绍。RateLimiter通过线程锁控制同步,只适用于单机应用,在分布式环境下,虽然有像阿里Sentinel的限流开源框架,但对于一些小型应用来说未免过重,但限流的需求在小型项目中也是存在的,比如获取手机验证码的控制,对资源消耗较大操作的访问频率控制等。本文介绍最近写的一个基于RateLimiter,适用于分布式环境下的限流实现,并使用spring-boot

2020-07-31 11:57:59 643

原创 常用限流算法与Guava RateLimiter解析

在分布式系统中,应对高并发访问时,缓存、限流、降级是保护系统正常运行的常用方法。当请求量突发暴涨时,如果不加以限制访问,则可能导致整个系统崩溃,服务不可用。同时有一些业务场景,比如短信验证码,或者其它第三方API调用,也需要提供必要的访问限制支持。还有一些资源消耗过大的请求,比如数据导出等(参考 记一次线上Java服务CPU 100%处理过程 ),也有限制访问频率的需求。常见的限流算法有令牌桶算法,漏桶算法,与计数器算法。本文主要对三个算法的基本原理及Google Guava包中令牌桶算法的实现RateL

2020-07-22 14:49:41 784

原创 基于Redis分布式锁的正确打开方式

分布式锁是在分布式环境下(多个JVM进程)控制多个客户端对某一资源的同步访问的一种实现,与之相对应的是线程锁,线程锁控制的是同一个JVM进程内多个线程之间的同步。分布式锁的一般实现方法是在应用服务器之外通过一个共享的存储服务器存储锁资源,同一时刻只有一个客户端能占有锁资源来完成。通常有基于Zookeeper,Redis,或数据库三种实现形式。本文介绍基于Redis的实现方案。要求基于Redis实现分布式锁需要满足如下几点要求:在分布式集群中,被分布式锁控制的方法或代码段同一时刻只能被一个客户端上面的

2020-07-16 09:32:41 610

原创 nginx反向代理导致session失效的问题处理

一同事求援:后台系统的登录成功了,但不能成功登进系统,仍然跳转到登录页,但同一套代码另一个环境却没有问题。背景经了解,他对同一个项目使用tomcat部署了两个环境,一个在开发服务器上,一个在他本机,两个环境代码配置完全相同。两边通过同一个nginx进行反向代理,nginx配置大致如下,location /health/ { proxy_pass http://192.168.40.159:8081/health/; #无问题的配置 }location /health-dev/ {

2020-07-13 10:54:33 1614

原创 记一次线上服务CPU 100%的处理过程

告警正在开会,突然钉钉告警声响个不停,同时市场人员反馈客户在投诉系统登不进了,报504错误。查看钉钉上的告警信息,几台业务服务器节点全部报CPU超过告警阈值,达100%。赶紧从会上下来,SSH登录服务器,使用 top 命令查看,几个Java进程CPU占用达到180%,190%,这几个Java进程对应同一个业务服务的几个Pod(或容器)。定位使用 docker stats 命令查看本节点容器资源使用情况,对占用CPU很高的容器使用 docker exec -it <容器ID> bash

2020-07-10 13:57:41 844

原创 Kubernetes笔记(四):详解Namespace与资源限制ResourceQuota,LimitRange

前面我们对K8s的基本组件与概念有了个大致的印象,并且基于K8s实现了一个初步的CI/CD流程,但对里面涉及的各个对象(如Namespace, Pod, Deployment, Service, Ingress, PVC等)及各对象的管理可能还缺乏深入的理解与实践,接下来的文章就让我们一起深入K8s的各组件内部来一探究竟吧。下图是基于个人的理解梳理的一个K8s结构图,示例了各个组件(只包含了主要组件)如何协同。后续几篇文章围绕该图涉及组件进行整理介绍,本文主要探究Namespace及与Namespace

2020-06-03 10:31:05 3825

原创 面试官:请写一个你认为比较“完美”的单例

单例模式是保证一个类的实例有且只有一个,在需要控制资源(如数据库连接池),或资源共享(如有状态的工具类)的场景中比较适用。如果让我们写一个单例实现,估计绝大部分人都觉得自己没问题,但如果需要实现一个比较完美的单例,可能并没有你想象中简单。本文以主人公小雨的一次面试为背景,循序渐进地讨论如何实现一个较为“完美”的单例。本文人物与场景皆为虚构,如有雷同,纯属捏造。小雨计算机专业毕业三年,对设计模式略有涉猎,能写一些简单的实现,掌握一些基本的JVM知识。在某次面试中,面试官要求现场写代码:请写一个你认为比较“完

2020-05-15 09:11:39 1310 7

原创 Kubernetes笔记(三):Gitlab+Jenkins Pipeline+Docker+k8s+Helm自动化部署实践(干货分享!)

通过前面两篇文章,我们已经有了一个“嗷嗷待哺”的K8s集群环境,也对相关的概念与组件有了一个基本了解(前期对概念有个印象即可,因为只有实践了才能对其有深入理解,所谓“纸上得来终觉浅,绝知此事要躬行”),本文从实践角度介绍如何结合我们常用的Gitlab与Jenkins,通过K8s来实现项目的自动化部署,示例将包括基于SpringBoot的服务端项目与基于Vue.js的Web项目。本文涉及到的工具与技术包括:Gitlab —— 常用的源代码管理系统Jenkins, Jenkins Pipeline ——

2020-05-12 09:39:35 2925

原创 Kubernetes笔记(二):了解k8s的基本组件与概念

前文 Kubernetes笔记(一):十分钟部署一套K8s环境 介绍了如何快速搭建一个k8s系统。为了继续使用k8s来部署我们的应用,需要先对k8s中的一些基本组件与概念有个了解。Kubernetes是什么Kubernetes是Google于2014年基于其内部Brog系统开源的一个容器编排管理系统,可使用声明式的配置(以yaml文件的形式)自动地执行容器化应用程序的管理,包括部署、伸缩、负载...

2020-05-08 11:07:21 817

原创 Kubernetes笔记(一):十分钟部署一套K8s环境

Kubernetes是Goole开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理 —— 百度百科。接触K8s也有半年多了,也基于阿里云平台搭建了包含多级服务、目前运行较为稳定的K8s集群(感兴趣的可参考 k8s云集群混搭模式,可能帮你节省50%以上的服务成本, k8s云集群混搭模式落地分享),但一直没来得及对其进行系统的学习,本系列文章还像以前Docker系列一样,以笔记的...

2020-04-28 11:38:32 1436

原创 一文掌握Ansible基本用法

Ansible是当下比较流行的自动化运维工具,可通过SSH协议对远程服务器进行集中化的配置管理、应用部署等,常结合Jenkins来实现自动化部署。除了Ansible,还有像SaltStack、Fabric(曾经管理100多台服务器上的应用时也曾受益于它)、Puppet等自动化工具。相比之下,Ansible最大的优势就是无需在被管理主机端部署任何客户端代理程序,通过SSH通道就可以进行远程命令的执...

2020-04-23 11:13:03 895

原创 Docker笔记(十三):容器日志采集实践

日志是服务运行过程中的一个关键环节,借助日志,我们可以排查定位问题,也可以借助集中化的日志管理平台(如ELK)来做一些必要的数据统计分析。在Docker环境中,日志的采集比传统环境更为复杂,因此了解Docker日志的管理机制,及基于此熟悉日志采集的最佳实践对于开发运维人员来说也是避不开的一个知识点。那就开始吧。Docker容器的日志管理机制1. Docker Daemon日志Docker D...

2020-04-03 09:19:48 2087

原创 Linux开机自启动配置汇总

很多时候,我们需要将一些服务在Linux系统启动时即自动运行,省得每次都要去手动启动一遍,如Redis, MySQL, Nginx等。本文对CentOS与Ubuntu下开机自启动的配置方法进行整理,供参考查阅。CentOS7的开机自启动配置一. rc.local方式rc.local是CentOS以前版本的方式,在CentOS7中仍然以兼容的形式存在,虽仍可用,但不推荐(推荐使用systemd...

2020-03-31 10:08:47 1422

原创 Spring Boot(十三):整合Redis哨兵,集群模式实践

前面的两篇文章(Redis的持久化方案, 一文掌握Redis的三种集群方案)分别介绍了Redis的持久化与集群方案 —— 包括主从复制模式、哨兵模式、Cluster模式,其中主从复制模式由于不能自动做故障转移,当节点出现故障时需要人为干预,不满足生产环境的高可用需求,所以在生产环境一般使用哨兵模式或Cluster模式。那么在Spring Boot项目中,如何访问这两种模式的Redis集群,可能遇到...

2020-03-26 08:53:46 795

原创 一文掌握Redis的三种集群方案

在开发测试环境中,我们一般搭建Redis的单实例来应对开发测试需求,但是在生产环境,如果对可用性、可靠性要求较高,则需要引入Redis的集群方案。虽然现在各大云平台有提供缓存服务可以直接使用,但了解一下其背后的实现与原理总还是有些必要(比如面试), 本文就一起来学习一下Redis的几种集群方案。Redis支持三种集群方案主从复制模式Sentinel(哨兵)模式Cluster模式主从复...

2020-03-16 09:31:52 1456

原创 Redis的持久化方案

Redis支持RDB与AOF两种持久化机制,持久化可以避免因进程异常退出或down机导致的数据丢失问题,在下次重启时能利用之前的持久化文件实现数据恢复。RDB持久化RDB持久化即通过创建快照(压缩的二进制文件)的方式进行持久化,保存某个时间点的全量数据。RDB持久化是Redis默认的持久化方式。RDB持久化的触发包括手动触发与自动触发两种方式。手动触发save, 在命令行执行save命令...

2020-03-16 09:15:46 1071

原创 Spring Cloud(八):使用Spring Cloud Bus来实现配置动态更新

使用Spring Cloud Config我们能实现服务配置的集中化管理,在服务启动时从Config Server获取需要的配置属性。但如果在服务运行过程中,我们需要将某个配置属性进行修改,比如将验证码的失效时间从五分钟调整为十分钟,如何将这个更新在服务端不重启服务就能动态生效,是本文讨论的内容。Spring Cloud BusSpring Cloud Bus可以理解为Spring Cloud...

2020-02-27 13:34:03 881

原创 Spring Cloud(七):服务网关zuul过滤器

上文介绍了Zuul的基本使用与路由功能,本文接着介绍Zuul的核心概念 —— Zuul过滤器(filter)。Zuul的功能基本通过Zuul过滤器来实现(类比于Struts的拦截器,只是Struts拦截器用到责任链模式,Zuul则是通过FilterProcessor来控制执行),在不同的阶段,通过不同类型的过滤器来实现相应的功能。Zuul过滤器过滤器类型zuul的过滤器根据对HTTP请求...

2020-02-21 12:21:06 905

原创 Spring Cloud(六):服务网关zuul

通过前面几篇文章的介绍,Spring Cloud微服务架构可通过Eureka实现服务注册与发现,通过Ribbon或Feign来实现服务间的负载均衡调用,通过Hystrix来为服务调用提供服务降级、熔断机制避免雪崩效应,通过Spring Cloud Config实现服务配置的集中化管理。微服务架构内部管理的基本组件差不多都已涵盖了,但是我们的服务最终是需要提供给客户端访问的,客户端如何来访问这些微服...

2020-02-18 15:22:19 792

原创 mybatis缓存,从一个“灵异”事件说起

刚准备下班走人,被一开发同事叫住,让帮看一个比较奇怪的问题:Mybatis同一个Mapper接口的查询方法,第一次返回与第二次返回结果不一样,百思不得其解!问题Talk is cheap. Show me the code. 该问题涉及的主要代码实现包括mapper接口定义public interface GoodsTrackMapper extends BaseMapper&...

2020-02-13 10:14:50 801

原创 Docker笔记(三):Docker安装与配置

Docker分为Docker CE社区免费版与Docker EE企业收费版。Docker EE主要是在安全性及镜像、容器高级管理方面提供了一些额外的支持。对于中小型企业、团队或个人来说,用Docker CE即可。1. 安装Docker CEDocker CE有三个更新渠道: Stable:提供最新的GA(General Availability)稳定版,每六个月一版,如 18.09 ...

2019-09-07 12:57:08 322

原创 Docker笔记(二):Docker管理的对象

在Docker笔记(一):什么是Docker中,我们提到了Docker管理的对象包含镜像、容器、网络、数据卷等,本文就来介绍下这些对象及用途。1. 镜像所谓镜像,是一个静态的概念。它对我们期望干的事情做了一些定义,比如要运行什么程序,需要哪些依赖,需要什么样的配置,需要开放哪个网络端口等等。Docker的镜像是一个特殊的文件系统,提供了运行时需要的程序、库、资源、配置等文件,还包...

2019-09-06 11:35:12 274

原创 Docker笔记(一):什么是Docker

1. 前言接触Docker也有两年多了,断断续续玩过一些应用场景,如安装一些常用工具服务,部署业务项目,基于gitlab+jenkins pipeline+docker的CI/CD实现等。了解其基本知识与操作,但不能说深度掌握,故借此系列进行梳理与学习,也希望对有意学习Docker的人提供参考。2. Docker简介Docker最初是dotCloud公司(后来也改名为Docker)的一...

2019-09-05 17:22:03 115

原创 线程池的基本原理,看完就懂了

原文地址:http://blog.jboost.cn/threadpool.html本文内容是基于研发部门内部的分享整理,记录下来供学习或回顾。1. 为什么要用线程池 降低资源消耗。通过重复利用已创建的线程降低线程创建、销毁线程造成的消耗。 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制...

2019-08-14 10:55:17 161

Google Android开发入门与实战 pdf与源码 之源码

Google Android开发入门与实战 pdf 与源码 之源码

2011-06-27

Flex+Spring+Hibernate整合

整合Flex Spring Hibernate开发。网上资源,非原创。拿来共享,希望对大家有所帮助。

2010-01-16

C#写的计算机性能监控程序

自己写的用于监控CPU、内存、网络使用情况,以及进程使用CPU、内存情况的控制台程序。对需要进行服务器端性能监控的有一定参考价值。

2009-11-04

Struts2+Spring2+Hibernate3 web应用示例

用Struts2+Spring2+Hibernate3的一个应用实例,包括源代码

2009-10-28

设计模式精解-GoF23种设计模式解析

设计模式精解-GoF23种设计模式解析,代码解析,pdf文档

2009-10-07

ejb3.0实例教程及源码

最新EJB3.0实例教程 企业应用开发核心技术 附源码

2009-05-29

严蔚敏版数据结构C、VC源代码.rar

严蔚敏版数据结构的C、VC源代码。 内含严蔚敏版数据结构的所有C语言源码,加MFC的最短路径实现

2009-03-11

精通Web.2.0電子教程

PPT格式,内容简洁易懂,适用于初学者。

2009-03-01

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

TA关注的人

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