自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

喜码拉雅

追求卓越,成功自然到来

  • 博客(46)
  • 资源 (1)
  • 收藏
  • 关注

原创 灰度上线实践之zuul网关流量分配

最近手头的项目进行了重构,改动比较大,直接上线的话风险较大,于是我采用了灰度上线的方式来将风险最小化。我们系统包括自己的门户页面,也作为中台来给各个业务方调用,我们灰度上线的话,要兼容各个业务系统。业务系统调用我们接口是前缀是特殊的,可以和我们的门户调用区分开,且业务系统调用所有接口都是有签名的,每个接口的参数格式都是一样的,会含有每个业务系统的appId之前流量是经过nginx直接打到我们的服务商,这次在nginx和我们系统之间添加了网关,作为我们灰度的核心--流量控制关于zuul网关可以

2021-04-26 22:07:42 964

原创 服务端自我保护之超时处理

该文章适用于比较重的操作的服务端开发人员。我们经常会遇到远程调用超时的情况,一般这种情况客户端会有一个超时时间,超过该时间,那客户端抛异常,客户端可以进行重试等操作,那此时此刻,服务端呢?最近遇到了一个线上问题,我的一个服务是文件处理,所有的接口都会进行文件转换相关的操作(word转pdf、word转html等操作),文件操作是比较重的操作,遇到比较大的文件,服务可能要处理很长很长时间。某用户上传了一个不算大的excel文件,只有437.64KB,但是这个文件有一百多万行,这个文件请求到服务端,服务

2021-04-25 20:42:12 718 1

转载 Spring Boot 项目启动时初始化资源

在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等。今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资源操作。这个神器就是CommandLineRunner,CommandLineRunner接口的Component会在所有Spring Beans都初始化之后,SpringApplic...

2019-09-27 14:13:14 170

原创 mac安装kafka及常用命令

安装kafka依赖Java,因此要确保先安装好java// mac 环境使用brew直接安装kafkabrew install kafka // 卸载brew uninstall kafka启动// 启动brew services start kafkabrew services start zookeeper// 重启brew services restar...

2019-06-22 17:29:54 1698 1

原创 java stream排序

1. 排序apples.stream().sorted(Comparator.comparing(Apple::getWeight))2. 逆序如果你想要对苹果按重量递减排序怎么办?用不着去建立另一个Comparator的实例。接口 有一个默认方法reversed可以使给定的比较器逆序。因此仍然用开始的那个比较器,只要修改 一下前一个例子就可以对苹果按重量递减排序:apples...

2019-04-23 17:28:25 3517

原创 java8 stream排序空字段排在前面或后面

