自定义博客皮肤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)
  • 收藏
  • 关注

全套java视频教程|300G海量资源等你来领

互联网行业瞬息万变,每个java程序员都应该掌握良好的自学能力,这时候一套好的学习资料就非常重要啦! 之前整理了一部分电子书资源给大家,这次呢,整理了大约300G的java视频教程,视频更为直观,容易理解,非常适合自学者。  如果你正在考虑学习新事物或想要提高自己的Java基础知识,那么这批视频教程绝对可以帮助您。 在百度网盘设置了私密分享(仅限分享给读者朋友,范围可...

2018-08-07 22:35:57 1825 1

小公司程序员如何进入向往的大公司?

今天聊聊小公司程序员如何进入向往的大公司这个话题,最初接触这个选题的时候,我也想了很多,这应该也是很多身处小公司的程序员朋友关心的话题。当然并不是人人都想进入大公司。不过对刚刚毕业几年的程序员朋友来说,进入大公司锻炼还是很有吸引力的,就好比上一所好大学,是让履历更闪光的一种方式。而且在大公司和小公司做程序员有完全不同的体验,代码标准、管理方式、发展阶段、资源等,影响着程序员们的工作内容...

2018-07-30 13:44:08 1573

原创 每分钟访问10万+,11种策略教你保持亿级流量网站稳定性!

稳定性在大型网站运行中至关重要,面对每分钟 10 万次的网络访问,稍有不慎就会引起重大故障。今天这篇文章一起讨论下亿级流量网站在稳定性方面的一些做法,希望对您有帮助。本文已发布在公众号和网站。 基础策略 配置化配置化就是把很多业务流程相关的数据统一放在一个配置平台上,从代码中抽离出来,使得代码仅处理通用的业务逻辑。配置化之后,代码拥有处理所有场景的能力,通过配置数据来决定线...

2018-07-29 17:02:59 327

Java Servlet 温故而知新

Servlet 是运行在 Web 服务器上的 Java 小程序,能够接收并响应客户端发来的 HTTP 请求。Java Web 开发中,JSP 页面在编译之后也是生成 Servlet,而编译的过程在用户第一次访问页面时进行。通常情况下,我们使用 Tomcat 运行 Servlet。 Servlet 接口定义javax.servlet.Servlet 接口定义了 Servlet 必须实现...

2018-07-16 22:29:25 143

抽象能力决定编程能力

程序员的抽象能力是在了解计算机工作原理的基础上,借助于一种或多种编程语言将问题的解决方案抽象为计算机程序的能力。在前文《关于编程能力的思考》中提到了编程能力包括理论基础和系统设计能力,抽象思维能力恰恰就是决定编程能力的关键。 程序的本质是人的意志延伸到计算机的可识别的指令。计算机思维简单仅能识别 0 1 代码,本身不能解决任何问题,只能由人编写程序控制计算机解决问题,因此编程的本质就是人...

2017-05-25 12:29:31 846

原创 MyBatis 原理浅析 3 ——数据操作

前言在前文《MyBatis 原理浅析——基本原理》一文中简单分析了 MyBatis 的实现原理,MyBatis 的数据库操作是通过 Executor 执行的。Executor 是一个接口,有三个实现类,分别是 SimpleExecutor、ReuseExecutor 和 BatchExecutor。 查询数据的流程查询数据是通过 SqlSession 的方法实现的,SqlS...

2017-05-24 09:26:19 131

MyBatis 原理浅析 2 ——配置解析

前言在前文《MyBatis 原理浅析——基本原理》一文中,简要分析了 MyBatis 的技术原理,主要是 SqlSession 和 Mapper 的相关实现原理。本文重点分析 MyBatis 的配置解析过程,从 XML 文件提取配置到 Configuration 类。 XML解析涉及到的类XML 解析主要涉及以下几个类:XMLConfigBuilder、XMLMapperBui...

2017-05-23 13:10:08 141

MyBatis 原理浅析——基本原理

前言MyBatis 是一个被广泛应用的持久化框架。一个简单的使用示例如下所示,先创建会话工厂,然后从会话工厂中打开会话,通过 class 类型和配置生成 Mapper 接口的代理实现,最后使用 Mapper 进行持久化操作。 本文将从 MyBatis 中的 SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession 和 Mapper ...

2017-05-22 14:39:28 292

原创 关于编程能力的思考

编程能力在一次面试中与主管聊到了什么是编程能力,这是一个值得思索和回味的话题。什么才是一个程序员真正的编程能力?或者,非科班程序员与科班程序员相比差在哪里? 作者认为,编程能力分为两个方面:理论基础和系统设计能力。在当前的技术水平上,继续提高实力需要一“上"一"下":"上"是往宏观方向走提高系统设计能力,“下”是往微观方向深挖夯实基础。 理论基础理论基础是指程序员需要掌握的

2017-05-01 14:56:23 2246 2

关于编程能力的思考

编程能力在一次面试中与主管聊到了什么是编程能力,这是一个值得思索和回味的话题。什么才是一个程序员真正的编程能力?或者,非科班程序员与科班程序员相比差在哪里? 作者认为,编程能力分为两个方面:理论基础和系统设计能力。在当前的技术水平上,继续提高实力需要一“上"一"下":"上"是往宏观方向走提高系统设计能力,“下”是往微观方向深挖夯实基础。 理论基础理论基础是指程序员需要掌...

2017-05-01 14:47:05 325

原创 浅析 JIT 即时编译技术

即时编译回顾HotSpot 虚拟机执行 Java 程序时,先通过解释器对代码解释执行,发现某个方法或代码块执行比较频繁后,对热点代码进行编译,编译后生成与本地平台相关的机器码,再去执行机器码获得较高的运行效率。必要时,也会通过逆优化从即时编译回到解释执行,如编译器遇到罕见陷阱的情况。  在 Java 虚拟机规范中,并未要求虚拟机必须实现即时编译,但即时编译在主流的虚拟机中都有实

2017-04-09 12:58:00 376

浅析 JIT 即时编译技术

即时编译回顾HotSpot 虚拟机执行 Java 程序时,先通过解释器对代码解释执行,发现某个方法或代码块执行比较频繁后,对热点代码进行编译,编译后生成与本地平台相关的机器码,再去执行机器码获得较高的运行效率。必要时,也会通过逆优化从即时编译回到解释执行,如编译器遇到罕见陷阱的情况。  在 Java 虚拟机规范中,并未要求虚拟机必须实现即时编译,但即时编译在主流的虚拟机...

2017-04-09 12:48:36 263

原创 Java线程知识拾遗

知识回顾进程与线程是常常被提到的两个概念。进程拥有独立的代码段、数据空间,线程共享代码段和数据空间,但有独立的栈空间。线程是操作系统调度的最小单位,通常一个进程会包含一个或多个线程。多线程和多进程都可以实现并发处理,如 nginx 使用多进程方式、tomcat 使用多线程方式、Apache 支持混合使用。在 C/C++ 等语言中可以同时使用多进程和多线程,而在 Java 中只能使用多线程。

2017-04-08 00:19:26 243

Java线程知识拾遗

知识回顾进程与线程是常常被提到的两个概念。进程拥有独立的代码段、数据空间,线程共享代码段和数据空间,但有独立的栈空间。线程是操作系统调度的最小单位,通常一个进程会包含一个或多个线程。多线程和多进程都可以实现并发处理,如 nginx 使用多进程方式、tomcat 使用多线程方式、Apache 支持混合使用。在 C/C++ 等语言中可以同时使用多进程和多线程,而在 Java 中只能使用多线程。...

2017-04-08 00:11:07 148

原创 推荐给 Java 程序员的 7 本书

《 Java 编程思想》适合各个阶段 Java 程序员的必备读物。书中对 Java 进行了详尽的介绍,与其它语言做了对比,解释了 Java 很多特性出现的原因和解决的问题。初学者可以通过此书快速掌握 Java 面向对象的理念,学会正确使用 Java 的各种特性;平时开发中可以将此书作为工具书参考,遇到疑难问题或查缺补漏都可以参考此书;有经验的开发者重温此书,可以加深对 Java 的理解,开发能

2017-04-04 11:04:14 599

推荐给 Java 程序员的 7 本书

《 Java 编程思想》适合各个阶段 Java 程序员的必备读物。书中对 Java 进行了详尽的介绍,与其它语言做了对比,解释了 Java 很多特性出现的原因和解决的问题。初学者可以通过此书快速掌握 Java 面向对象的理念,学会正确使用 Java 的各种特性;平时开发中可以将此书作为工具书参考,遇到疑难问题或查缺补漏都可以参考此书;有经验的开发者重温此书,可以加深对 Java 的理解,开...

2017-04-04 10:58:27 192

原创 Java到处运行的基础之 Class 文件

Java 实现一次编译到处运行的基础,来源于 Java 虚拟机屏蔽了操作系统的底层细节。使用 class 文件存储编译后的源程序,使得 Java 程序的编译与操作系统解耦。正是因为 Java class 文件的设计与 Java 语言解耦,分别发布了 Java语言规范和 Java 虚拟机规范,使得其他语言如Scala、Groovy、JRuby、JPython 等基于Java 虚拟机的语言按照 cla

2017-03-28 23:05:09 316

Java到处运行的基础之 Class 文件

Java 实现一次编译到处运行的基础,来源于 Java 虚拟机屏蔽了操作系统的底层细节。使用 class 文件存储编译后的源程序,使得 Java 程序的编译与操作系统解耦。正是因为 Java class 文件的设计与 Java 语言解耦,分别发布了 Java语言规范和 Java 虚拟机规范,使得其他语言如Scala、Groovy、JRuby、JPython 等基于Java 虚拟机的语言按照 c...

2017-03-28 22:54:29 130

原创 Java SPI 机制实现解耦与本地化

SPI 是 Java 提供的一种服务加载方式,全名为 Service Provider Interface,可以避免在 Java 代码中写死服务的提供者,而是通过 SPI 服务加载机制进行服务的注册和发现。通过这种方式,可以基于接口编程,实现多个模块的解耦。 SPI 机制实现解耦如下的示例展示了通过 ServiceLoader 类加载指定接口的所有服务提供者并进行调用的简单实现。1

2017-03-26 22:15:12 742

Java SPI 机制实现解耦与本地化

SPI 是 Java 提供的一种服务加载方式,全名为 Service Provider Interface,可以避免在 Java 代码中写死服务的提供者,而是通过 SPI 服务加载机制进行服务的注册和发现。通过这种方式,可以基于接口编程,实现多个模块的解耦。 SPI 机制实现解耦如下的示例展示了通过 ServiceLoader 类加载指定接口的所有服务提供者并进行调用的简单实现...

2017-03-26 22:04:08 265

原创 关于Java引用,你必须知道这些

引用Java 虚拟机接管了所有的内存分配与回收工作,极大地减少了程序员的工作量和错误率。GC 在回收内存时,通常采用被称为可达性分析的算法判断一个对象是否可以回收。而在可达性分析中,对象的引用有着决定性的作用。在下图中,GC 从 GC Roots 开始顺着引用链往下寻找对象,发现当前有引用的对象为object 1、object 2、object 3、object 4,而object 5、o

2017-03-23 22:25:16 238

关于Java引用,你必须知道这些

引用Java 虚拟机接管了所有的内存分配与回收工作,极大地减少了程序员的工作量和错误率。GC 在回收内存时,通常采用被称为可达性分析的算法判断一个对象是否可以回收。而在可达性分析中,对象的引用有着决定性的作用。在下图中,GC 从 GC Roots 开始顺着引用链往下寻找对象,发现当前有引用的对象为object 1、object 2、object 3、object 4,而object 5、ob...

2017-03-23 22:20:12 110

原创 Java虚拟机类加载机制

Java程序运行于Java虚拟机之上,JVM屏蔽了底层细节,使得Java程序能够“一次编译,到处运行”。在Java语言中,一切皆是对象,代码一般由类、接口、enum等构成,是一种面向对象的编程语言。本文将为你揭示Java虚拟机如何加载类,一窥Java底层的秘密。类在虚拟机中的生命周期,可以分为加载、验证、准备、解析、初始化、使用、卸载几个阶段,其中的验证、准备、解析统称为连接。在这里,读者

2017-03-22 10:06:59 175

Java虚拟机类加载机制

Java程序运行于Java虚拟机之上,JVM屏蔽了底层细节,使得Java程序能够“一次编译,到处运行”。在Java语言中,一切皆是对象,代码一般由类、接口、enum等构成,是一种面向对象的编程语言。本文将为你揭示Java虚拟机如何加载类,一窥Java底层的秘密。类在虚拟机中的生命周期,可以分为加载、验证、准备、解析、初始化、使用、卸载几个阶段,其中的验证、准备、解析统称为连接。在这里,读者...

2017-03-22 09:53:16 104

原创 Java 8并发工具包漫游指南

Java 8并发工具包简介Java 8并发工具包由3个包组成,分别是java.util.concurrent、java.util.concurrent.atomic和java.util.concurrent.locks,提供了大量关于并发的接口、类、原子操作类、锁相关类。借助java.util.concurrent包,可以非常轻松地实现复杂的并发操作。java.util.concurren

2017-03-19 10:38:38 407

Java 8并发工具包漫游指南

Java 8并发工具包简介Java 8并发工具包由3个包组成,分别是java.util.concurrent、java.util.concurrent.atomic和java.util.concurrent.locks,提供了大量关于并发的接口、类、原子操作类、锁相关类。借助java.util.concurrent包,可以非常轻松地实现复杂的并发操作。java.util.concurren...

2017-03-19 10:31:37 134

原创 Apache Flume日志收集系统简介

Apache Flume是一个分布式、可靠、可用的系统,用于从大量不同的源有效地收集、聚合、移动大量日志数据进行集中式数据存储。 Flume简介Flume的核心是Agent,Agent中包含Source、Channel、Sink。Agent是最小的独立运行单位。在Agent中,数据流向为Source->Channel->Sink。其中,Source:

2017-03-16 18:23:58 321

Apache Flume日志收集系统简介

Apache Flume是一个分布式、可靠、可用的系统,用于从大量不同的源有效地收集、聚合、移动大量日志数据进行集中式数据存储。 Flume简介Flume的核心是Agent,Agent中包含Source、Channel、Sink。Agent是最小的独立运行单位。在Agent中,数据流向为Source->Channel->Sink。其中,Source:收集数...

2017-03-16 18:18:26 167

原创 团队管理二三事

今天的技术管理会议探讨了一些技术团队管理的思路和想法,稍微总结一下。 团队间合作一般稍有规模的软件开发都会细分为多个团队,各个团队分工不同。这样的分工,既提高了开发效率,也增加了沟通成本,而且一定会在某个问题上发生争执。比如用户反馈的APP的Bug,可能APP或服务端需要一方做兼容或两者一起修改,这时,在哪个团队承担风险和成本进行bug修复的问题上就有可能产生争执。针对这种

2017-02-18 15:01:05 496

团队管理二三事

今天的技术管理会议探讨了一些技术团队管理的思路和想法,稍微总结一下。 团队间合作一般稍有规模的软件开发都会细分为多个团队,各个团队分工不同。这样的分工,既提高了开发效率,也增加了沟通成本,而且一定会在某个问题上发生争执。比如用户反馈的APP的Bug,可能APP或服务端需要一方做兼容或两者一起修改,这时,在哪个团队承担风险和成本进行bug修复的问题上就有可能产生争执。针对这种问题,需要...

2017-02-18 14:52:21 134

原创 Redis事务使用方法

Redis事务Redis事务是一组命令的集合,也是Redis的最小执行单位之一。一个事务的所有命令,要么都执行,要么都不执行。Redis能保证事务执行期间不会有其他命令插入。 相关命令命令格式说明DISCARDDISCARD取消事务EXECEXEC执行事务中的命令MULTIMULTI标记

2017-02-14 18:08:06 327

Redis事务使用方法

Redis事务Redis事务是一组命令的集合,也是Redis的最小执行单位之一。一个事务的所有命令,要么都执行,要么都不执行。Redis能保证事务执行期间不会有其他命令插入。 相关命令命令格式说明DISCARDDISCARD取消事务EXECEXEC执行事务中的命令MULTIMULTI标记一个事务的开始UNWA...

2017-02-14 17:59:20 238

原创 Redis发布订阅使用方法

Redis发布订阅发布订阅模式中发布消息的为publisher即发布者,接收消息的为subscriber即订阅者。在Redis中,所有的消息通过channel即频道进行发布,一个发布者可以向多个channel发布消息,一个订阅者也可以订阅多个channel。Redis不对消息进行持久化,如果消息发布时订阅者还没有进行订阅,则不会再收到此消息。 发布订阅命令

2017-02-13 13:02:54 1613

Redis发布订阅使用方法

Redis发布订阅发布订阅模式中发布消息的为publisher即发布者,接收消息的为subscriber即订阅者。在Redis中,所有的消息通过channel即频道进行发布,一个发布者可以向多个channel发布消息,一个订阅者也可以订阅多个channel。Redis不对消息进行持久化,如果消息发布时订阅者还没有进行订阅,则不会再收到此消息。 发布订阅命令命令格式...

2017-02-13 12:47:16 175

原创 Redis常用命令(6)——SortedSet

ZADD格式:ZADD key score member [[score member] [score member] ...]作用:向有序集合key中插入一个或多个元素。如果元素已经存在,更新score的值并移动member的位置。返回值:新插入的成员的个数,不包括已经存在的member。 ZCARD格式:ZCARD key作用:返回有序集

2017-02-12 16:30:31 236

原创 Redis常用命令(5)——Set

SADD格式:SADD key member [member ...]作用:在集合key中插入一个或多个元素。如果member已经存在,则忽略member。如果key不存在则先创建集合key。返回值:成功插入的元素个数。 SCARD格式:SCARD key作用:返回集合中的元素个数。返回值:元素个数。如果集合不存在返回0。 

2017-02-12 16:29:48 241

原创 Redis常用命令(4)——List

BLPOP格式:BLPOP key [key ...] timeout作用:从列表左侧弹出元素,超时时间为timeout,单位为秒。如果timeout为0则一直阻塞直到列表中有元素。如果同时操作多个列表,按照列表顺序从左到右依次检查列表,遇到第一个非空列表时弹出元素并返回。返回值:列表元素。超时后返回nil和等待时间。 BRPOP格式:BRPOP k

2017-02-12 16:29:13 220

原创 Redis常用命令(3)——Hash

HDEL格式:HDEL key field [field ...]作用:删除哈希表中的一个或多个域。返回值:删除的域的个数。 HEXISTS格式:HEXISTS key field作用:判断哈希表中是否包含某个域field。返回值:包含返回1,不包含返回0. HGET格式:HGET key field作

2017-02-12 16:28:27 267

原创 Redis常用命令(2)——String

APPEND格式:APPEND key value作用:在key的键值后追加value,如果key不存在,则创建key,并存入value。返回值:追加value后的字符串长度。示例:192.168.1.100:6379> set testkey helloOK192.168.1.100:6379> append testkey " word"

2017-02-12 16:27:23 362

原创 Redis常用命令(1)——Key

格式:SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC] [ALPHA] [STORE destination]作用:对列表、集合、有序集合进行排序,返回排序的结果或保存到destination中。默认按数字进行排序。返回值:排序结果或destination元素的个数。

2017-02-12 16:00:45 913

空空如也

空空如也

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

TA关注的人

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