自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

卓立的博客

Java技术分享

原创 Java编程拾遗『StringBuilder和StringBuffer』

在之前的文章中,我讲了String类,在讲intern那一节中,讲到当String实例使用”+”操作时,编译后其实使用的是通过StringBuilder的append实现的。另外我们都知道String是不可变类,每次对String实例进行改变的时候,都会生成一个新的String实例,然后将引用指向新的String实例,所以经常改变内容的字符串最好不要用String ,因为每次生成对象都会对系统性能...

2018-11-07 07:35:44 50

原创 Java编程拾遗『搞定编码』

提到编码,也许很多人都有概念,就是普通字符转化位计算机能识别的二进制码的过程。但是具体到各种字符集,编码方式,为什么会有这些编码方式,再到Unicode和UTF-8、UTF-16是什么关系,相信很多人都答不上来。字符集和编码也是很多人比较头疼的问题,我一度也搞不明白。直到之前写String类那篇文章,读了Character源码,并查阅了一堆资料,才真正搞懂编码的来龙去脉,搞明白字符是如何在计算机和...

2018-11-07 07:34:48 65

原创 Java编程拾遗『异常体系』

异常是指程序运行时(非编译时)所发生的非正常情况或错误比如空引用、数组越界、内存溢出等,这些都属于程序运行过程中的意外情况。当程序违反了语义规则时,JVM就会将出现的错误表现为一个异常并抛出,假如对这些异常置之不理,就会导致程序终止或者直接系统崩溃,所以Java中提供了一套异常机制来进行异常处理,从而提高程序的安全性和健壮性。Java中把异常当作对象来处理,并定义了一个基类(java.lang...

2018-11-07 07:33:35 55

原创 Java编程拾遗『String类』

从概念上讲,Java字符串就是Unicode字符序列。例如,串“Java\u2122”由5个Unicode字符J、a、v、a和TM。每个用双引号括起来的字符串都是String类的一个实例:String e = ""; //空字符串String greeting = "hello"; 1. Java API String常用方法在Java API中,String定义如下:pub...

2018-11-07 07:32:53 52

原创 Java编程拾遗『static详解』

static关键字在开发中是比较常见的,但是很多人对其都没有一个明确的认识,只有一种比较模糊的概念,甚至不知道该怎么用。本篇文章将总结一下,Java中static关键词的用法。首先来看一下static关键字的作用:为特定的数据类型或对象分配单一的存储空间,而与创建对象的个数无关 实现某个方法或属性与类而不是对象关联在一起,也就是将方法或属性是属于类的,可以通过类名直接访问,而不用借助于对象。...

2018-11-07 07:32:07 57

原创 Java编程拾遗『内部类』

上篇文章讲述了Java中两种特殊的”类”—接口和对象,本篇文章将讲述一下Java中另一种特殊的类—内部类的相关细节。内部类是相对于普通类来讲的,是指定义在一个类内部的类,而包含它的类则称为外部类。一般来讲,内部类和外部类都有着比较密切的联系,同时和其它类的关系并不是很大,定义在类内部,可以实现对外的隐藏,可以更好地封装。但是内部类只是Java编译器的概念,对于Java虚拟机而言,它并不知道内部类的...

2018-11-07 07:31:26 40

原创 Java编程拾遗『接口与抽象类』

上篇文章讲了Java中类和对象的一些基础概念,本篇文章讲述一下,Java中两种特殊的”类”,接口和抽象类。熟悉Java编程的都知道,Java中是不允许多继承的,有人讲Java中可以通过接口实现多继承,但其实这种说法是不对的,Java之父James Gosling在1995年2月发表了一篇名为”Java: an Overview”的Java白皮书,文章解释了Java不支持多重继承的原因。JAV...

2018-11-07 07:30:42 55

原创 Java编程拾遗『对象和类』

要讲Java中对象和类,Java面向对象的特性是不可避免的,Java中的对象和类其实就来自面向对象的编程思想。在之前的文章Java编程拾遗『Java概述』中,简述了Java面向对象的特性,本篇文章将重新介绍一下Java面向对象的编程思想及Java中对象和类的一些概念和使用。1. 面向对象思想1.1 面向对象 VS 面向过程面向对象是一种编程思想,是当今软件开发方法中的主流方法之一,它把...

2018-11-07 07:29:54 71

原创 Java编程拾遗『数组』

数组是同一种类型数据的集合,其实就是一个容器,Java中提供的数组是用来存储固定大小的同类型元素,其中元素可以是基本类型也可以是对象类型。1. 数组创建Java中数组存在两种声明方式,以int数组为例:int[] a;int a[];Java中建议使用第一种风格,可以将数组看成一种类型。相应的在Java中数组的创建可以使用以下两种方式://方式1, dataType[] ...

2018-11-07 07:28:59 44

原创 Java编程拾遗『控制流程』

与任何程序设计语言一样,Java使用条件语句和循环结构确定控制流流程。1. 条件语句条件语句就是使用if进行条件判断,及逻辑处理,主要包含以下几种形式。1.1 if单if条件语句格式如下:if (condition) { statement;}如果布尔表达式condition为真,则执行statement语句。1.2 if……elseif……else条件语句格...

2018-11-07 07:27:31 81

原创 Java编程拾遗『运算符』

与C、C++相似,Java中也存在多种运算符,对数据进行处理,且运算符类型跟C、C++有着极大的相似性。比如,用于赋值的赋值运算符、用于运算的算数运算符和自增自减运算符、用于比较的关系运算符,用于逻辑运算的逻辑运算符、用于位运算的位运算符和移位操作符、复合三元操作符等。本篇文章将简单讲述一下Java中各种运算符的使用规则。1. 赋值运算符赋值运算符常用于变量赋值运算,最基本的格式为”=”,...

2018-11-06 07:07:06 56

原创 Bean转换工具DozerBeanMapper

在开发中经常遇到这样一个问题,从DAO层拿回DO实体对象,比如我们从数据库中查出的User实体类包含以下域:@Getter@Setter@ToStringpublic class UserDO { private Integer id; private String name; private Integer age; private String ge...

2018-11-06 07:05:45 3243

原创 Java编程拾遗『Java基本数据类型』

Java是一种强类型的语言,这就意味着必须为每一个变量声明一种变量类型。在Java中,一共存在8种基本数据类型,其中4种整型、2种浮点型、1种用于表示Unicode编码的字符单元的自负类型char和一种用于表示真值的bollean类型。1. 数据类型1.1 整型类型 大小 取值范围 byte 1字节 -128 ~ 127 short 2字节 ...

2018-11-06 07:04:37 47

转载 MySQL索引原理及慢查询优化

原文链接:美团技术博客最近在整理Spring Boot的一些知识,打算把Spring Boot系列做个结尾。本来打算写一些关于MongDb和Habse这种Nosql相关的文章的,奈何最近学习的进度确实比较慢,预计近期没办法写出相关的高质量文章,打算暂时先放一下,先去学习。然后自己打算写一个关于Java基础的文章,也开始写了,希望可以继续写下去。本篇文章跟上述两个系列都没什么关系,只是自己曾经读...

2018-11-06 07:03:42 26

原创 Java编程拾遗『Java概述』

Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。1. Java语言概述任职于Sun的Jams Gosling等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的编程语言,应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Su...

2018-11-06 07:02:41 136

原创 Java编程拾遗

在学校时,从未接触过Java编程相关的东西,开始工作的前半年多的时间亦然。后来一些偶然的原因,我做了个决定,做一名Java程序员。在计算机这个领域,非常盛行这么一句话,编程都是相通的,当你熟悉一门开发语言之后,再去转其他语言是很简单的。但是我当时从零开始学Java的过程并不是很顺利,自己一度非常迷茫。后来我体会到“编程都是相通的”这句话的含义,它是有前提的,那就是对当前使用的这门语言的“熟悉”程度...

2018-11-06 07:01:58 56

转载 谈谈互联网后端基础设施

原文链接:http://www.rowkey.me/blog/2016/08/27/server-basic-tech-stack/昨天读了一篇文章,感觉受益匪浅。讲述了近年来一些互联网常用技术栈,读了好多遍,每一遍感觉收获都不一样,这里分享一下。对于一个互联网企业,后端服务是必不可少的一个组成部分。抛开业务应用来说,往下的基础服务设施做到哪些才能够保证业务的稳定可靠、易维护、高可用呢?纵...

2018-11-06 07:00:14 75

原创 分布式服务限流

上篇简单讲述了一下本地服务令牌桶限流实现,只能用于本地服务,在分布式环境下,就不太适用了。比如我们想对接口做限流控制,如果使用令牌桶实现,每秒最大的服务数目是10,假如分布式服务有10台实例,考虑到负载均衡配置,那么整个分布式系统的服务能力每秒应该大概在100左右,很明显不太适合。如果想要对分布式服务做精确限流,令牌桶这种方式肯定是不合适的。跟之前分布式服务防重复提交的方法类似,可以借助分布式锁来...

2018-11-06 06:59:03 119

原创 服务限流(本地)

前几天一直有个老哥在刷我们的后台接口,其实我们风控是有反扒的,但是貌似那几天反扒失效了==,原因这里就不讲了。当我们发现异常时,单机qps峰值达到了2000多,导致阻塞了很多我们正常的前端请求。我们侦测到之后,在反扒重新启用之前,对服务进行降级,对接口进行限流,虽然反扒服务很快就恢复了,但确实也给我们造成一定的损失。前后我也有参加,在这件事情告一段落后,我重新整理了一下最近了解的服务限流的知识,希...

2018-11-06 06:58:08 210

原创 分布式服务防重复提交方案

之前文章介绍过一种单点部署服务防重复提交的一种方式,但是实际开发中,单点服务是很少见得,之前的那种防重复提交的方案在分布式环境下也就嗝屁了。本文实现一种分布式服务防重复提交的方案,跟之前那篇文章的思想是一致的,也就是是一线一个锁,在方法请求前,要先获取锁,不同的是,本文的锁是分布式锁,而之前那篇文章的锁是本地锁。其实分布式锁的实现方式有很多种,比如使用Mysql、或者Zookeeper等都可以实现...

2018-11-05 07:02:16 2162 5

原创 Nginx简单应用

因为这几天一直忙着搭建组内一个用于前端人员接口联调的测试环境,好多天没写文章了,昨天基本把测试环境做好了。现在简单讲一下这件事情的背景,以及解决方案。现在我们组内只有一套测试环境,用于测试人员测试使用。但是接口开发完毕,前端开发人员进行接口联调时,经常遇到这种尴尬的场景:比如A需求后台是由后台人员A开发的,同时还有B需求是由后台人员B开发的,每个需求前端也有相应的同学在开发,两个需求同时进行接口联...

2018-11-05 07:01:09 1527

原创 Spring Boot防重复提交

考虑这样一种情况,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,用户极有可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单。我们在开发中必须防止表单重复提交,否则很有可能会生成非法数据。本文介绍一种非分布式服务后台防重复提交的一种实现方式,虽然在实际工作中,单点部署的服务已经很少了,但是我还是决定单独介绍一下,后面的文章再去介绍分布式服务防重复提交的方法,因为无论是单...

2018-11-05 07:00:17 5833 7

原创 Spring Boot实现定时任务

在应用开发中,经常都有用到在后台跑定时任务的需求。比如需要在服务后台跑一个定时任务来进行数据清理、数据定时增量同步、定时发送邮件、爬虫定时抓取等等,这种情况下,我们往往需要执行定时任务。在java中定时任务有多种实现方式,比如使用线程、使用Timer、使用ScheduledExecutorService、Spring Task等等。本文会简单讲述一下上述几种方式的实现方法。1. 使用普通线程T...

2018-11-05 06:59:14 2170

原创 Spring Boot集成Kafka

Kafka发源于LinkedIn,于2011年成为Apache的孵化项目,随后于2012年成为Apache的主要项目之一。Kafka使用Scala和Java进行编写。Apache Kafka是一个快速、可扩展的、高吞吐、可容错的分布式发布订阅消息系统。Kafka具有高吞吐量、内置分区、支持数据副本和容错的特性,适合在大规模消息处理场景中使用。关于kafka的基本概念,建议去kafka官方文档了解一...

2018-11-05 06:58:10 1011

原创 Spring Boot + Redis实现缓存

缓存作为开发中提高服务性能相对有效的一种方式,在实际开发中得到广泛使用。在Spring 3.1之前,如果想使用缓存,相对是比较麻烦的,往往在业务代码中要掺杂缓存的逻辑,比如判断缓存是否存在,存在则取缓存,不存在在从DB中读取,然后再讲数据存入缓存中,使用起来相当不方便。Spring 3.1引入了基于注释的缓存技术,它本质上不是一个具体的缓存实现方案(例如EHCache、Redis、MemoryCa...

2018-11-05 06:56:48 70

原创 Dubbo服务控制台Dubbo Admin配置

Dubbo服务使用Zookeeper作为服务注册中心,Zookeeper对我们来讲是一个黑框,我们无法看到是否存在了什么提供者或消费者。阿里巴巴官方提供了一个Dubbo服务的管理平台Dubbo Admin,提供路由规则、动态配置、服务降级、访问控制、权重调整、负载均衡等管理等功能,可以很方便的进行服务治理。本篇文章介绍一下如何进行Dubbo Admin的配置。1. 获取dubbo-admin....

2018-11-05 06:55:38 1289

原创 Dubbo服务测试方法

Dubbo服务发布之后,除了编写Dubbo Consumer服务调用去测试,我们也可以利用telnet命令进行调试、管理。Dubbo 2.0.5以上版本服务提供端口支持telnet命令。本篇文章介绍一下如何使用telnet命令对Dubbo服务进行测试。1. 确定Dubbo服务端口Dubbo服务端口是定义在dubbo-provider文件中的,如下:上述文件中通过dubbo:protocol...

2018-11-05 06:54:36 4826

原创 Spring Boot + Jedis实现redis常规数据结构存储

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以用作数据库、缓存和消息中间件,可以说是实现网站高并发不可或缺的一部分。它支持多种类型的数据结构,如字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有...

2018-11-05 06:53:37 108

原创 Spring Boot整合dubbo

随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。简单了解一下,网站架构的发展历程:单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。垂直应用架构当访问量逐渐增大,单一应用增加机器带来的...

2018-11-05 06:52:11 112

原创 Java8 Stream使用flatMap合并List

之前也写过很多篇关于Java8使用的文章了,但是回顾一下,好像还没介绍过Java8 Stream的flatMap操作,昨天刚好在工作中遇到一个场景,发现flatMap简直太方便了,这里总结一下flatMap的常规使用。附带讲一下,使用Java8实现集合的并、交、差操作,其实之前也讲过一种使用Guava的实现方式,具体请参考Guava集合工具 flatMap 首先看一下一种场景,存在一个M...

2018-11-04 10:40:22 51557 5

原创 Ubuntu服务器安装配置Mysql

在搞定VPS环境后,我在VPS上安装了mysql,并开启了远程控制及权限控制,本文简单介绍一下安装及配置的方法。1. mysql安装使用apt安装即可,命令操作如下:sudo apt-get updatesudo apt-get install mysql-server安装过程中有可能会提示输入密码,可以输入空或者输入目标密码,密码可以改的,比如安装成功后,root用户登陆my...

2018-11-04 10:39:29 182

原创 服务器配置ssh免密登陆

之前为了测试方便,买了个国内的低配VPS用于部署java测试,配置为1核2G、2M带宽上线、20GSSD,虽然是个乞丐版的配置,但是部署一下几个常用服务端程序还是差不多够了。然后当天,我一心欢喜的装上JDK、mysql、zookeeper等程序,但是之后一个礼拜不到,我发现我的VPS越来越卡,ssh连接很大概率被拒绝,连上去一个ls命令,都要接近五秒才能响应,有时候直接卡死了,但是自己也就装了这了...

2018-11-04 10:38:34 172

原创 Spring Boot多数据源事务管理

在开发企业应用时,对于使用者的一个操作实际上对应底层数据库的多个读写。由于数据操作在顺序执行的过程中,任何一步操作都有可能发生异常,异常会导致后续操作无法完成,此时由于业务逻辑并未正确的完成,之前成功操作数据的并不可靠,会产生不一致的数据,需要在这种情况下进行回退。事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异常就回退到事务开始未进行操作的状态。了...

2018-11-04 10:37:37 985

原创 Spring Boot + Mybatis + Druid实现多数据源管理

本文通过使用Druid数据库连接池,完成了多数据源的配置和操作。在讲述之前,希望大家可以了解一下Druid的相关概念和强大。首先讲一下,Druid远远不止是一个数据库连接池,本文所讲的使用Druid配置多数据源也仅仅是Druid的一个简单的应用。墙裂建议一下去看一下Druid Github官方文档1. 项目结构| pom.xml| springboot-08-mybatis-d...

2018-11-04 10:36:41 50

原创 Mybatis分页查询

分页查询作为数据库交互最常用的几种操作之一,在日常开发中是非常常见的,比如前段请求需要一个分页的列表,往往有两种方式,一是把所有的数据都给到前段,前段分页。另外一种方式是前端通过传分页信息给后端,后端查询时进行分页,并将相应页的数据返给前端。第一种方式如果数据规模比较小的情况下可以使用,如果数据量较大,对内存、网络传输的消耗都是非常大的,所以实际开发中一般很少使用。第二种方式是后端进行分页,后端分...

2018-11-04 10:35:54 9651

原创 使用Mybatis Generator自动生成代码

看过前几篇关于Mybatis的文章可以发现,在DAO层做数据库交互时,存在两中方式。一种为使用注解手写mapper.xml,这种方式比较复杂,手写xml文件相当麻烦。另一种较手写mapper.xml文件简单一些,就是使用注解(@Select、@Update、@Insert、@Delete)的方式,但是手写sql也经常会带来一些隐式错误,并切也要手写sql,而Mybatis Generator的出现...

2018-11-04 10:35:04 256

原创 Spring Boot + Mybatis数据源配置的三种方式

通过之前两篇文章Spring Boot + JdbcTemplate和Spring Boot + Mybatis CRUD可以看出,无论是使用什么框架,数据源及框架的的一些配置总是不可避免的。在之前的两篇文章中分别使用了application.properties和Java Config的方式进行了配置。其实Mybatis也可以使用这两中方式进行配置,除此之外,Mybatis还可以通过使用xml配...

2018-11-04 10:34:18 1189

原创 SpringBoot + mybatis数据库访问

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。由于使用方便,效率高等特性,Mybatis成...

2018-11-04 10:33:22 282

转载 这几招,让服务的可用行提升到5个9

昨天,看到一篇文章,感觉在日常工作的开发中非常受用,特地分享一下,原文链接。对每一个程序员而言,故障都是悬在头上的达摩克利斯之剑,都唯恐避之不及,如何避免故障是每一个程序员都在苦苦追寻希望解决的问题。对于这一问题,大家都可以从需求分析、架构设计、代码编写、测试、code review、上线、线上服务运维等各个视角给出自己的答案。我们大部分服务都是如下的结构,既要给使用方使用,又依赖于他人提...

2018-11-04 10:32:28 91

原创 SpringBoot + JdbcTemplate实现mysql数据库访问

在开发服务端程序时,数据库交互是非常常见的,如果没了数据库,站点相应也就变成了静态的。从本片文章开始,我会介绍一下SpringBoot连接mysql的几种常见方式(包括使用mybatis ORM框架)。本篇文章首先介绍一下使用JdbcTemplate实现mysql数据库连接,Spring Framework在Jdbc上面做了深层次的封装,通过依赖注入功能,可以将 DataSource 注入到Jdb...

2018-11-03 14:39:59 231

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