zhaoyaxuan001的博客

私信 关注
我叫白小猿
码龄6年
  • 84,399
    被访问量
  • 155
    原创文章
  • 44,343
    作者排名
  • 30
    粉丝数量
  • 于 2014-11-02 加入CSDN
获得成就
  • 获得112次点赞
  • 内容获得11次评论
  • 获得76次收藏
荣誉勋章
TA的专栏
  • 系统设计
    2篇
  • mysql
    1篇
  • Java虚拟机扫盲
    9篇
  • Servlet规范扫盲
    4篇
  • 数据结构
    34篇
  • 综合
    44篇
  • Java虚拟机
    10篇
  • DPDK
    3篇
  • git学习笔记
    2篇
  • java语言
    12篇
  • 测试
    10篇
  • 前台日志框架
    1篇
  • Servlet
    4篇
  • React
    1篇
  • Mybatis
    8篇
  • 常见小问题
    18篇
  • kafka
    5篇
  • Redis
    3篇
  • Metrics
    1篇
  • Spring
    9篇
  • 设计模式
    4篇
  • 多线程
    3篇
  • leetcode题目解答
    13篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

[日常踩坑]--(14)异步任务与事务

Author:赵志乾Date:2020-08-14Declaration:All Right Reserved!!!踩坑:场景:数据库事务执行完,需要执行异步任务;例如向Redis发布消息;做法:事务的最后一步执行消息发布;代码如下:@Transactional(rollbackFor = Exception.class)public void doMyTransaction(Object param) { // step1: 执行事务操作 // step2: 发布Re.
原创
130阅读
0评论
2点赞
发布博客于 6 月前

[日常踩坑]--(13)MySQL大表变更

Author:赵志乾Date:2020-08-14Declaration:All Right Reserved!!!踩坑:场景:MySQL数据库单表行数将近400万,多张表加和约千万行。需要对这几张表进行字段添加和字段更新;做法:使用数据客户端连接数据库,直接执行变更命令;现象:此系列命令的执行极其占用数据库资源,使得数据库性能大幅下降。导致线上应用中的其他表单条记录更新操作耗时将近30秒,并发锁过期失效,出现数据更新错乱。解决方案:上述问题是由于单表过大,导致更新占用过..
原创
35阅读
0评论
2点赞
发布博客于 6 月前

[日常踩坑]--(12)Redis锁释放

Author:赵志乾Date:2020-07-28Declaration:All Right Reserved!!!踩坑:场景:获取Redis锁,完成业务逻辑后释放锁做法:try语句中获取Redis锁,finally语句中释放锁,代码如下:try{ // step1: 获取锁--默认过期时间15秒 boolean result = jedisTemplate.getLock(lockKey); if(!result){ // 抢锁失败 .
原创
320阅读
0评论
3点赞
发布博客于 7 月前

[日常踩坑]--(11)随机业务id重复问题

Author:赵志乾Date:2020-06-05Declaration:All Right Reserved!!!踩坑:场景:业务记录需要唯一标识,也就是我们使用的业务id。做法:本地通过时间戳+业务串+随机数的规则生成业务id,当在循环中使用该方法是会产生重复的业务id。代码如下:public class ServiceIdGenerator { private static DateFormat dateFormat = new SimpleDateFormat("yy.
原创
152阅读
0评论
0点赞
发布博客于 9 月前

[系统设计]--(2)控制接口调用间隔的接口并发锁

Author:赵志乾Date:2020-04-04Declaration:All Right Reserved!!!《小并发量、低延时、通用场景下的接口并发锁》给出的并发锁方案主要用于解决多个请求并发调用时,只有单个调用能够抢到锁并完成业务流程的执行。为此,其在业务代码执行前进行抢锁,执行完或异常终止时显示释放锁,以便后续请求能够顺利执行。现在我们要面临一个新的场景,某类修改接口针对...
原创
76阅读
0评论
0点赞
发布博客于 11 月前

[系统设计]--(1)小并发量、低延时、通用场景下的接口并发锁

Author:赵志乾Date:2020-04-04Declaration:All Right Reserved!!!实际项目中的接口大致可以分为两大类:查询类与修改类。对于查询类接口而言,其对业务数据是没有影响的(对查询进行统计的功能除外)。针对此类对业务数据无影响的接口,完全可以放开并发控制,以提高接口的响应速度。而对于修改类接口,其操作会影响到业务数据。为避免数据不一致,需要进行并发...
原创
86阅读
0评论
0点赞
发布博客于 1 年前

[日常踩坑]--(10)运算符优先级

Author:赵志乾Date:2020-04-04Declaration:All Right Reserved!!!踩坑:场景:复杂表达式依赖运算符默认优先级。做法:直接在if判断中使用复杂表达式且依赖运算符默认优先级。代码如下:// 第1期代码--真实意图:订单失败且计划关闭if(order.getStatus().equals(Status.FAIL)&&am...
原创
48阅读
0评论
0点赞
发布博客于 1 年前

[日常踩坑]--(9)包装类空指针

Author:赵志乾Date:2020-04-04Declaration:All Right Reserved!!!踩坑:场景:Vo对象中的数值类型通常使用对应的包装类。做法:直接使用equals方法或者==进行相等判断。代码如下:public class Vo{ private Integer age; // 省略getter和setter函数}p...
原创
162阅读
0评论
0点赞
发布博客于 1 年前

[leetcode题目解答]--(901) 股票价格跨度

Author:赵志乾Date:2020-02-29Declaration:All Right Reserved!!!题目描述:编写一个 StockSpanner 类,它收集某些股票的每日报价,并返回该股票当日价格的跨度。今天股票价格的跨度被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。例如,如果未来7天股票的价格是 [100, 80, 60, 70...
原创
79阅读
0评论
0点赞
发布博客于 1 年前

[leetcode题目解答]--(27) 移除元素

Author:赵志乾Date:2020-02-22Declaration:All Right Reserved!!!题目描述:给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元...
原创
50阅读
0评论
0点赞
发布博客于 1 年前

[leetcode题目解答]--(26) 删除排序数组中的重复项

Author:赵志乾Date:2020-02-22Declaration:All Right Reserved!!!题目描述:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返...
原创
38阅读
1评论
1点赞
发布博客于 1 年前

[leetcode题目解答]--(25) K个一组翻转链表

Author:赵志乾Date:2020-02-22Declaration:All Right Reserved!!!题目描述:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给定这个链表:1->2->3->4->5...
原创
73阅读
0评论
0点赞
发布博客于 1 年前

[leetcode题目解答]--(24) 两两交换链表中的节点

Author:赵志乾Date:2020-02-22Declaration:All Right Reserved!!!题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3。链表节点:publi...
原创
112阅读
0评论
0点赞
发布博客于 1 年前

[leetcode题目解答]--(23)合并K个排序链表

Author:赵志乾Date:2020-02-22Declaration:All Right Reserved!!!题目描述:合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4-&...
原创
132阅读
0评论
0点赞
发布博客于 1 年前

[leetcode题目解答]--(22)括号生成

Author:赵志乾Date:2020-02-20Declaration:All Right Reserved!!!题目:给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。示例:给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]...
原创
42阅读
0评论
0点赞
发布博客于 1 年前

[leetcode题目解答]--(21)合并两个有序链表

Author:赵志乾Date:2020-02-20Declaration:All Right Reserved!!!题目描述:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4 链表节点:pu...
原创
74阅读
0评论
0点赞
发布博客于 1 年前

[Mysql扫盲]--(1)日期和时间函数

Author:赵志乾Date:2019-11-24Declaration:All Right Reserved!!!使用mysql进行数据管理时,经常会涉及到日期和时间的处理。mysql本身为使用者提供了一系列日期和时间处理函数,方便我们使用。以下是常用的3个日期时间函数1、日期加减函数应用场景: 基于某一日期时点进行时间偏移计算。比如,给定日期时点A,计算早于或晚于A一段...
原创
63阅读
0评论
0点赞
发布博客于 2 年前

[日常踩坑]--(8)工具类封装和使用

Author:赵志乾Date:2019-11-09Declaration:All Right Reserved!!!踩坑:场景:项目中经常会封装一些工具类,方便通用流程的处理。做法:封装工具类时,注意事项标注不全或命名不规范。使用工具类时,未充分了解工具类方法的特性。曾经踩过这样一个坑,使用工具类方法获取给定时间戳对应当日的凌晨0点时间戳。代码如下:public stat...
原创
65阅读
0评论
0点赞
发布博客于 2 年前

[通用解决方案]--(3)统一系统对接的字段别名与格式

Author:赵志乾Date:2019-09-28Declaration:All Right Reserved!!!场景实际项目中,经常会遇到调用第三方服务接口的情景。第三方通常只提供一份接口文档,且字段命名规则、格式需求与自己项目不一致。解决方案方案1:单独做一层转换按照第三方的要求写一层Vo,然后将Vo转换成自己项目中的字段格式和命名规则。此方案在实现过程中会...
原创
313阅读
0评论
0点赞
发布博客于 2 年前

[通用解决方案]--(2)Post请求发送Json格式的body体工具类

Author:赵志乾Date:2019-08-29Declaration:All Right Reserved!!!场景当前服务需要调用其他服务提供的基于http的接口。要求使用Post操作,Content-Type为application/json,字符集编码为UTF-8解决方案引用的jar包<dependency> <groupId>...
原创
413阅读
0评论
0点赞
发布博客于 2 年前

[日常踩坑]--(7)不同jar包中JSONObject的区别

Author:赵志乾Date:2019-08-29Declaration:All Right Reserved!!!踩坑场景:HttpPost使用StringEntity配置请求体。做法:使用json-lib包中的JSONObject设置参数,并通过JSONObject的toString方法获取的json串构建StringEntity。发送端实际发送数据和期望发送数据不一致。如...
原创
156阅读
0评论
0点赞
发布博客于 2 年前

[日常踩坑]--(6)部分@Transactional没有生效

Author:赵志乾Date:2019-07-25Declaration:All Right Reserved!!!踩坑场景:Service层的某个方法需要事务,且该方法在本类内部被调用。(其他场景下事务都能生效)做法:直接在方法上添加注解@Transactional。结果事务未生效。解决方案该问题的原因是字节码增强未生效导致的。使用@Transactional注解后,...
原创
139阅读
0评论
2点赞
发布博客于 2 年前

[通用方案]--(1)图片压缩

Author:赵志乾Date:2019-07-25Declaration:All Right Reserved!!!场景上传到服务器的图片偏大时,会导致前端图片的加载过程变慢。解决方案用户上传的图片在服务器端落盘前进行压缩。1、引入依赖包thumbnailator(google开源的压缩工具)<!-- https://mvnrepository.com/ar...
原创
69阅读
0评论
0点赞
发布博客于 2 年前

[日常踩坑]--(5)MyBatis分页查询带嵌套集合的结果集

Author:赵志乾Date:2019-07-24Declaration:All Right Reserved!!!踩坑:场景:分页查询带嵌套结果集合的Vo,如下:// 结果记录package com.zhaozhiqian;import java.util.List;public class NodeVo { private String id; ...
原创
521阅读
2评论
2点赞
发布博客于 2 年前

[日常踩坑]--(4)混淆显示文本和编码文本

Author:赵志乾Date:2019-07-08Declaration:All Right Reserved!!!踩坑:场景:将代码中写死的文本信息调整到界面可配置。做法:使用数据库存放要配置的文本内容。将代码中的文本信息复制粘贴到输入文本框,结果存储到数据库中的文本多转义了一次。// 代码中的配置--内容是一个向右指的手势
原创
191阅读
0评论
0点赞
发布博客于 2 年前

[日常踩坑]--(3)多服务访问同一图片的跨域问题

Author:赵志乾Date:2019-07-04Declaration:All Right Reserved!!!踩坑:前提:ftp服务器存放图片,图片的url存放在数据库表中。场景:服务A前端负责图片的增删改查,服务B和服务C的前端代码通过url查询图片时,报跨域访问问题。做法:数据库表中存放图片的完整url(即包含域名)解决方案:上述问题是由图片url强关联服...
原创
252阅读
0评论
2点赞
发布博客于 2 年前

[日常操作]--(1)日志文件查看

Author:赵志乾Date:2019-07-04Declaration:All Right Reserved!!!背景:线上项目出现问题时,通常需要通过日志文件进行定位。操作:使用下面3条指令可以很方便地进行日志查看。// 进入日志文件所在目录cd 日志文件所在目录// 过滤文件中带关键字的行,并且显示行号.cat -n 日志文件名 | grep 关键字...
原创
185阅读
0评论
2点赞
发布博客于 2 年前

[日常踩坑]--(3)MySQL存储emoji表情产生乱码

Author:赵志乾Date:2019-06-14Declaration:All Right Reserved!!!踩坑:前提:mysql-connector-java版本为5.1.30,mysql版本为5.7.17。场景:数据库指定字段类型为varchar,使用的字符集为utf8mb4,将emoji表情通过JDBC存储时产生乱码。做法:jdbcUrl中使用charac...
原创
445阅读
0评论
0点赞
发布博客于 2 年前

[日常踩坑]--(2)切面未做异常处理

Author:赵志乾Date:2019-06-12Declaration:All Right Reserved!!!踩坑:前提:切面逻辑和业务代码均未做异常处理。场景:项目采用多数据源配置,在切面中完成数据源的动态切换。当业务代码抛异常后,没有自动切回默认数据源。做法:public Object around(ProceedingJoinPoint point, Ch...
原创
170阅读
0评论
0点赞
发布博客于 2 年前

[日常踩坑]--(1)MySql数据库时间戳精度

Author:赵志乾Date:2019-06-05Declaration:All Right Reserved!!!踩坑:前提:数据库中TIMESTAMP采用默认精度(秒),Java应用中Timestamp精度为毫秒。场景:需要将数据库中时间戳设置为当日00:00:00之前。做法:如下代码,存库后依然是当日00:00:00。Long todayBegin = 当日00...
原创
2581阅读
0评论
0点赞
发布博客于 2 年前

ApplicationContextAware构建BeanHolder

Author:赵志乾Date:2019-05-16Declaration:All Right Reserved!!!基于Spring框架的实际项目,会将Bean放入IoC容器进行统一管理(包括依赖管理和生命周期管理)。而从IoC容器中获取需要的Bean则主要是通过容器接口ApplicationContext。Web项目中,通常都是由Web容器和Spring IoC容器相互配合完成B...
原创
107阅读
0评论
0点赞
发布博客于 2 年前

ContextRefreshedEvent事件解决初始化

Author:赵志乾Date:2019-05-16Declaration:All Right Reserved!!!实际项目开发中,经常会遇到“应用启动时进行初始化”的诉求。在基于Spring框架的项目中,解决方案如下:1、监听ContextRefreshedEvent事件Spring容器初始化完成后(onRefresh)会触发ContextRefreshedEvent事件,因...
原创
372阅读
0评论
0点赞
发布博客于 2 年前

[java面试]---dubbo系列---(2)dubbo中的负载均衡策略

Author:赵志乾Date:2019-05-11Declaration:All Right Reserved!!!dubbo作为一款成熟的rpc框架,在协议所定义的功能之上封装了许多额外的功能,如容错策略、负载均衡策略等等。其中,dubbo支持的负载均衡策略包括随机(Random)、轮询(RoundRobin)、最少活跃调用数(LeastActive)和一致性Hash(Consi...
原创
113阅读
0评论
0点赞
发布博客于 2 年前

[Spring基础扫盲]---(1)import标签规划配置文件

Author:赵志乾Date:2019-05-10Declaration:All Right Reserved!!!随项目规模的增大,Spring配置文件也会不断增大。为了便于配置文件的管理和维护,实际应用中通常采用import标签来规划配置文件,即先将配置文件进行拆分,按功能放置于对应模块,最后在主配置文件(通常是applicationContext.xml)中使用import标签进行...
原创
223阅读
0评论
0点赞
发布博客于 2 年前

[Java基础扫盲]--JDBC

Author:赵志乾Date:2019-05-04Declaration:All Right Reserved!!!1、什么是JDBCJDBC是Java应用访问数据库的一套标准接口,其全称为Java DataBase Connectivity。Java程序通过JDBC接口来间接访问数据库,JDBC接口下接JDBC驱动,由JDBC驱动来完成对数据库的访问。其中,JDBC接口内置于J...
原创
48阅读
0评论
0点赞
发布博客于 2 年前

[Java基础扫盲]--反射与泛型--(5)泛型

Author:赵志乾Date:2019-05-04Declaration:All Right Reserved!!!1、什么是泛型所谓的泛型就是编写模板代码来适应任意类型,从而避免一些繁琐的类型转化,且能够让编译器在编译阶段进行类型检查。在使用泛型时,其继承关系中要保持泛型参数不变。例如:ArrayList<Integer>和List<Integer>有继承关...
原创
53阅读
0评论
0点赞
发布博客于 2 年前

[Java基础扫盲]--反射与泛型--(4)注解

Author:赵志乾 Date:2019-05-03 Declaration:All Right Reserved!!!1、什么是注解注解就是放在Java源码中类、方法、字段、参数前的一种标签。其以@字符起始。注解本身对代码逻辑是没有任何影响的,而对于注解的使用是由对应的工具来决定的。例如编译器使用的一些注解:@Override注解让编译器检查其所标注的方法是否正确的实现了覆写...
原创
55阅读
0评论
0点赞
发布博客于 2 年前

[Java基础扫盲]--反射与泛型--(2)方法调用与继承关系获取

Author:赵志乾 Date:2019-05-03 Declaration:All Right Reserved!!!1、方法信息获取反射可以Class实例获取引用类型所有相关信息,包括方法信息。假设Class实例为cls,则获取方法信息如下:cls.getMethod(方法名,参数列表); //获取某个public方法,包括父类中的public方法cls.getMeth...
原创
76阅读
0评论
0点赞
发布博客于 2 年前

[Java基础扫盲]--反射与泛型--(1)反射

Author:赵志乾Date:2019-05-03Declaration:All Right Reserved!!!1、Class实例由来Java语言中,除了基本类型外,其他类型都统称引用类型。而每一种引用类型都是JVM所引入广义类型的特例,其依据能持有的实例不同而有所区分。为了明确表征一个引用类型,JVM进程在内存中使用Class的一个实例来存储引用类型的所有信息,如:该引用类型有...
原创
75阅读
0评论
0点赞
发布博客于 2 年前

[基础知识点扫盲]---(1)zookeeper的4种使用场景

Author:赵志乾Date:2019-04-13Declaration:All Right Reserved!!!zookeeper作为分布式系统的一种基础组件,有着广泛的应用场景。今天我们一起来看一下最常用的4种场景:·分布式锁·元数据/配置信息管理·分布式协调·高可用1、分布式锁分布式系统中,各服务大多都是多实例部署,即多个服务实例操作同一数据源,为...
原创
109阅读
0评论
1点赞
发布博客于 2 年前

[leetcode题目解答]--(6)字符串转换整数 (atoi)

1、题目描述:请你来实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号; 假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。 该字符串除了...
原创
67阅读
0评论
0点赞
发布博客于 2 年前

[leetcode题目解答]--(5)整数反转

Author:赵志乾Date:2019-04-06Declaration:All Right Reserved!!!1、题目描述给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。2、示例示例 1: 输入: 123 输出: 321示例 2: 输入: -123 输出: -321示例 3: 输入: 120 输出: 21注...
原创
52阅读
0评论
0点赞
发布博客于 2 年前

[leetcode题目解答]--(4)最长回文子串

Author:赵志乾Date:2019-03-28Declaration:All Right Reserved!!!1、题目描述给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为1000。2、示例示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。示例 2: 输入: "cb...
原创
66阅读
0评论
1点赞
发布博客于 2 年前

[leetcode题目解答]--(3)无重复字符的最长子串

Author:赵志乾Date:2019-03-27Declaration:All Right Reserved!!!1、题目描述给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。(只包含ASCII码)2、示例示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。...
原创
56阅读
0评论
1点赞
发布博客于 2 年前

[java多线程扫盲]---(1)线程同步--(3)锁中使用Condition

Author:赵志乾Date:2019-03-21Declaration:All Right Reserved!!!1、Condition接口一个锁可以关联一个或多个Condition。在锁控制的临界区内使用Condition是为了允许线程获取锁后查看等待的某个条件是否满足,如果不满足则可以调用Condition接口的await()方法,将锁释放并被挂起,等待其他线程在Condit...
原创
68阅读
0评论
1点赞
发布博客于 2 年前

[leetcode题目解答]--(2)两数相加

Author:赵志乾Date:2019-03-19Declaration:All Right Reserved!!!1、题目描述给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字0之外,这两个数都不会以0开头。...
原创
57阅读
0评论
1点赞
发布博客于 2 年前

[java多线程扫盲]---(1)线程同步--(2)重入锁实现并发

Author:赵志乾Date:2019-03-19Declaration:All Right Reserved!!!1、基于Lock接口的锁机制java除了提供synchronized关键字实现的同步机制外,还提供了基于Lock接口及其实现类的同步机制,该机制相对于synchronized关键字而言,具有以下几点好处:·灵活:能够实现更复杂的临界区,而synchronized关...
原创
77阅读
0评论
1点赞
发布博客于 2 年前

[leetcode题目解答]--(1)两数之和

Author:赵志乾Date:2019-03-14Declaration:All Right Reserved!!!1、题目描述:给定一个整数数组nums和一个目标值target,请在数组中找出和等于目标值的两个整数,并返回他们的数组下标。注:你可以假设每种输入只会对应一个答案。并且不可重复使用这个数组中同样的元素。2、示例:给定 nums = [2, 7, 11, ...
原创
80阅读
0评论
1点赞
发布博客于 2 年前

[java多线程扫盲]---(1)线程同步--(1)synchronized关键字实现并发

Author:赵志乾Date:2019-03-14Declaration:All Right Reserved!!!1、线程同步的简介在某些场景下,同一进程内,会出现多个线程读写同一块内存、访问相同文件或者数据库连接。为了避免这些共享资源在被多个线程访问时出现数据不一致等错误,需要引入同步机制。为了实现同步机制,引入了新概念:临界区。所谓的临界区其实就是用以访问共享资源的...
原创
109阅读
0评论
1点赞
发布博客于 2 年前

[设计模式扫盲]---(4)模板方法模式

Author:赵志乾Date:2019-03-10Declaration:All Right Reserved!!!1、模式解释所谓的模板方法模式,是指在进程运行期间,通用处理流程在父类方法中执行(模板方法),而涉及到流程中某些细节点会跳转到子类方法去执行的一种设计理念。我们知道,通常类层次设计中,倾向于将流程执行重点放于子类中,即在子类中调用父类实现的方法,通过子类中增...
原创
57阅读
0评论
1点赞
发布博客于 2 年前

[设计模式扫盲]---(3)建造者模式

Author:赵志乾Date:2019-03-09Declaration:All Right Reserved!!!1、模式解释所谓的建造者模式,是指在进程运行期间,将复杂实例的构建过程拆分为一系列基础功能点,然后由一单独实例负责基础功能组合的一种设计理念。我们知道,构建一般实例时,可以通过一个方法分步骤进行操作,但当实例非常大,且构建流程非常复杂时,这种方式将会给代码的...
原创
66阅读
0评论
1点赞
发布博客于 2 年前

[设计模式扫盲]---(2)原型模式

Author:赵志乾Date:2019-03-09Declaration:All Right Reserved!!!1、模型解释所谓的原型模式,是指在进程运行期间,通过对进程内存空间中已有实例的拷贝来生成新实例的设计理念。我们知道,开发中生成实例最常用的方式是调用类的构造函数。但在某些场景下,我们并不希望通过类的构造函数调用来实例化,比如:有大量近似实例无法整合到一个类中,如果...
原创
45阅读
0评论
1点赞
发布博客于 2 年前

[设计模式扫盲]--(1)单例模式

Author:赵志乾Date:2019-03-09Declaration:All Right Reserved!!!1、模式解释所谓单例模式,是指在进程运行期间,不通过反射方式,实例化代码被集中一处且仅被调用一次的类设计理念。我们知道,对于普通类设计理念,其在进程运行期间,我们可以按照具体需求在内存空间中构建所需数量的实例。然后协调各实例之间的协作,完成应用功能。实际...
原创
46阅读
0评论
1点赞
发布博客于 2 年前

[Maven扫盲]---(2)settings文件常用最小配置

Author:赵志乾Date:2019-02-26Declaration:All Right Reserved!!!1、Maven的settings文件有大量的配置项可供用户使用,从而可定制出符合用户要求的配置。通常而言,个人使用时,最常用的就是servers和mirrors配置项。如下:&lt;?xml version="1.0" encoding="UTF-8"?&gt;&...
原创
60阅读
0评论
1点赞
发布博客于 2 年前

[SpringCloud扫盲]---(2)服务注册

Author:赵志乾Date:2019-02-17Declaration:All Right Reserved!!! 1、服务注册微服务架构中,分散的服务最常采用注册中心来实现服务治理。而服务注册,就是指微服务架构中的一个实体服务将自己的信息和状态推送到注册中心,以便注册中心实现服务的统一管理、维护。——————————————————————————————————————...
原创
98阅读
0评论
1点赞
发布博客于 2 年前

[SpringCloud扫盲]---(1)注册中心搭建

Author:赵志乾Date:2019-02-17Declaration:All Right Reserved!!!1、注册中心微服务架构下,服务变得比较分散,如下图。此时需要一套治理工具进行服务的管理、维护。而注册中心,便是最常用的服务治理解决方案。注册中心在微服务架构中,处在各服务中间,作为各服务信息和状态的统一管理者。服务于服务之间的交互需要通过注册中心来确定其交互的实...
原创
138阅读
0评论
1点赞
发布博客于 2 年前

[Maven扫盲]---(1)POM文件之常用标签

Author:赵志乾Date:2019-02-17Declaration:All Right Reserved!!! &lt;!--project是根元素,通过其属性引入命名空间和schema文件--&gt;&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w...
原创
211阅读
0评论
4点赞
发布博客于 2 年前

[Spring扫盲]---(1)IoC与DI---(2)ApplicationContext基础配置

Author:赵志乾Date:2019-01-27Declaration:All Right Reserved!!!1、ApplicationContextBeanFactory是Spring依赖注入的核心,而ApplicationContext接口作为BeanFactory的扩展,其除了基础的依赖注入功能,还提供了其他一些企业级应用常用的功能,比如事务管理、AOP、消息源国际化、...
原创
62阅读
0评论
1点赞
发布博客于 2 年前

[Spring扫盲]---(1)IoC与DI---(1)BeanFactory使用示例

Author:赵志乾Date:2019-01-27Declaration:All Right Reserved!!!1、BeanFactorySpring依赖注入容器的核心是BeanFactory接口,其负责Bean的创建、管理、维护和销毁,即负责Bean的依赖项管理和生命周期管理。如果应用程序只需要使用依赖注入,则可以借用BeanFactory接口来与Spring的依赖注入容器进...
原创
121阅读
0评论
1点赞
发布博客于 2 年前

[Metrics扫盲]---(1)如何在java应用中使用Metrics

Author:赵志乾Date:2019-01-26Declaration:All Right Reserved!!!该部分内容主要介绍如何在一个java应用中引入Metrics,以及Metrics所提供各种度量工具的使用方式。 1、引入metrics-core包java应用开发过程中,通常都会使用构建工具。以Maven构建工具为例,需要在项目的POM文件中引入metrics-...
原创
1331阅读
0评论
1点赞
发布博客于 2 年前

[Redis扫盲]---(2)独立功能---(1)监视器

Author:赵志乾Date:2018-12-02Declaration:All Right Reserved!!!1、监视器Redis监视器是用于监控或观察Redis服务器指令执行的一种特殊的客户端。创建Redis监视器的方式也很简单,启动一个客户端后,执行monitor指令,客户端将进入监视器状态。进入监视器状态的客户端将不再接受Redis指令输入,而称为了一个实时接受服务器指...
原创
1348阅读
0评论
2点赞
发布博客于 3 年前

[Redis扫盲]---(1)数据库原理---(1)客户端通用属性

Author:赵志乾Date:2018-12-02Declaration:All Right Reserved!!!1、Redis客户端与服务器关系维护Redis客户端同服务器的关系是多对一的关系,即一个Redis服务器可以通过网络连接为多个客户端服务。在《客户端目标数据库切换》中,提到Redis服务器状态信息由redisServer维护,客户端信息由client维护,而对于两者之...
原创
178阅读
0评论
1点赞
发布博客于 3 年前

[Redis扫盲]---(1)数据库原理---(1)客户端目标数据库切换

Author:赵志乾Date:2018-12-01Declaration:All Right Reserved!!!1、Redis服务器信息部署Redis服务的服务器称为Redis服务器,其服务器的相关配置以优化Redis服务为终极目标,此类为物理服务器。Redis服务器上我们会起一些服务器实例,此类为软件服务器。以下如无特殊说明,Redis服务器均指软件服务器。在Redis服务器中...
原创
309阅读
0评论
1点赞
发布博客于 3 年前

[kafka扫盲]---(7)kafka源码阅读之生产者客户端缓冲池

Author:赵志乾Date:2018-10-21Declaration:All Right Reserved!!!BufferPool.java1、文件位置:该文件在源码中的位置:kafka-2.0.0-src/clients/src/main/java/org/apache/kafka/clients/producer/internals/BufferPool.java,在I...
原创
1206阅读
0评论
1点赞
发布博客于 3 年前

[kafka扫盲]---(6)kafka源码阅读之分区器

Author:赵志乾Date:2018-10-21Declaration:All Right Reserved!!!DefaultPartitioner.java该类实现了Partitioner接口,核心方法为partition():用于给未指定分区号的消息记录生成分区号,其生成策略也比较简单。其依据是否指定key值采用两种不同的策略:如果指定key值,则按照key的hash来生成分...
原创
297阅读
0评论
2点赞
发布博客于 3 年前

[kafka扫盲]--(5)kafka源码阅读之模型对象--(1)ProducerRecord.java

Author:赵志乾Date:2018-10-21Declaration:All Right Reserved!!!ProducerRecord.java该类的实例用于存放生产者向kafka集群发送的单条消息记录。其内容如下,共包含6个属性字段。其中的topic字段用于指定该消息记录的一级分属,partition字段和key字段用于指定该消息记录的二级分属,value字段用于存放该消...
原创
1153阅读
0评论
1点赞
发布博客于 3 年前

[kafka扫盲]---(4)kafka源码阅读之案例

Author:赵志乾Date:2018-10-20Declaration:All Right Reserved!!!1、源码位置:kafka源码包中的案例代码在/kafka-2.0.0-src/examples/src/main目录下。导入IDEA后,对应的项目为main4。其包含一个package包:kafka.examples;在该包下共有4个类文件,分别为Consumer.ja...
原创
457阅读
0评论
2点赞
发布博客于 3 年前

[kafka扫盲]---(3)Ubuntu下阅读kafka源码

Author:赵志乾Date:2018-10-20Declaration:All Right Reserved!!!1、IntelliJ IDEA下载:下载网址:https://www.jetbrains.com/idea/download/#section=linux选择linux操作系统,社区版2、IntelliJ IDEA安装:将软件包解压到想要的安装目录中,然后再...
原创
97阅读
0评论
1点赞
发布博客于 3 年前

[mysql扫盲]---()锁相关

Author:赵志乾Date:2018-10-20Declaration:All Right Reserved!!!1、锁机制锁机制主要用于并发操作,来保证数据的一致性,即使的共享资源在被并发访问时,变得有序而强加的一种约束规则。mysql的锁机制亦是如此,只不过它的锁机制是由存储引擎提供的。选择不同的存储引擎,其支持的锁机制也不相同。比如:Innodb存储引擎支持表级锁和行级锁,而...
原创
88阅读
0评论
1点赞
发布博客于 3 年前

[kafka扫盲]--(2)Ubuntu下使用kafka

Author:赵志乾Date:2018-10-20Declaration:All Right Reserved!!!1、kafka系统的运行条件首先,kafka服务端代码使用scala语言开发,其最终运行于JVM上,故需要安装JRE。其次,kafka的一些元数据由zookeeper来保存,并且由zookeeper来监控kafka代理服务器的在线情况,故需要安装zookeeper。...
原创
106阅读
0评论
1点赞
发布博客于 3 年前

[java乱弹]---(4)我眼中的“Class”

声明:Author:赵志乾Date:2018-9-2Declaration:All Right Reserved!!!在《我眼中的工具类》一节,我们谈及到动态绑定。说动态绑定机制依赖于虚拟机构建对象时将打包后的类型信息自动关联到堆空间为对象分配到的内存上。那我们今天就来看一下这里面所涉及到的类型信息都有啥?以及类型信息是如何关联上去的。类型信息的关联是在运行过程中,虚拟机构建对象时...
原创
159阅读
0评论
1点赞
发布博客于 3 年前

[java乱弹]--(3)我眼中的工具类

声明:Author:赵志乾Date:2018-9-2Declaration:All Right Reserved!!!在《“类”是虚拟机构建对象的原材料,是真的吗?》一节中,我们谈及工具类是一种特殊的类,他只有静态方法。这种类在使用上的特点就是无需进行实例化,通过类便可直接调用静态方法,其对应的机理便是所谓的静态绑定。一说到静态绑定,就不得不说一下他的孪生兄弟:动态绑定。动态绑定的...
原创
164阅读
0评论
1点赞
发布博客于 3 年前

[java乱弹]--(2)“类”是虚拟机构建对象的原材料,是真的吗?

声明:Author:赵志乾Date:2018-9-2Declaration:All Right Reserved!!!在《我眼中的虚拟机》一节中,我们谈及“类”是虚拟机构建对象的原材料。但有人可能会说,这一说法似乎有问题呀!类并不都是用来构建对象的呀。比如说抽象类、接口(姑且看作一种特殊的类吧)以及一些仅提供静态方法的工具类。抽象类和接口显然不能进行实例化,而仅提供静态方法的工具类也无...
原创
149阅读
0评论
1点赞
发布博客于 3 年前

[java乱弹]--(1)我眼中的虚拟机

声明:Author:赵志乾Date:2018-9-1Declaration:All Right Reserved!!!我们经常说虚拟机在Java世界中尤为重要,其原因在于:虚拟机为java代码提供了运行环境。其实这种说法并不准确,因为在虚拟机的眼中只有字节码的存在(暂时不考虑本地方法调用)。确切的来说,虚拟机为字节码的运行提供了环境。虽然虚拟机本身服务于字节码,但两者之间其实是相辅...
原创
97阅读
0评论
1点赞
发布博客于 3 年前

[MyBatis]--(4)动态SQL语句--(3)循环

背景知识:    1、循环    循环是指某一个动作或某一系列动作被连续反复执行。其通常用于对集合的遍历,而遍历的目的也有很多种:如做数据统计、做数据拼接、将某些操作作用于集合上的所有或部分元素。2、SQL语句的集合片段    集合片段在SQL语句中有两种存在形式,一种是位于in子句,用于枚举所有情况;另一种则是位于value子句,用于数据的批量操作,如多条数据添加、多条数据修改等。foreach...
原创
1025阅读
0评论
1点赞
发布博客于 3 年前

[MyBatis]--(4)动态SQL语句--(2)自动修正

声明:Author:赵志乾Date:2018-6-24Declaration:All Right Reserved!!!背景知识:    1、MyBatis动态SQL语句    MyBatis作为一个成熟的ORM框架,其通过在映射器中引入3个元素来表征拼接SQL语句的意图。而在其框架代码中,会解析这些元素且保存到配置对象中,并在有调用请求到达时,依据传入的参数和原先解析的动态拼接元素自动拼接成所需...
原创
194阅读
0评论
2点赞
发布博客于 3 年前

[MyBatis]--(4)动态SQL语句--(1)选择

声明:Author:赵志乾Date:2018-6-23Declaration:All Right Reserved!!!背景知识:    1、JDBC同数据库管理系统的对接JDBC规范提供了一套API,对上供应用层调用,对下供数据库供应商的数据库驱动程序进行对接。这套API通过桥接模式实现应用和数据库关系系统的链接,链接后需要向数据库管理系统发送接入信息,通过验证后,方可实现真正的贯通。虽然通过J...
原创
134阅读
0评论
1点赞
发布博客于 3 年前

[MyBatis]--(3)映射器--(2)增删改

声明:Author:赵志乾Date:2018-6-23Declaration:All Right Reserved!!!背景知识:    CURD就是常说的增删改查,对应的词汇分别为增(Create)、删(Delete)、改(Update)、查(Retrieve)。通常而言,在数据库操作中,四个操作都会涉及。其中最复杂的就是查询操作,而增、删和改比较类似,相对而言也比较简单。毕竟增删改的返回值都只...
原创
86阅读
0评论
1点赞
发布博客于 3 年前

[MyBatis]--(3)映射器--(1)概述

声明:Author:赵志乾Date:2018-6-23Declaration:All Right Reserved!!!背景知识:1、ORM框架   ORM的全称为对象关系映射,其含义是指对象模型数据到关系表数据的映射转换。这一概念起源于JDBC规范制定后所面临的窘境。JDBC API在使用过程比较繁琐,同时也存在大量的样版式代码(用于模型转换)。为了让开发人员从这些样板式代码中解脱出来,便提出了...
原创
139阅读
0评论
1点赞
发布博客于 3 年前

[MyBatis]--(2)总配置文件--(3)typeAliases元素

声明:Author:赵志乾Date:2018-6-23Declaration:All Right Reserved!!!背景知识:1、名称   名称是一个应用很广泛的概念。如一个变量会有名称、一个方法会有名称、一个类型同样会有名称。名称的存在意义主要是起到标识作用,这种作用无论是作用于人也好,还是作用于机器,在应用和生活中都不可或缺。2、别名    给人印象最深刻的就是外国友人的姓名,要多长有多长...
原创
167阅读
0评论
1点赞
发布博客于 3 年前

[MyBatis]--(2)总配置文件--(2)properties元素

声明:Author:赵志乾Date:2018-6-22Declaration:All Right Reserved!!!背景知识:1、接入信息     MyBatis作为一个成熟的ORM框架,其通过对JDBC规范中的那套API进行了一定程度的封装,来减轻开发人员在开发过程中的负担。但封装仅仅是对开发人员而言的,JDBC实际所需要的信息并不会减少。比如,JDBC需要使用驱动器来连接具体的数据库管理系...
原创
135阅读
0评论
1点赞
发布博客于 3 年前

[java虚拟机]--(2)字节码文件--(7)方法表结构集合

声明:Author:赵志乾Date:2018-6-22Declaration:All Right Reserved!!!背景知识:    面向对象编程思想倡导我们将数据和方法进行捆绑封装,使得特定数据只能被特定方法访问,从而避免某些方法误操作数据,并可缩小问题点的定位范围。当然,这只是一种设计理念,需要有具体的设施来支撑该理念的落地。    在Java应用中,伴随着数据的拆分,操作数据的方法也进行...
原创
112阅读
0评论
1点赞
发布博客于 3 年前

[java虚拟机]--(2)字节码文件--(6)字段表结构集合

声明:Author:赵志乾Date:2018-6-22Declaration:All Right Reserved!!!背景知识:    面向对象编程思想倡导我们将数据和方法进行捆绑封装,使得特定数据只能被特定方法访问,从而避免某些方法误操作数据,并可缩小问题点的定位范围。当然,这只是一种设计理念,需要有具体的设施来支撑该理念的落地。    在Java应用中,其通过将数据拆分到不同的类型中,每一种...
原创
190阅读
0评论
0点赞
发布博客于 3 年前

[java虚拟机]--(2)字节码文件--(5)类级别的索引

声明:Author:赵志乾Date:2018-6-18Declaration:All Right Reserved!!!背景知识:    Java代码在定义一个类时,其有且仅有一个父类和若干个接口。而在定义接口时,其可以有若干个父接口。这主要是因为Java中的类只能进行单继承,而接口作为一个纯抽象的功能协议,可以进行多重继承。    Java不允许类多重继承,主要是为了避免C++中多重继承带来的菱...
原创
117阅读
0评论
1点赞
发布博客于 3 年前

[java虚拟机]--(2)字节码文件--(4)访问标志

声明:Author:赵志乾Date:2018-6-18Declaration:All Right Reserved!!!背景知识:    Java语言中,使用一些关键字来表示枚举性质的含义,如class表示类、interface表示接口、public、protected、private表示不同级别的访问权限等等。这些具有枚举性质的关键字是给开发人员看的,非常便于代码的理解。因为每个关键字都是用一个...
原创
113阅读
0评论
1点赞
发布博客于 3 年前

[java虚拟机]--(2)字节码文件--(3)常量池

声明: Author:赵志乾 Date:2018-6-18 Declaration:All Right Reserved!!!背景知识:常量池这一概念在虚拟机内存章节中也提到过(《虚拟机内存》)。虚拟机内存中的常量池位于方法区内,其全称为运行时常量池。之所以称为运行时常量池,是因为其伴随虚拟机的运行而存在,具有动态性,即随时间的推移,会有新的内容加入,也有新的内容...
原创
296阅读
3评论
1点赞
发布博客于 3 年前

[java虚拟机]--(2)字节码文件--(2)魔数与版本

声明:Author:赵志乾Date:2018-6-18Declaration:All Right Reserved!!!背景知识:1、魔数魔数是一个术语,在软件领域通常有以下两种含义:代码中出现的,没有任何解释的数字常量或字符串常量。文件起始的几个字节,用于表示文件的类型。2、魔数与扩展名    文件起始的几个字节可以用来描述文件的类型,那文件的扩展名也可以用来表示文件的类型。两者岂不是功能重叠了...
原创
149阅读
0评论
1点赞
发布博客于 3 年前

[java虚拟机]--(2)字节码文件--(1)字节码文件存在的意义

声明:Author:赵志乾Date:2018-6-18Declaration:All Right Reserved!!!背景知识:    C++应用经过编译、链接等步骤,最终生成机器码文件,也称做可执行文件。这类文件其本质是一组指令的组合,如精简指令集、复杂指令集等。不同的指令集对应着不同的硬件架构实现,这也就导致机器码文件同具体的底层硬件耦合在一块。当需要将C++应用迁移到不同的平台上运行时,就...
原创
150阅读
0评论
1点赞
发布博客于 3 年前

[java虚拟机]--(1)java内存区域--(2)线程间共享区域

声明:Author:赵志乾Date:2018-6-18Declaration:All Right Reserved!!!背景知识:[java虚拟机]--(1)java内存区域--(1)线程私有区域虚拟机内存之线程间共享区域:1、堆    谈及内存区域的划分,一般会将内存区域简单的划分为堆内存和栈内存。当然,这只是一种粗粒度的划分,详细的划分见《java内存区域》。对于开发而言,堆内存相较于栈内存,...
原创
451阅读
0评论
1点赞
发布博客于 3 年前

[java虚拟机]--(1)java内存区域--(1)线程私有区域

声明:Author:赵志乾Date:2018-6-17Declaration:All Right Reserved!!!背景知识:1、jvm在启动时会拉起一些守护线程,其中包括垃圾回收线程。垃圾回收线程的意义在于实现虚拟机内存区域的自管理。    C++应用:堆内存的使用周期完全由应用本身来决定,其遵循“谁申请、谁释放,谁创建、谁销毁”的原则。    Java应用:堆内存的使用周期由应用和虚拟机共...
原创
1159阅读
0评论
1点赞
发布博客于 3 年前

[React扫盲]---(1)React定义与优点

声明:Author:赵志乾Date:2018-2-10Declaration:All Right Reserved!!!1、什么是React?    “React是由FaceBook推出的一个开源项目,其为开发人员提供了UI界面的全新构建方式:即在JS中构建界面。”   要全面、准确的阐明React为何物,其实并非易事。我们可以大可从React本身的特点来阐述:    a、使用JS和XML两种技术...
原创
212阅读
0评论
1点赞
发布博客于 3 年前

[Servlet扫盲]---(4)service处理流程相关问题

声明:Author:赵志乾Date:2017-12-31Declaration:All Right Reserved!!!1、多线程问题容器可以并发发送多个请求到Servlet实例的service方法,其线程安全性需由Servlet开发人员保证。一种简化方案就是实现SingleThreadModel接口,从而由容器来保证service方法在某
原创
189阅读
0评论
1点赞
发布博客于 4 年前

[Servlet扫盲]---(3)Servlet生命周期

声明:Author:赵志乾Date:2017-12-31Declaration:All Right Reserved!!!1、生命周期    Servlet容器会负责桥接客户端和Servlet之间的交互,同时也会管理Servlet的生命周期。规范中明确规定生命周期包含加载、实例化、初始化、处理请求和结束服务,其主要是借助于java
原创
193阅读
0评论
1点赞
发布博客于 4 年前

[Servlet扫盲]---(2)Servlet接口

声明:Author:赵志乾Date:2017-12-31Declaration:All Right Reserved!!!1、在某种意义上,Servlet用于指代一个特定的接口,而我们更倾向于将实现了这一接口的类称为Servlet。(注:一般而言,会通过继承一个已经实现了该接口的类来复用共性功能)目前,GenericServlet和HttpServl
原创
191阅读
0评论
1点赞
发布博客于 4 年前

[Servlet扫盲]---(1)Servlet简介

声明:Author:赵志乾Date:2017-12-28Declaration:All Right Reserved!!!【背景】   前台开发过程中,为了便于调试,通常会使用console.log在控制台打印输出。最理想的状态是开发人员能够在恰当的地方使用console.log,而现实情况却是我们过于依赖这一功能,导致该调用遍及代码各处。
原创
175阅读
0评论
1点赞
发布博客于 4 年前

[前端日志框架]---开篇

声明:Author:赵志乾Date:2017-12-28Declaration:All Right Reserved!!!【背景】   前台开发过程中,为了便于调试,通常会使用console.log在控制台打印输出。最理想的状态是开发人员能够在恰当的地方使用console.log,而现实情况却是我们过于依赖这一功能,导致该调用遍及代码各处。
原创
1334阅读
0评论
1点赞
发布博客于 4 年前

Linux命令行与Shell脚本编程大全LinuxCommandLineAndShellScriptingBible(2th).pdf

Linux命令行与Shell脚本编程大全LinuxCommandLineAndShellScriptingBible(2th).pdf 第一部分 Linux 命令行 第1章 初识Linux shell 1.1 什么是Linux 1.1.1 深入探究Linux内核 1.1.2 GNU工具链 1.1.3 Linux桌面环境 1.2 Linux发行版 1.2.1 核心Linux发行版 1.2.2 专业 Linux发行版 1.2.3 Linux LiveCD 1.3 小结 第2章 走进shell 2.1 终端模拟 2.1.1 图形功能 2.1.2 键盘 2.2 terminfo数据库 2.3 Linux控制台 2.4 xterm终端 2.4.1 命令行参数 2.4.2 xterm主菜单 2.4.3 VT选项菜单 2.4.4 VT字体菜单 2.5 Konsole终端 2.5.1 命令行参数 2.5.2 标签式窗口会话 2.5.3 配置文件 2.5.4 菜单栏 2.6 GNOME Terminal 2.6.1 命令行参数 2.6.2 标签 2.6.3 菜单栏 2.7 小结 第3章 基本的bash shell命令 3.1 启动shell 3.2 shell提示符 3.3 bash手册 3.4 浏览文件系统 3.4.1 Linux文件系统 3.4.2 遍历目录 3.5 文件和目录列表 3.5.1 基本列表功能 3.5.2 修改输出信息 3.5.3 完整的参数列表 3.5.4 过滤输出列表 3.6 处理文件 3.6.1 创建文件 3.6.2 复制文件 3.6.3 链接文件 3.6.4 重命名文件 3.6.5 删除文件 3.7 处理目录 3.7.1 创建目录 3.7.2 删除目录 3.8 查看文件内容 3.8.1 查看文件统计信息 3.8.2 查看文件类型 3.8.3 查看整个文件 3.8.4 查看部分文件 3.9 小结 第4章 更多的bash shell命令 4.1 监测程序 4.1.1 探查进程 4.1.2 实时监测进程 4.1.3 结束进程 4.2 监测磁盘空间 4.2.1 挂载存储媒体 4.2.2 使用df命令 4.2.3 使用du命令 4.3 处理数据文件 4.3.1 排序数据 4.3.2 搜索数据 4.3.3 压缩数据 4.3.4 归档数据 4.4 小结 第5章 使用Linux环境变量 5.1 什么是环境变量 5.1.1 全局环境变量 5.1.2 局部环境变量 5.2 设置环境变量 5.2.1 设置局部环境变量 5.2.2 设置全局环境变量 5.3 删除环境变量 5.4 默认shell环境变量 5.5 设置PATH环境变量 5.6 定位系统环境变量 5.6.1 登录shell 5.6.2 交互式shell 5.6.3 非交互式shell 5.7 可变数组 5.8 使用命令别名 5.9 小结 第6章 理解Linux文件权限 6.1 Linux的安全性 6.1.1 /etc/passwd文件 6.1.2 /etc/shadow文件 6.1.3 添加新用户 6.1.4 删除用户 6.1.5 修改用户 6.2 使用Linux组 6.2.1 /etc/group文件 6.2.2 创建新组 6.2.3 修改组 6.3 理解文件权限 6.3.1 使用文件权限符 6.3.2 默认文件权限 6.4 改变安全性设置 6.4.1 改变权限 6.4.2 改变所属关系 6.5 共享文件 6.6 小结 第7章 管理文件系统 7.1 探索Linux文件系统 7.1.1 基本的Linux文件系统 7.1.2 日志文件系统 7.1.3 扩展的Linux日志文件系统 7.2 操作文件系统 7.2.1 创建分区 7.2.2 创建文件系统 7.2.3 如果出错了 7.3 逻辑卷管理器 7.3.1 逻辑卷管理布局 7.3.2 Linux中的LVM 7.3.3 使用Linux LVM 7.4 小结 第8章 安装软件程序 8.1 包管理基础 8.2 基于Debian的系统 8.2.1 用aptitude管理软件包 8.2.2 用aptitude安装软件包 8.2.3 用aptitude更新软件 8.2.4 用aptitude卸载软件 8.2.5 aptitude库 8.3 基于Red Hat的系统 8.3.1 列出已安装包 8.3.2 用yum安装软件 8.3.3 用yum更新软件 8.3.4 用yum卸载软件 8.3.5 处理损坏的包依赖关系 8.3.6 yum软件库 8.4 从源码安装 8.5 小结 第9章 使用编辑器 9.1 Vim编辑器 9.1.1 Vim基础 9.1.2 编辑数据 9.1.3 复制和粘贴 9.1.4 查找和替换 9.2 Emacs编辑器 9.2.1 在控制台上使用Emacs 9.2.2 在X Window中使用Emacs 9.3 KDE系编辑器 9.3.1 KWrite编辑器 9.3.2 Kate编辑器 9.4 GNOME编辑器 9.4.1 启动gedit 9.4.2 基本的gedit功能 9.4.3 设定偏好设置 9.5 小结 第二部分 shell脚本编程基础 第10章 构建基本脚本 10.1 使用多个命令 10.2 创建shell脚本文件 10.3 显示消息 10.4 使用变量 10.4.1 环境变量 10.4.2 用户变量 10.4.3 反引号 10.5 重定向输入和输出 10.5.1 输出重定向 10.5.2 输入重定向 10.6 管道 10.7 执行数学运算 10.7.1 expr命令 10.7.2 使用方括号 10.7.3 浮点解决方案 10.8 退出脚本 10.8.1 查看退出状态码 10.8.2 exit命令 10.9 小结 第11章 使用结构化命令 11.1 使用if-then语句 11.2 if-then-else语句 11.3 嵌套if 11.4 test命令 11.4.1 数值比较 11.4.2 字符串比较 11.4.3 文件比较 11.5 复合条件测试 11.6 if-then的高级特性 11.6.1 使用双尖括号 11.6.2 使用双方括号 11.7 case命令 11.8 小结 第12章 更多的结构化命令 12.1 for命令 12.1.1 读取列表中的值 12.1.2 读取列表中的复杂值 12.1.3 从变量读取列表 12.1.4 从命令读取值 12.1.5 更改字段分隔符 12.1.6 用通配符读取目录 12.2 C语言风格的for命令 12.2.1 C语言的for命令 12.2.2 使用多个变量 12.3 while命令 12.3.1 while的基本格式 12.3.2 使用多个测试命令 12.4 until命令 12.5 嵌套循环 12.6 循环处理文件数据 12.7 控制循环 12.7.1 break命令 12.7.2 continue命令 12.8 处理循环的输出 12.9 小结 第13章 处理用户输入 13.1 命令行参数 13.1.1 读取参数 13.1.2 读取程序名 13.1.3 测试参数 13.2 特殊参数变量 13.2.1 参数计数 13.2.2 抓取所有的数据 13.3 移动变量 13.4 处理选项 13.4.1 查找选项 13.4.2 使用getopt命令 13.4.3 使用更高级的getopts 13.5 将选项标准化 13.6 获得用户输入 13.6.1 基本的读取 13.6.2 超时 13.6.3 隐藏方式读取 13.6.4 从文件中读取 13.7 小结 第14章 呈现数据 14.1 理解输入和输出 14.1.1 标准文件描述符 14.1.2 重定向错误 14.2 在脚本中重定向输出 14.2.1 临时重定向 14.2.2 永久重定向 14.3 在脚本中重定向输入 14.4 创建自己的重定向 14.4.1 创建输出文件描述符 14.4.2 重定向文件描述符 14.4.3 创建输入文件描述符 14.4.4 创建读写文件描述符 14.4.5 关闭文件描述符 14.5 列出打开的文件描述符 14.6 阻止命令输出 14.7 创建临时文件 14.7.1 创建本地临时文件 14.7.2 在/tmp目录创建临时文件 14.7.3 创建临时目录 14.8 记录消息 14.9 小结 第15章 控制脚本 15.1 处理信号 15.1.1 重温Linux信号 15.1.2 产生信号 15.1.3 捕捉信号 15.1.4 捕捉脚本的退出 15.1.5 移除捕捉 15.2 以后台模式运行脚本 15.2.1 后台运行脚本 15.2.2 运行多个后台作业 15.2.3 退出终端 15.3 在非控制台下运行脚本 15.4 作业控制 15.4.1 查看作业 15.4.2 重启停止的作业 15.5 调整谦让度 15.5.1 nice命令 15.5.2 renice命令 15.6 定时运行作业 15.6.1 用at命令来计划执行作业 15.6.2 计划定期执行脚本 15.7 启动时运行 15.7.1 开机时运行脚本 15.7.2 在新shell中启动 15.8 小结 第三部分 高级shell脚本编程 第16章 创建函数 16.1 基本的脚本函数 16.1.1 创建函数 16.1.2 使用函数 16.2 返回值 16.2.1 默认退出状态码 16.2.2 使用return命令 16.2.3 使用函数输出 16.3 在函数中使用变量 16.3.1 向函数传递参数 16.3.2 在函数中处理变量 16.4 数组变量和函数 16.4.1 向函数传数组参数 16.4.2 从函数返回数组 16.5 函数递归 16.6 创建库 16.7 在命令行上使用函数 16.7.1 在命令行上创建函数 16.7.2 在.bashrc文件中定义函数 16.8 小结 第17章 图形化桌面上的脚本编程 17.1 创建文本菜单 17.1.1 创建菜单布局 17.1.2 创建菜单函数 17.1.3 添加菜单逻辑 17.1.4 整合shell脚本菜单 17.1.5 使用select命令 17.2 使用窗口 17.2.1 dialog包 17.2.2 dialog选项 17.2.3 在脚本中使用dialog命令 17.3 使用图形 17.3.1 KDE环境 17.3.2 GNOME环境 17.4 小结 第18章 初识sed和gawk 18.1 文本处理 18.1.1 sed编辑器 18.1.2 gawk程序 18.2 sed编辑器基础 18.2.1 更多的替换选项 18.2.2 使用地址 18.2.3 删除行 18.2.4 插入和附加文本 18.2.5 修改行 18.2.6 转换命令 18.2.7 回顾打印 18.2.8 用sed和文件一起工作 18.3 小结 第19章 正则表达式 19.1 什么是正则表达式 19.1.1 定义 19.1.2 正则表达式的类型 19.2 定义BRE模式 19.2.1 纯文本 19.2.2 特殊字符 19.2.3 锚字符 19.2.4 点字符 19.2.5 字符组 19.2.6 排除字符组 19.2.7 使用区间 19.2.8 特殊字符组 19.2.9 星号 19.3 扩展正则表达式 19.3.1 问号 19.3.2 加号 19.3.3 使用花括号 19.3.4 管道符号 19.3.5 聚合表达式 19.4 实用中的正则表达式 19.4.1 目录文件计数 19.4.2 验证电话号码 19.4.3 解析邮件地址 19.5 小结 第20章 sed进阶 20.1 多行命令 20.1.1 next命令 20.1.2 多行删除命令 20.1.3 多行打印命令 20.2 保持空间 20.3 排除命令 20.4 改变流 20.4.1 跳转 20.4.2 测试 20.5 模式替代 20.5.1 and符号 20.5.2 替换单独的单词 20.6 在脚本中使用sed 20.6.1 使用包装脚本 20.6.2 重定向sed的输出 20.7 创建sed实用工具 20.7.1 加倍行间距 20.7.2 对可能含有空白行的文件加倍行间距 20.7.3 给文件中的行编号 20.7.4 打印末尾行 20.7.5 删除行 20.7.6 删除HTML标签 20.8 小结 第21章 gawk进阶 21.1 使用变量 21.1.1 内建变量 21.1.2 自定义变量 21.2 处理数组 21.2.1 定义数组变量 21.2.2 遍历数组变量 21.2.3 删除数组变量 21.3 使用模式 21.3.1 正则表达式 21.3.2 匹配操作符 21.3.3 数学表达式 21.4 结构化命令 21.4.1 if语句 21.4.2 while语句 21.4.3 do-while语句 21.4.4 for语句 21.5 格式化打印 21.6 内建函数 21.6.1 数学函数 21.6.2 字符串函数 21.6.3 时间函数 21.7 自定义函数 21.7.1 定义函数 21.7.2 使用自定义函数 21.7.3 创建函数库 21.8 小结 第22章 使用其他shell 22.1 什么是dash shell 22.2 dash shell的特性 22.2.1 dash命令行参数 22.2.2 dash环境变量 22.2.3 dash内建命令 22.3 dash脚本编程 22.3.1 创建dash脚本 22.3.2 不能使用的功能 22.4 zsh shell 22.5 zsh shell的组成 22.5.1 shell选项 22.5.2 内建命令 22.6 zsh脚本编程 22.6.1 数学运算 22.6.2 结构化命令 22.6.3 函数 22.7 小结 第四部分 高级shell脚本编程主题 第23章 使用数据库 23.1 MySQL数据库 23.1.1 安装MySQL 23.1.2 MySQL客户端界面 23.1.3 创建MySQL数据库对象 23.2 PostgreSQL数据库 23.2.1 安装PostgreSQL 23.2.2 PostgreSQL命令行界面 23.2.3 创建PostgreSQL数据库对象 23.3 使用数据表 23.3.1 创建数据表 23.3.2 插入和删除数据 23.3.3 查询数据 23.4 在脚本中使用数据库 23.4.1 连接到数据库 23.4.2 向服务器发送命令 23.4.3 格式化数据 23.5 小结 第24章 使用Web 24.1 Lynx程序 24.1.1 安装Lynx 24.1.2 lynx命令行 24.1.3 Lynx配置文件 24.1.4 Lynx环境变量 24.1.5 从Lynx中抓取数据 24.2 cURL程序 24.2.1 安装cURL 24.2.2 探索cURL 24.3 使用zsh处理网络 24.3.1 TCP模块 24.3.2 客户端/服务器模式 24.3.3 使用zsh进行C/S编程 24.4 小结 第25章 使用E-mail 25.1 Linux E-mail基础 25.1.1 Linux中的E-mail 25.1.2 邮件传送代理 25.1.3 邮件投递代理 25.1.4 邮件用户代理 25.2 建立服务器 25.2.1 sendmail 25.2.2 Postfix 25.3 使用Mailx发送消息 25.4 Mutt程序 25.4.1 安装Mutt 25.4.2 Mutt命令行 25.4.3 使用Mutt 25.5 小结 第26章 编写脚本实用工具 26.1 监测磁盘空间 26.1.1 需要的功能 26.1.2 创建脚本 26.1.3 运行脚本 26.2 进行备份 26.3 管理用户账户 26.3.1 需要的功能 26.3.2 创建脚本 26.4 小结 第27章 shell脚本编程进阶 27.1 监测系统统计数据 27.1.1 系统快照报告 27.1.2 系统统计数据报告 27.2 问题跟踪数据库 27.2.1 创建数据库 27.2.2 记录问题 27.2.3 更新问题 27.2.4 查找问题 27.3 小结 附录A bash命令快速指南 附录B sed和gawk快速指南
pdf
发布资源于 4 年前

精通AngularJS.pdf

由科兹洛夫斯基、达尔文所著的《精通AngularJS》全面系统的介绍了AngularJS框架。AngularJS是Google开发者设计和开发的一套前端开发框架,帮助简化前端开发的负担。AngularJS主要有以下几点优势:1)它是由互联网巨人Google组织开发的;这意味着它有更加强大的社区支持;2)AngularJS非常全面,没有其它的插件或者架构足以开发数据驱动的web应用;3)开发过程简单 快捷。 AngularJS诞生于Google,已用于开发多款Google产品。它是一套JavaScript前端框架,用于开发当下流行的数据驱动的单页面Web应用。其核心特性是:MVC、模块化、自动双向数据绑定、语义化标签、依赖注入等。《精通AngularJS》深入浅出地讲解了AngularJS的开发概念和原理,并通过丰富的开发实例向读者展示了构建复杂应用的完整过程,包括学习使用AngularJS特有的基于DOM的模板系统,实现复杂的后端通信,创建漂亮的表单,制作导航,使用依赖注入系统,提高Web应用的安全性,使用Jasmine开展单元测试,等等。
pdf
发布资源于 4 年前

AngularJS权威教程.pdf

《AngularJS权威教程》内容全面,讲解通俗,适合各层次的学习者。作者拥有丰富的AngularJS开发和教学经验,也是一位全栈工程师。全书35章,由浅入深地讲解了AngularJS的基本概念和基本功能,包括模块、作用域、控制器、表达式、指令、路由、依赖注入等,重要的是书中对每一个概念的讲解都配合了恰如其分的示例和代码,让读者通过动手实践,切身体会到这些概念的含义和价值。《AngularJS权威 教程》后半部分深入到AngularJS应用开发,系统地讨论了服务器通信、事件、架构、动画、本地化、安全、缓存、移动应用等主题。《AngularJS权威教程》适合各个层次的AngularJS开发人员学习,无论是出于工作需要,还是好奇心的驱使,只要你想彻底理解AngularJS,《AngularJS权威教程》都会让你满载而归。
pdf
发布资源于 4 年前

javascript权威指南

内容简介 《JavaScript权威指南(第6版)》要讲述的内容涵盖JavaScript语言本身,以及web浏览器所实现的JavaScript API。本书第6版涵盖了 html5 和 ecmascript 5,很多章节完全重写,增加了当今 web 开发的最佳实践的内容,新增的章节包括 jQuery、服务器端 JavaScript、图形编程以及JavaScript式的面向对象。本书不仅适合初学者 系统学习,也适合有经验的 JavaScript开发者随手翻阅。 《JavaScript权威指南(第6版)》是程序员学习核心JavaScript语言和由WEB浏览器定义的JavaScript API的指南和综合参考手册。 《JavaScript权威指南(第6版)》涵盖html5和ecmascript 5。很多章节完全重写,以便与时俱进,紧跟当今的最佳web开发实践。本书新增章节描述了jQuery和服务器端JavaScript。 本书适合那些希望学习WEB编程语言的初、中级程序员和希望精通JavaScript的程序员阅读。 作者简介 作者:(美国)弗兰纳根(David Flanagan) 译者:淘宝前端团队 弗兰纳根(David Flanagan)是一名程序员,也是一名作家,他在O’Reilly出版的其他畅销书还包括《JavaScript Pocket Reference》、《The Ruby Programming Language》、以及《Java in a Nutshell》。David毕业于麻省理工学院,获得计算机科学与工程学位。他和妻子和孩子一起生活在西雅图和温哥华之间的美国太平洋西北海岸。
pdf
发布资源于 4 年前