直接粗暴sorted会NPE,这种写法可以避免list.stream().sorted(Comparator.comparing(l -> l.getCreateTime(), Comparator.nullsFirst(Date::compareTo))).collect(toList());toOrderList.stream().sorted(Comparator.compar...

2019-03-07 18:23:25 8542 1

原创 springboot @async 无效

最近想做一个异步的功能,但是在方法上面加了@Async并没有什么卵用,查了资料才知道,因此在这里记录一下在@SpringBootApplication启动类 添加注解@EnableAsync 异步方法使用注解@Async ,返回值为void或者Future 切记一点 ,异步方法和调用方法一定要**** 写在不同的类中 ****,如果写在一个类中, 是没有效果的...

2019-03-07 11:48:50 385

原创 java打印(调用驱动实现)

@Override public void print(byte[] file, int printNum, String printerName) { HashPrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); pras.add(new Copies(printNum))...

2019-02-27 18:04:39 3594 3

原创 浅谈性能优化

参考《大型网站技术架构》,其中包含一些个人理解,如有错误或说的不清楚的地方,请一定指出,谢谢。这篇文章讲的比较浅,如果有更深入的需要,欢迎留言或是查阅资料。在谈性能优化之前,我们先来看一看什么是性能。网站性能是客观的指标,可以具体体现到响应时间、吞吐量等技术指标;同时也是主观的感受,而感受是一种与具体参与者相关的东西,用户间的感受、用户与工程师间的感受都是不同的。用户感受到的响应时...

2018-11-18 18:15:22 172

原创 java POI合并两个word文档

有需要的可以将主函数中写死的地方改为一个List。import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import org.apache.poi.openxml4j.opc.OPCPackage;i...

2018-11-01 17:20:43 5089 1

原创 pdf及word右上角添加图片(Java实现)

以下代码,如有问题,请大家不吝指出,如有更优实现方案,欢迎一起讨论。最近在做一个需求:在pdf和word右上角添加一个二维码其中,pdf可以灵活实现二维码的位置,但是word由于我是在页眉处添加的图片,因此我的方法只能在页眉处添加图片。首先定义一个接口(先抛出Exception,还没优化)public interface DocAddQRCodeI { int QRCo...

2018-10-25 20:24:40 1729 6

原创 网站架构瓶颈解决方案(发展历程)

本篇文章参考《大型网站技术架构》,夹杂了一些个人理解,本人渣渣,如有不合理或不全面之处,还请各位指出,不胜感激。首先,个人认为,网站的架构发展还是根据自家的瓶颈来改进演变,并无“一种架构演变方式打遍天下”一说,首先要找到自家网站的瓶颈,然后根据瓶颈来设计对策方案为好。下面所述为演变方案之一:1.初始阶段(单机架构)有的网站(如后台管理系统),性质就决定了并发量,还有的2C的网站在初...

2018-10-08 20:21:56 303

原创 什么是HTTPS

首先,在参考《Tomcat内核设计剖析》、《大型网站技术架构》的基础上加了一些个人理解,如有错误或者不全面的地方,还请大家指出。在知道什么是HTTPS之前,我们首先要知道一下什么是HTTP,HTTP是超文本传输协议的简称,工作在应用层,传输层基于TCP。HTTP协议是用于从WEB服务器传输超文本到本地浏览器的协议。HTTPS是HTTP的安全版,本质上是在传输层(TCP)与应用层(HTT...

2018-10-05 13:46:05 1755

原创 Java调试技巧:如何得到方法调用栈

StackTraceElement stack[] = Thread.currentThread().getStackTrace();循环打印出来看或者打断点看都可以。

2018-09-19 18:06:31 3936

原创 从BIO到NIO

我们知道,Java服务端编程,很重要的一块就是IO,而我们的Java IO,经历了由BIO到NIO再到AIO的过程。首先,我们来看一下什么是BIO:1.普通BIO我们刚开始学Java Socket的时候,可能都写过这么一段代码: ServerSocket serverSocket = new ServerSocket(8000); while (true){ ...

2018-09-17 18:03:49 136

原创 几种负载均衡算法简介

首先我们来看一下什么是负载均衡?随着业务的发展,单台web服务器已经承载不了系统现在流量的时候,我们就需要部署多台服务器,将流量分散在不同的服务器上,这样可以提高系统的可用性。我们可以对web请求进行负载均衡,很大的一部分原因是由于HTTP协议的无状态性,同样的请求响应是一样的,所以哪个服务器处理都可以(先不考虑session,考虑session的情况,参见我的另一篇博客)好了,废话不...

2018-09-15 17:00:51 4171

原创 Java实现简易的缓存

之前看redis的书,书上罗列源码的时候我总是在想,redis为什么不用Java实现!!今天自己用Java写了一个简易的缓存,发现,redis不用Java实现可能是正确的:C语言可以自行回收内存,而Java不可以(我水平可能没达到,还没有自己回收过某个对象的内存),这样就导致了你的缓存中的对象有可能都过期了,你只是把这些过期对象的引用置空,但是什么时候回收这些内存,不是我们说了算的。好,废...

2018-09-01 09:03:30 328

原创 NIO学习笔记一之Buffer

参考:http://ifeve.com/buffers/有一些个人理解,大家辩证地看,有问题的地方,还请大家指出。Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。1.Buf...

2018-08-24 14:00:10 208

原创 设计模式之模板方法

个人理解,如有错误,还请大家指出。你开了一家饮料店,出售茶和咖啡。一个顾客走进了店里,要了一杯茶。泡茶需要四个步骤:烧水、泡茶叶、将茶倒入杯中、加一滴柠檬汁你开始泡茶:public class Tea { public void allStepToMakeTea() { boilWater(); makeTea(); p...

2018-08-19 09:57:12 185

原创 JVM组成部分

JVM基本上由三部分组成:1.类加载器:在JVM启动时以及程序运行时将需要加载的class文件加载到JVM中2.执行引擎:负责执行class文件中包含的字节码指令,相当于物理机器上的CPU3.运行时数据区:将划分给Java程序的内存划分成几个区来模拟物理机器上的存储、记录和调度功能...

2018-08-17 19:17:23 1309

原创 序列化注意事项

参考《深入理解Java web 技术内幕》1.当父类实现Serializable接口时,所有子类都可以被序列化父类代码:import java.io.Serializable;public class SerialFather implements Serializable { private static final long serialVersionUID = -...

2018-08-17 14:35:31 323

原创 EXPLAIN查看SQL执行计划

参考:《MySQL王者晋级之路》如有错误的地方,请大家一定不吝指出,不胜感激。还有,不够全面,以后随着理解的深入我会不断加内容的。我们写完一个sql语句,为了让它高性能地执行,一定要explain一下,查看一下它的执行计划。查看心法:1.首先从查询类型type列开始查看,如果出现all关键字,那么不用继续看了,全表扫描了2.查看key列,看是否使用了索引,null代表没有使...

2018-08-15 17:16:03 8038

原创 面向对象设计原则

先占个坑,一边学习一边更新。1.依赖倒置原则:要依赖抽象,不要依赖具体类。举个例子吧:假如我们要设计一个购物车,购物车用来装各种水果(苹果、香蕉等)那么如果不依赖抽象,我们的代码看起来就是这个样子的:苹果类:public class Apple { private int price; public String getName() { ...

2018-08-14 20:19:20 89

原创 jdk安装不当-找不到或无法加载主类 com.sun.tools.javac.Main

情景:电脑上之前安装了jdk1.8,今天又安装了jdk1.7,配置idea用jdk1.7运行代码,配置完毕,点击运行,报错:Error:java: System Java Compiler was not found in classpath:java.lang.ClassNotFoundException: com.sun.tools.javac.api.JavacTool at ja...

2018-08-08 09:17:12 5643

原创 负载均衡的几种手段

个人理解,如有错误,请指出,谢谢大家。在开始正题之前,首先我们来看一下什么是负载均衡?负载均衡:随着网站的流量越来越大,单台WEB服务器已经承载不了负载压力,那么我们就需要再加一台(或多台)服务器来分担原有服务器的访问(可能还有存储)压力,通过负载均衡服务器,可以将来自用户浏览器的访问请求分发到WEB服务器集群中的任何一台服务器上,使服务器的负载压力不再成为网站瓶颈。那么,可以通过什么...

2018-08-03 23:36:07 2307

原创 设计模式之装饰者模式

个人理解,如有错误,请大家指正,谢谢。什么是装饰者模式?定义:装饰着模式动态地将责任附加到对象上,若要扩展功能,装饰着提供了比继承更有弹性的替代方案。怎么理解呢?比如说,我们想建立一个洋娃娃类,娃娃可以穿衣服、裤子、裙子、以及同时穿裤子和衣服......有几种实现方案:version1:娃娃作为父类,芭比娃娃作为子类,芭比娃娃的子类有:穿衣服的芭比娃娃、穿裤子的芭比娃娃、穿...

2018-07-26 17:54:31 208

原创 设计模式之观察者模式

个人理解,如有错误,请大家指出,感谢!1.什么是观察者模式?观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。比如说,我们要设计一个气象站的显示牌,当气温、湿度等改变了,就更新显示牌。一种做法是,所有显示牌轮询气象数据,当气象数据与上次轮询得到的数据不一致时,就更新显示牌,这是一种很糟糕的做法,浪费了我们的资源(至少浪费了CPU...

2018-07-25 19:30:12 99

原创 设计模式之策略模式

同样地,个人理解,如有错误或说的不明白的地方,请一定不吝指出,不胜感激。首先我们明确一下概念,然后会列一个例子;如果概念不明白的同学可以先看例子,然后回味概念。1.概念策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。2.例子产品经理安排大白设计一个游戏,这个游戏包括如下角色:国王、王后、巨怪以及骑士。每个人都有自己的武器,国王...

2018-07-24 19:43:40 149

原创 JVM类加载机制

参考《深入理解Java虚拟机》,周志明著。个人理解,如有错误,还望大家指出,不胜感激。在介绍类加载之前,我们可以先看一下Java程序的执行过程:我们编写的.java代码,首先经javac编译后变为.class文件存放在磁盘上,然后经过类加载器进入运行时数据区(当然实际上不拘泥于从磁盘上拿.class文件进行加载),最后被传入执行引擎进行执行。虚拟机的类加载过程包括 加载、验证、准备...

2018-07-21 21:41:07 108

原创 ubuntu源码方式安装redis

1.在官网下载redis压缩包,我下载的是redis-4.0.10版本2.下载好后,解压tar -zxvf redis-4.0.10.tar.gz3.解压完毕,进入redis目录,执行make进行编译make4.编译完毕,可以通过make test测试一下编译状态make test5.最后通过make install完成安装make installOK!...

2018-07-19 18:38:20 740

原创 设计模式之正确实现单例模式

单例模式是非常好理解的一个类,它的设计目标也非常简单:保持一个类仅有一个实例。1.最普通的单例模式(不完美)下面我们实现一个最简单的单例模式:public class Singleton { public static Singleton instance = new Singleton(); private Singleton(){} public stat...

2018-07-13 21:28:31 140

原创 设计模式之抽象工厂

之前我们有提到,简单工厂存在工厂间耦合性太强的问题;工厂方法存在客户端代码复杂的问题。这两种设计模式都不够完美,因此出现了我们今天要介绍的抽象工厂设计模式。好了,下面我们来写代码体验一下抽象工厂:还是用之前我们用的面包类作为例子:public interface Bread { void eat();}//此处的DanXiang为面包品牌public class D...

2018-07-13 14:22:55 114

原创 设计模式之工厂方法

上篇我们提到了为了更好地解耦,我们引入了简单工厂设计模式。但是简单工厂模式还存在问题,就是一个工厂不是万能的,我们不能要求一个工厂既生产这个,又生产那个。为解决这个问题,我们来学习一下工厂方法设计模式。简单地说,工厂方法就是把生产不同品牌的工厂分离开来,一个工厂专注于生产一个品牌,生活化些,就是我们不能要求一个鞋厂既生产耐克,又生产阿迪达斯,耐克和阿迪达斯应该是两个分开的工厂。好的,下面我们来写代...

2018-07-13 13:35:48 164

原创 设计模式之简单工厂

在介绍工厂模式之前,首先我们要知道,为什么要使用工厂模式?比如说消费者要买一个面包,消费者只关心面包好不好吃、日期新不新鲜等等,至于面包的生产工艺、原材料等,消费者并不关心。简而言之,消费者关注的是面包本身,并不关心面包的生产过程。于是,我们可以将生产面包和消费面包分离开来,只提供给消费者得到面包的接口,这样,最大程度地实现了解耦。好了,下面我们来实现一个简单工厂的例子,就拿我们消费者买面包的例子...

2018-07-13 12:18:06 114

原创 synchronized原理分析

在Java中,我们最常用的同步手段就是synchronized关键字了,下面我们来分析一下它的原理。我们来看一下下面的代码,这是一段很简单的自增代码: public void inc(){ i++; }经javac编译后: 0: getstatic #2 // Field i:I 3: iconst_1 ...

2018-07-06 13:13:13 105

原创 TCP三次握手、四次挥手的原因

大家都知道,TCP建立连接之前首先要进行三次握手,那么TCP为什么是三次握手,而不是二次、四次握手呢?我们先看一下三次握手:至此,通信双方都能听到对方说话,连接建立成功。如果是两次握手:如果是四次握手的话:...

2018-07-04 18:05:59 178

原创 线程的生命周期状态

在Java语言中,一个线程从其重建、启动到终止可能会经历NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TREMINATED等状态。1.NEW一个刚被创建但还没启动(调用该线程的start()方法)的线程就处于该状态。2.RUNNABLE该状态包括两个子状态:READY以及RUNNING。READY表示该线程的start()方法已被调用,但是该线程此刻没有被线...

2018-07-03 16:22:18 516

原创 序列化之用序列化实现深复制

首先,我们先来bala一下深复制和浅复制。浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。深复制:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的...

2018-06-28 18:00:27 455

原创 TCP是百分百可靠的吗?

我们知道,TCP是面向连接的,可靠的传输层协议,那么TCP是100%可靠无缺陷的吗?不是的,

2018-06-27 13:16:33 3769

原创 初识TCP--三次握手、四次挥手

最近在学习TCP,想写一个总结,还没学透,决定先占个坑,然后慢慢补充。首先,TCP是面向连接的、可靠的协议,TCP必须检测并修补所有在IP层(或下面的层)产生的数据传输问题,比如丢包、重复包、错误包等。由于其传输前首先要建立连接,因此效率相对来说低一些所以适合于对实时性要求不是那么高,但是对数据的准确性什么的要求比较高的场景,比如说,我们的HTTP就是基于TCP的。而UDP是无连接的,相对...

2018-06-27 11:39:53 143

CCNA认证指南

本书是专为备考思科CCNA认证的人员量身定做的冲刺指南。全书紧贴640-802考试大纲,全面而系统地分析和介绍了CCNA考试中涵盖的各个知识点。对每个知识点在考试中的重要程度均有标注,每章最后还有CCNA真题的解析。全书共分22章,内容涉及三大方面,局域网部分:网络互联基础知识和网络参考模型,思科路由器和交换机介绍,静态和动态路由协议(包括RIP、EIGRP、OSPF)原理及配置,VLAN和VLAN间路由的实现,CDP、VTP和STP协议的使用,无线网络互联和IPv6等;广域网部分:广域网接入技术,PPP和帧中继的使用,DHCP和NAT等;网络安全部分:网络安全介绍,访问控制列表的使用和安全远

2018-03-21

空空如也

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

TA关注的人

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