Timzhouyes's Blog

纸上学来终觉浅,绝知此事要躬行。

10x程序员工作法笔记

开篇词 工作之中有两种复杂度:本质复杂度和偶然复杂度。 本质复杂度是解决一个问题的时候,无论如何都要解决的事情。偶然复杂度是因为选用的方法不当而导致要多做的事。 作者认为的四个原则: 以终为始 任务分解 沟通反馈 自动化 思考框架 在面对一个需求时,可以问产品经理: 这个特性会给用户带来什么样的价值 什么用户会用到这个特性,用户一般在什么场景下使用...

凤凰架构读书笔记

感谢作者本人的开源电子书:http://icyfenix.cn/ 服务架构演进史 原始分布式时代 远程服务调用需要考虑点: 远程的服务在哪里(服务发现) 远程服务的数量(负载均衡) 网络出现分区,超时或者出错该怎么办(熔断,降级) 方法的返回参数该怎么表示(序列化协议) 信息如何传输(传输协议) 服务权限如何管理(认证,授权) 如何保证通信安全(网络安全...

连接池相关的坑

参考课程: https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/Java%20%E4%B8%9A%E5%8A%A1%E5%BC%80%E5%8F%91%E5%B8%B8%E8%A7%81%E9%94%99%E8%AF%AF%20100%20%E4%BE%8B/04%20%E8%BF%9E%E6%8E%A5%E6%B1%A0%EF%BC%9A...

线程池相关使用辨析

参照如下: https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/Java%20%E4%B8%9A%E5%8A%A1%E5%BC%80%E5%8F%91%E5%B8%B8%E8%A7%81%E9%94%99%E8%AF%AF%20100%20%E4%BE%8B/03%20%E7%BA%BF%E7%A8%8B%E6%B1%A0%EF%BC%9A...

Java锁相关辨析

参考:https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/Java%20%E4%B8%9A%E5%8A%A1%E5%BC%80%E5%8F%91%E5%B8%B8%E8%A7%81%E9%94%99%E8%AF%AF%20100%20%E4%BE%8B/02%20%E4%BB%A3%E7%A0%81%E5%8A%A0%E9%94%81%EF%...

并发类工具库的线程安全问题

发现一个非常好的教程:https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/Java%20%E4%B8%9A%E5%8A%A1%E5%BC%80%E5%8F%91%E5%B8%B8%E8%A7%81%E9%94%99%E8%AF%AF%20100%20%E4%BE%8B 里面全是在业务相关时候的实操。 今天先讲一个并发类的使用方式: 忽略...

Java之中的 Stream 和 Lambda 编程

一些基本的注意点

参考:https://www.liaoxuefeng.com/wiki/1252599548343744/1255943847278976 什么是函数式编程 函数式编程,就是说函数可以作为参数来传入函数之中。函数也是一等公民。 Java 是一门 OOP 的语言,其本身并不支持函数式编程,但是从另一个角度看: 静态方法可以看做独立的函数(其本身不依赖某个实例),实例方法可以看做自...

Powermock学习

官方案例和自己遇到的各种问题

一些相关信息讲解 先上一个官方的测试用例: package org.powermock.examples.spring.mockito; import org.easymock.TestSubject; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.easymock.an...

Clickhouse Optimization

尚硅谷 clickhouse 进阶课程笔记

Chapter 1 Get Execution plan by Explain Before version 20.6, if we need to get execution plan we need look into the logs, from 20.6 we can use explain to get execution plan. 1.1 Basic syntax Ref...

Spring 相同类中@Transcational 相关学习

包括各种情况下的解决办法

之前遇到了一些和@Transactional 相关的问题,刚好遇到一骗比较好的博文:https://medium.com/javarevisited/spring-transactional-mistakes-everyone-did-31418e5a6d6b,将其中的内容梳理一下。 1. 为什么在同类之中直接@Transactional 不生效 比如作者在文中给出的下面的例子: pu...

Clickhouse 学习

尚硅谷教程

第 1 章 ClickHouse 入门 啥是 clickhouse? 是一个列式数据库(DBMS),主要用于在线分析处理查询(OLAP),能够用 SQL 查询实时生成分析数据报告 OLAP和 OLTP OLTP 指的是分布式事务处理,典型代表是 Mysql 这种用来做增删改查的需求,但是 OLAP 适合的是一次插入多次分析处理(聚合查询等等),相对来说更新删除效率低一些 ...

《操作系统导论》相关笔记

Operating Systems:Three Easy Pieces

本书的英文版是《Operating Systems: Three Easy Pieces》。 Preface The three pieces of OS mentioned in this book are: Virtualization: Mainly in memory Concurrency: CPU concurrency, about locks Persis...

《快学 Scala》笔记

《快学 Scala》个人学习笔记。 第一章 基础 1.2 声明值和变量 在 scala 之中,声明值或者变量但是不做初始化赋值,会直接报错 1.3 常用类型 Scala 之中,不区分基本类型和引用类型,所有的类型都是类。基本类型和包装类型之间的转换,是 Scala 编译器的工作,如果需要,包装器会直接对包装类型进行拆包 在 "h...

Redis 的 key 乱码问题

成因以及如何解决,redis 事务相关

参考:https://blog.csdn.net/m4330187/article/details/108091447 https://blog.csdn.net/Abysscarry/article/details/80557347 https://www.cnblogs.com/54chensongxia/p/13815761.html Redis 事务相关:https://www...

Flink DataStream 实践

20 | DataStream API 实践原理 Flink Datastream 程序一般分为五个部分: 设置运行环境: StreamExecutionEnvironment. 管理相关运行时候的参数,加上一些比如 checkPoint 这些的管理。 配置数据源来读取数据:env.readXXX() 进行一系列的转换...

Flink部署模式剖析

部署模式,资源管理器支持和高可用

集群的部署模式,主要是以下两种条件来将其分成三种类型: 集群的生命周期和资源隔离: 生命周期:也就是整个 Runtime 是否随着 job 的结束而销毁 资源隔离:多个 job 共享一个 jobManager 还是为每一个 job 提供一个 jobManager 根据程序的main()方法是在 client 上面执行还是在 job...

Flink 集群架构剖析

包括JobManager, TaskManager, Client 和 JobGraph

本文之中会先将对应的执行步骤做一个梳理,然后对每一个模块之中的大致功能做一个介绍。 参考:https://time.geekbang.org/course/detail/100058801-278257 Flink 集群架构 其中需要注意的点是: 和 Spark 不同,这里面的 Client 只是用来做一个解析生成的工作,本身不需要和 taskManager 通信来获得相应...

Flink 极客时间笔记

03 | 流处理技术概览 下面是一些流处理技术比较。可以看到所有方面都符合的,只有 flink 05 | Flink核心特性 flink 提供了统一的组件栈 支持多种时间概念:event time, ingestion time, process time 等等 基于轻量级分布式快照(snapshot)实现的容错:结合 checkpoint 能够做到 exactly-...

Flink 架构基础介绍和 slot 相关

参考:https://www.cnblogs.com/rossiXYZ/p/13554085.html https://ci.apache.org/projects/flink/flink-docs-release-1.11/zh/concepts/flink-architecture.html https://ci.apache.org/projects/flink/flink-doc...

AOP和AspectJ

一些简要梳理,相关的demo做法和相应的规则列表

参考:https://zhuanlan.zhihu.com/p/144550148 AOP在某些场景下面,比如同样的重复逻辑部分很好用,而目前一个比较好的实现就是AspectJ。 这个博主的一种解释我觉得很好:OOP是竖向抽取,其是将几个类之中的共同部分抽取出来,变成一个父类,再用继承父类的方式来消除这种类之中的冗余代码。 那么AOP这种“横向抽取”, 就是再深入一层,将方法之内的重复...

Flink相关学习

尚硅谷网课

012 尚硅谷 Flink理论 Flink运行架构(二)Slot和并行度 到底什么是slot?和taskManager又有什么关系? https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/concepts/runtime.html#task-slots-%E5%92%8C%E8%B5%84%E6%BA%90 ...

《Java编程思想》阅读笔记

第一章 对象导论 Java之中的单根继承和C++之中的多重继承相比之下好在哪? 其简单的讲。如果一个类型既有父类1又有父类2,那么如果父类1和父类2都有一样名字的方法,但是实现不同,则会出现冲突。 并且在这种基础上,其interface和abstract class又进行了进一步的简化,interface之中不允许有任何的实现,然而abstract class允许,那么这种情况下就可...

Unix缩写风格

各种命令缩写

无聊和乏味的工作是罪恶 – Eric S. Raymond 构建于图形界面之上的操作系统,使用鼠标作为主输入设备, 是否使用缩写并不重要。比如 Windows 系统中的目录,几乎都是全称…… 点击两次鼠标进入文件夹 pf, 并不意味着点击13次才能进入文件夹 Program Files 而构建于命令行之上的操作系统,如 Linux,只要3个字母以上的单词,几乎都要缩写。 例如: cd ...

Shell是如何执行命令的

命令的执行过程梳理

从第一行的#!开始,Shell是如何执行命令的? 参考:https://linuxtoy.org/archives/shell-programming-execute.html#id3 从#!开始 开头的声明是讲文本文件的内容是交给哪个解释器来解释的。 比如:#!/bin/bash,就是将文本文件的内容交给bash去自行。 但是不同的系统之中这个文件的位置可能不同,这种情况下该怎么...

大型分布式项目的分库分表


MySQL的部分规范梳理

在网络上找到了一些资料,自认为自己之前对于MySQL相关的规范还不是很熟悉,今天就来好好梳理一下。 参考 命名规范 基本命名规则 使用Snake方式命名 禁止超过32个字符,见名知意,建议使用名词而非动词 数据库和数据表的使用前缀: 临时库和临时表必须使用tmp作为前缀,并且日期作为后缀(后缀这个可以用来区分不同版本的临时表) 备份库,...

Shell奇奇怪怪的操作符

Shell自我学习过程之中的梳理

最近在接老项目,是由Python和Shell编写的。而且其中对于逻辑调用处理的部分主要采用的是Shell。早就知道这个难啃,但是想不到其中奇奇怪怪的操作符那么多。今天就来好好梳理一下。 1. 奇怪的操作符 $?是做什么的? $? is used to find the return value of the last executed command. Try the follo...

SQL知识点自我学习

包括一些基本用法

Learn SQL and related things. Today I went through one online exam about the SQL, and here is the notes for me to do some summarisation. SELECT One thing need to learn is select different values:...

《从0开始学大数据》笔记

一转眼一月过去,这一个月主要在忙业务,忙代码,很难空出专门的时间进行自我学习。既然看起来这个状况不会有什么改变,那就改变自己的学习习惯,见缝插针,也会有很大收获。 最近在学习的就是极客时间上面的《从0开始学大数据》。 下面的标题是课程的节号。有些自己觉得有新的想法的点会记在这里。 9. 为什么我们管Yarn叫作资源调度框架 下面是Yarn的本身的架构图: 实际上我们可以看到有两套主...

学习函数式编程

对一些基本概念的理解和掌握

简直就像是递归一样……学Scala之前我们要先弄懂什么是函数式编程。 来吧!让暴风雨来的更猛烈些吧! 笔者先来一句直接概括: 函数式编程,是只关注操作而不关注实现的一种编程方式。函数可以作为参数传入另一个函数,且不改变传入参数的值。 参考资料: https://coolshell.cn/articles/10822.html http://www.ruanyifeng.com/b...

Scala Study

Some defination and example code

Found that if you want to know how to operate Spark, it is better to know how to use Scala. So learn Scala first~ Scala is a language which based on JVM, and there are a lot of similarities betwe...

Future相关学习

剖析FutureTask,附带一些代码样例

在Java之中,多线程的调用方式主要是两个,一个是Future,一个是Thread。当然,在多线程的情况下建议使用的是ThreadPool,但是本文为了突出原理,直接手动开多线程!今天就主要来学习一下Future相关的知识。 警告:本篇有些硬核,如果想看相关的总结简析可以直接看开始的重点! 简略版: 1. 是什么? Future实际上是我们想让其他线程执行耗时任务时候的一个”收货凭证...

剪枝算法和部分题解

对剪枝算法的一点个人研究

学习一下剪枝。下面是个人笔记梳理和心得。 1. 概念 剪枝,在机器学习之中的定义是:通过解决决策树过拟合,为了降低模型复杂度的一种手段。在我们的算法学习过程之中,其意义也是相似的,即通过剪枝来删除掉某些不可能成立的情况,从而帮助我们减少时空复杂度。 剪枝的目的: 剪枝就是为了降低算法复杂度,也就是在搜索空间之中剪掉绝对不可能得到解的部分来减小搜索空间。 剪枝的三原则: 正确...

Airflow简介

包括一些简单示例

作为一个Data Engineer,往往大家都是从ETL开始做起。那么Airflow就是ETL之中不可缺少的一个工具。 本文会对相关的基础概念进行介绍,并且搭配一些例子。 参考 1. 简介 先讲什么是ETL。ETL是Extract, transform, load三个词的组合,先看Wikipedia的定义: In computing, extract, transform, ...

学习ThreadLocal相关

对于一些基础知识的简析


什么是“精确一次”?

精确一次的简介和实现方式简析

在很多流系统之中,比如 Flink,kafka和其他的等等之中有一个被广泛讨论的特性:精确一次(Exactly once),但是到底什么是“Exactly once”?怎么才算是实现了”exactly once”?下面进行一下浅析。 参考 1. 背景 本文分析了流计算系统中常说的”exactly once”特性,主要观点是:exactly once 并不保证完全一样。 参考 ...

Kill之中-9和-15的区别

kill的原理初探

kill是Linux之中比较常用的命令之一,那么kill之后带有的参数不同,从而导致的结果不同这一点,自己之前没有详细的了解过。今天看到一篇相关的博文,也算顺带自己做一下梳理和总结。 原文地址 0. 从一个问题引起 作者是从一个问题引起的:一个线上服务总是出现Full GC,这个问题我们之前写过解决方案: 总是出现Full GC,很有可能是出现了内存泄露,即使是线上的环境,需要迅速恢...

Apache架构师总结的30条设计原则

与个人的一些小心得

不想当架构师的后端不是好程序员 :) 看到了一篇文章,之中讲述了一个Apache的架构师提出的30条架构原则。看了一下, 发现对于架构设计,特别是分布式的架构设计很有帮助,在这里对于每一条,进行一下自己的梳理,希望可以有所收获。 转载文章地址 一. 基本原则 1. KISS(Keep it simple, stupid) 保持每件事情尽可能的简单,用最简单的解决方案来解决问题。 ...

RESTful初探

简介,优点和缺点

本文主要解决三个问题: 什么是RESTful? RESTful的优点是什么? RESTful的缺点是什么? 1. 什么是RESTful RESTful,简而言之,就是使用URL来定位资源,用HTTP动词来描述操作。 这个即是其优点,又是其缺点:在所需要传递的信息可以被抽象成状态的时候,可以极大的简化URL,但是对于某些性质是行为的信息则无能为力。 比如: GET ...

《剑指offer》学习(一)

面试的基础知识

《剑指offer》作为被很多前辈提及过的好书,自然有其精妙之处。 那就学起来吧! 1. 数据结构 大部分面试题围绕的数据结构有: 数组,字符串:都是连续空间,一个存储数字(狭义上而言),一个存储字符。 链表和树:出现的频率比较高,虽然在Java之中,没有显式的指针操作,但是实际上对于对象的操作都是直接操作指针的。 栈和队列:栈是先入后出,所以其和递归紧密相关——由于最后...

LeetCode 动态规划 Java实现

包含题解和想法

基于参考,进行自己的解读和代码编写。 动态规划,要将问题进行转换,从底到顶的进行求解。同时,要能将状态的转换抽象出状态转移方程,将方程之间的状态流转表示出来。 先放一下学习笔记: Lucifer的动态规划讲解 Lucifer 讲义笔记 1. 如何练习递归 作者在这里提出来一个观点:可以将平时的迭代写法全部变成递归写法,比如“将字符串逆序输出”。那么作者认为迭代和递归可以完成同样的...

LeetCode 双指针专题 Java实现

包含题解和想法

上一份是二叉树的实现和想法,觉得在总结之中放入题目过于冗余,因为大家都会打开leetcode来看原题是什么,因此这份总结之中将题目部分删去,便于阅读。 在下面的资料基础之上加上个人的理解,部分代码进行明晰化,不搞缩写。 仍然是参考大佬:https://github.com/CyC2018/CS-Notes/blob/master/notes/Leetcode%20%E9%A2%98%E8...

一些网络问题梳理

包括证书密钥泄露和DNS的anycast

今日发现了在证书链传递过程之中和DNS相关的一些问题没太搞清楚,再来总结一下,把问题摸清。 1. 证书私钥泄露了怎么办? 参考:https://www.anquanke.com/post/id/183339 假设证书链之中的某一个环节,其私钥被泄露出去了,那么该怎么办? 这种情况就需要吊销证书了。那么如果证书的状态是已吊销,怎么能够让其他的终端知道这个证书已经被吊销呢? .1 远古...

LeetCode树专题 Java实现

包含题解和想法

刷题,就得按照专题刷。 二叉树,其构成为一个根节点,且必定有两个子节点。在最下面的叶子层全都是为空的子节点。 那么每次以其左子树和右子树作为操作单位,就很自然的将整个树拆分成了更小的树,并且可以结合最后的叶子节点层全都是Null来进行递归的结束判定,可以说树这个结构是天然适合递归的。 参考:https://github.com/CyC2018/CS-Notes/blob/master/...

gitlab CI与DockerFile初探

初步梳理

因为使用的就是gitlab-ci,加上在开发环境和测试环境上面在部署的时候使用的是docker和kubernetes,今天来初探一下其过程和区别。 1. gitlab-ci 用法 参考: 作者:浦东飞猪老莲 链接:https://zhuanlan.zhihu.com/p/68371743 来源:知乎 下面就以我自己手头的这份文件作为剖析: stages: - test - ...

BigDecimal如何保证计算精度

与transient方法初探

参考:https://zhuanlan.zhihu.com/p/71796835 在计算机之中,我们知道一切都是二进制的,那么对于一个数字而言,其在内存之中的长度是有限的,这种情况之下,其也就只能保存有限的数字(必须可以表示为2的n次幂)。 这种情况之下,小数的表示就很难了——比如0.3,就没法精确表示。但是生活之中的小数操作是必不可少的,比如钱数的加减。如何使这些操作尽可能的精确呢?就...

一些杂项问题梳理

1. WebSocket是什么原理?为何可以实现持久连接? websocket是一个协议,其是借助HTTP进行连接,在连接完成之后切换成WebSocket协议。 且websocket可以主动推送信息给客户端。 2. 什么是JMM? JMM,Java Memory Model,其是一种符合内存模型规范的,屏蔽了各种硬件和操作系统差异的,保证了Java程序在各种平台下面对内存的访问都能保...

Java常见的性能问题和排查

CPU占满,内存泄露,死锁等问题

参考文章:https://mp.weixin.qq.com/s/fcYbt3wUhcZlBeZy0RfgGQ 本文主要梳理四种情况:CPU 100%,内存泄露OOM,死锁——无法创建新线程和线程频繁切换导致系统性能下降。 0. 工具梳理 0.1 top top命令是我们最常用的Linux命令之一,它可以实时的显示当前正在执行的进程的CPU使用率,内存使用率等系统信息。top -Hp ...

JVM浅谈

参考:3y的和纯洁的微笑的文章。 1. 类加载机制 对于一个Java Bean: 我们写一个测试类: 我们都知道,使用javac来编译代码,使用java命令来运行代码。 1.1 java编译过程和语法糖的处理 javac是java源码的编译过程,编译由三个过程组成: 分析和输入到符号表 注解处理 语义分析和生成class文件 语法糖的处理: 我们在平...

Redis综合梳理

还是看3y的公众号总结。 1. Redis底层数据结构实现 此处是 Redis 设计原则的书:http://redisbook.com/preview/object/string.html Redis底层是K-V对,其键值只能是String,但是Value可以是以下五种形式。 其创建一个新的K-V对的时候,K和V会分开创建,也就是说一次创建两个对象。 1.1 String 在...

Spring家族详解

参考资料:3y的文章 1. Spring AOP & IOC 1.1 是什么?有何特点? IOC:依赖反转,解决的是对象管理和对象依赖的问题 AOP:面向切面编程,解决的是非业务代码抽取的问题。 1.2 怎么用? IoC:我们将对象的依赖关系交给Spring,需要对象的时候就去Spring之中去取。 好处: 将对象统一管理...

Java集合初探

还是天问五连:是什么?有什么特点?怎么用?如何实现?有什么要注意的地方? 走! 1. Collection 2.1 什么是Collection Java是一门面向对象的语言,那么有的时候我们需要对不止一个对象进行处理,这种情况就需要”集合“,也就是Collection来存放对象。 2.2 怎么用? 可以看出很多方法,比如 size(),contains(),iterator(...

浏览器输入URL之后都发生了什么?

先做个假设: 一个 Chrome 浏览器 一台 Linux 服务器 发起 HTML 请求 不考虑任何缓存和优化机制 采用 HTTP/1.1 + TLS/1.2 + TCP 协议 1. URL解析 HSTS 由于安全隐患,会使用HSTS强制客户端使用HTTPS来访问页面。 HSTS是可以防止中间人劫持的一种有效方式。 参考资料:https://www.bar...

多线程相关总结

包括多线程,线程池,Synchronized实现等等

参考资料:Java3y的文章。 以后,对于基础知识点的梳理,我都会通过五问:是什么?有什么特性?怎么用?怎么实现?有什么坑(使用的时候要注意什么)? 1. 为什么要使用多线程? 首先,目前的CPU一般都是多核的,如果在多核CPU上同一时刻只跑一个线程,那未免太浪费了。另外,对于IO密集型操作,CPU等待IO的时间比较长,这段时间其实也是浪费掉了的。那么多线程就可以有效的利用多核或者IO...

重新梳理计算机基础

包括Java,数据库,数据结构等等

1. Java 1.1 面向对象一定比面向过程性能差吗? 1.2 Java 的多态性 多态之中是父子相关的性质。其标识是父类引用对象可以指向子类引用对象: 父类类型 变量名字 = new 子类类型(); 那么对于方法和变量,到底以谁为准呢? 多态成员变量:编译运行看左边 Fu f=new Zi(); System.out.printl...

内存管理之页表

页,帧和偏移量

一个32位机器,如果采用一级页表,要使用4MB的内存来做页表。如何计算出这个结论的? 为什么32位的系统内存最大为4GB? 下面请看走近科学。 1. 虚拟内存和物理内存 在操作系统之中,进程是资源分配的最小单位。那么也就是说每一个进程都有独立的一块资源。这里的资源包括: 页表——对应虚拟内存资源 文件描述符表——对应打开的文件资源 寄存器——对应运行时数据 信号控...

进程,线程彻底剖析

与进程,线程间通信问题梳理

如何理解”进程是分配资源的最小单位,线程是操作系统调度的最小单位?“ 都说”进程很重“,那么到底重在哪? 进程间的通信到底是什么情况? 请听小周为你一一道来。 参考:https://blog.csdn.net/pange1991/article/details/84770181 1. 什么是计算机资源? 我们正在使用的冯诺依曼体系的计算机,将资源抽象成了三种: 计算资源+存储资...

常见的HTTP状态码梳理

包括几种状态码之间的联系

话不多说。 参考https://juejin.im/post/5c2320266fb9a04a006f0e20 1. 1xx 信息性状态码 100: 服务器接受到请求,但是还没做出响应 举例:在淘宝上面买了东西,订单生成成功,但是还没发货。 2. 2xx 成功 200: 成功。正常处理 204: No Content: 成功,但是没有要返回的内容。像发送了空包裹。 206: ...

算法和数据结构相关

在刷题之中遇到的好问题与心得

此处主要是记录一些自己觉得精彩的LeetCode题解和心得。 1. Tree 预备. AVL 树 AVL树是一种平衡二叉树,其平衡因子(某个节点的左子树的高度减去右子树的高度得到的差值)的绝对值都不超过1。在每次添加或者删除的情况下,其都会进行检验,如果不满足这个条件,就进行相应的左旋和右旋,从而使其满足平衡因子的差值的绝对值不超过1的要求。 那么为什么在许多数据结构之中使用红黑树而...

递归梳理

如何设计和使用递归

递归算是一个困扰我很久的问题,之前觉得总是转不过来弯,今天试着详细的梳理一下,将这个地方搞透。 参照:https://chenqx.github.io/2014/09/29/Algorithm-Recursive-Programming/ 1. 概念 递归算法,其实质是将问题分解成规模缩小的同类问题的子问题,然后递归的调用自身来解决问题。 递归算法的特点有: 在方法里面调用自...

Build a Spring from Zero(2)

Import Exception, meet Single Responsibility Principle, create ApplicationContext and ClassPathXmlApplicationContext

1. Refactor code: import Exception and retest Last article we said that the way only use try catch is not user-friendly. So toady we put them together and build a hierarchy tree like this: To t...

Build a Spring from Zero(1)

Create class from XML file

1. IoC and AOP IoC: Inversion of Control, or Dependency Injection(DI). In my understanding, it is we put business class and configuration file into Spring container, and then it can produce a syst...

二叉树三种顺序遍历的递归和非递归算法

个人对于递归的一点总结

二叉树之中的遍历分为几种情况,前序,中序,后序。在三种顺序之中又有递归和非递归两种。下面就结合一些资料和我自己的总结,将这几种的区别讲清楚。 乍一看这三种遍历方式可能有点糊涂,实际上很好区分,在一棵二叉树之中有根节点和左右子树,左子树必须在右子树之前遍历,那么可以选择的也就是根节点的顺序了。 如果操作顺序是: 根-左-右,那么就是前序遍历 左-根-右,那么就是中序遍历 左-右-根,...

《Java特种兵》阅读笔记(4)

第四章-Java通信,交互就需要通信


《Java特种兵》阅读笔记(3)

第三章-JVM,Java程序员的OS

第三章 - JVM,Java程序员的OS 3.2 跨平台和字节码基本原理 3.2.1 javap 命令工具 public class StringTest { public static void main(String[] args) { String a = "a" + "b" + 1; String b = "ab1"; S...

学习Algorithm思想(1)

第零章、必读系列

看到 Github 的 trend 上面有个迅速攀升的 repo,一看是讲如何面对算法和如何解决算法的。刚好在家闲来无事,学习一下。 https://github.com/labuladong/fucking-algorithm 能看到真的说人话的教程真的很幸运,不要放弃这种学习透彻的机会。 学习数据结构和算法的框架思维 作者首先讲了,本 repo 的目的就是给数据结构和算法做一个框...

《Java特种兵》阅读笔记(2)

第二章-Java程序员要知道计算机工作原理

接着学习这本书。 第2章 Java 程序员要知道计算机工作原理 2.1 Java 程序员需要知道计算机工作原理吗? 这一章主要讲解CPU,内存,磁盘等等角度来看的 计算机的基本原理。也通过缓存来理解优化设计,讲解系统的 I/O 和数据库交互的关系。 2.2 CPU的那些事儿 2.2.1 从CPU联系到 Java 首先我们清楚,每个进程或者是线程发送操作请求之后,最后会由 cpu ...

《Java特种兵》阅读笔记

第一篇——Java功底篇

开干。 第一章:看看功底如何 1.1 String的例子,见证下功底 下面看看 equals() 怎么用: package JavaTeZhongBing; public class Chapter1_1 { public static void main(String[] args) { String a = "a" + "b" + 1; ...

Java ClassLoader 解析

与 ClassLoader 源码分析

本篇是小周和你读源码(1) 系列的文章。 在读 Java 源码之中的 Class 源码时(没错,这句话在Class源码开篇似曾相识),发现其中很多东西是和 ClassLoader相关的,那么还是要将 ClassLoader 之中的一些概念性问题搞清楚。下面就是学习心得: 参考:https://blog.csdn.net/briblue/article/details/54973413 ...

Class源码解析

本篇是小周和你读源码(1) 系列的文章。 本是准备先看Boolean类,但是发现其中涉及到了太多关于Class类的内容,如果不先了解 Class 类,很难进一步将其讲清,因此转而先写本文。 还是先从概述开始吧。 概述 /** * Instances of the class {@code Class} represent classes and * interfaces in a...

Go语言接着学

按照官方教程学学Go,顺带加一些自己的笔记

学学Go,顺带记录一些自己的笔记。 基础知识 Named return values Go 的返回值可以被命名。但是在语言之中引入了一种机制,使其如果没有命名也不会报错。 如果没有命名,那么直接就会按照函数之中引入的顺序来进行返回,比如下面这段代码: func split(sum int) (x, y int) { x = sum * 4 / 9 y = sum - x re...

RocketMQ初步总结和辨析

消息队列和RocketMQ入门总结

看到一篇文章之中对消息队列和RocketMQ做了初步的总结,觉得比较好,在此加上自己对于部分功能的解释在这里写一篇。 原文链接:https://juejin.im/post/5df0825b51882512420af94a 参考链接:https://www.cnblogs.com/chjxbt/p/11407890.html 消息队列简介 对于消息队列,之前有过梳理,此处只是对之前叙...

服务器临时导流本地环境

记录一点ssh的小操作

今天遇到了一个问题:由于staging上面的版本与我要开发的版本差了一版。所以我没有办法将代码merge到staging环境之中。那么怎么满足测试的需要呢?这就涉及到下面的骚操作:开个口子,将流量打到本地来。 假设服务器环境的段口为8803,我们本机上面的段口是8080。那么我们怎么打过来呢? 其实只要两步就好了: 将线上环境的nginx对应的条目改成 http://localh...

算法学习

开篇与第一章基础

要想当一个好的程序员,算法功底是必不可少的。种一棵树最好的时间是十年前,然后是现在。开搞! 我学习算法所使用的书籍是那本红皮的《算法》。 下面是一些自己总结的知识点,大部分比较零碎,就当做是个人笔记了吧。 第一章 基础 1.1 基础编程模型 1.1.10.1 二分查找 二分查找之中,我对其函数的结束条件感到十分精妙,先放代码: package Cha1Sec1; /** *...

学习corntab 定时任务

记一次项目之中定时任务的学习

由于今天要写一个定时任务的项目,今天学习一下crontab的写法。 https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html crontab用来干什么? 通过corntab,可以在固定的时间间隔上面执行指定的系统指令,或者是shell script 脚本。不只是时间间隔,也可以是某个或者某些时间点。 命令...

MySQL面试相关问题

对于互联网行业而言,MySQL是非常重要的一环。 除了我们刚刚梳理过的MySQL之中索引的部分知识之外,还有其他的一些MySQL相关的知识点需要我们去掌握。在之前的一些文章之中有过梳理,在此总结一篇我认为很好的文章,作为一个综合性的整理。 学习文章地址: http://huyan.couplecoders.tech/mysql/笔试面试/2019/07/10/MySQL面试一百问/ ...

MySQL之中索引的部分知识

包含某些MySQL的面试题目解析

在日常生活之中,MySQL的索引原理还是非常重要的,也是一个程序很多时候的瓶颈所在。本文会梳理包括MySQL 索引和其他的一些MySQL 知识,下面就开始讲。 下面是参考的博客地址: http://huyan.couplecoders.tech/mysql/读书笔记/高性能mysql/2019/06/01/Mysql索引原理及其优化/ 什么是索引 先上定义: 索引是存储引擎用于快速...

Java 之中的泛型和类型擦除

参考:https://blog.csdn.net/xiangwanpeng/article/details/77896340 https://blog.csdn.net/s10461/article/details/53941091 本文的顺序是先讲泛型,然后讲关于类型擦除的问题。 泛型 概述 首先要解决的问题:什么是泛型?为什么要使用泛型? 这是网上一段内容的引用: 泛...

Java反射简析

包括部分modifier的介绍

参考: https://juejin.im/post/598ea9116fb9a03c335a99a4 概述 Java反射机制,指的是在程序 运行 的时候,对于任意一个类, 可以知道这个类的所有属性和方法, 对于任意一个对象,可以调用这个对象的所有属性和方法。 这种动态的获取信息和动态的调用对象的方法的功能被称为Java的反射机制。 反射机制最重要的就是“运行时”,其使得我们可以使用...

小周和你读源码(1)

对于java.lang部分代码的阅读提纲

今天开始梳理以下 java 的底层源码,第一部分打算从 java.lang,这个最基本的包开始。不知道这个系列多久可以完成,但是希望自己可以一直坚持下去。 本来认为,看源码就要把一个类吃透了再吃下一个,但是后来真正阅读的过程之中发现,类和类之间相互交错,想要彻底的将一个类看透对我目前而言过难,所以决定先以广度为主,将代码的大部分功能做初步的了解。 顺带一提,之前自己看openj9的代码,...

Boolean源码解析

java.lang 源码阅读与Wrapper类的简析

本篇是小周和你读源码(1) 系列的文章。 因为是第一篇,所以先尝试使用分段解释的方法。以后可能会有改动。 总概 首先是这个类的作用: /** * The Boolean class wraps a value of the primitive type * {@code boolean} in an object. An object of type * {@code Bool...

CORS相关梳理

CORS的概念和同源政策相关的梳理,加上AJAX梳理

学起来! 阮一峰相关博文: http://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html https://www.ruanyifeng.com/blog/2016/04/cors.html 同源政策概述 含义 同源政策(Same-origin policy),最开始是指A网页设置的Cookie,B网页不能打开,除非这...

对于不同域名之间浏览器Cache处理方式的小探究

记一次RabbitMQ的排查处理

今天遇到了一个很有趣的问题,是这样的: 在 develop 环境和 staging 环境上,有两套版本不同的 RabbitMQ,均需要通过跳板机进行端口映射再使用。 但是在 staging 环境上是可以用 127.0.0.1 和 localhost 登录的,在 develop 环境上面就只可以用 localhost 登录。 目标:在两个环境之下都可以使用 127.0.0.1 和 loca...

对Kubernetes的port部分的具体梳理

包括clusterIP如何使用等等

下面是对于Kubernetes 的各种port如何使用的梳理。 在k8s 之中,有三种port: port, targetPort 和 nodePort。 下面是cluster 和 service 的关系示意图: 所有的service在同一个cluster之中,互相之间可以直接通信。直接通信可以通过 <clusterIP>:<port> 或者 service...

对于Spring Feign的一些学习总结

包括一个官网负载均衡教程的自我总结

教程地址:https://www.jianshu.com/p/a0d50385e598 在工作之中对于Spring Feign 的应用比较多。Feign,作为一个声明式的 Web Service 客户端,提供了HTTP 请求的模版,只要通过简单的编写接口和插入注解,就可以定义HTTP的参数,格式地址等等信息。而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用就可以完成服务请...

SpringBoot使用RedisTemplate操作Redis

自己的一些理解和感悟

在感叹完Spring对于程序的大大简化之后,在这里总结一下Redis在Spring之中的使用技巧。Spring将Redis封装成一个RedisTemplate,所以本文之中主要总结的是如何使用这个RedisTemplate。话不多说,现在开始。 参考文章地址:https://www.cnblogs.com/superfj/p/9232482.html 本博客之中之前对于Redis的部分学...

Kubernetes官方教程个人笔记

一些自己的理解和记录

本文是对于官方教程的个人笔记和记录。主要是自己认为一些比较重要的点的总结。 在之前的文章之中提到过,我们和k8s进行沟通的唯一渠道是通过 API 的 endpoint。 kubectl 就是这样一种使用 API endpoint 来进行沟通的方法。换言之,我们在使用 kubectl 的时候,就是在使用 K8s 的 API 进行沟通。 kubectl 命令...

Kubernetes入门简明教程

与K8s的一些基本概念辨析等等

今天写完了任务的API,之后对于后端的要求是学习一下K8s,本篇文章的意义是对于自己学习过程的某些记录。正文开始。 文章地址:https://www.toocruel.net/kubernetes-ru-men-jian-ming-jiao-cheng/ Kubernetes 概述 K8s是一个底层资源和容器之间的一个抽象层。我自己的理解,这里指的是一个统一管理,统一布置的中间管控层。...

Docker Compose File explaination

Simple analyse on examples from official website

How to depoly docker image to server, based on constructed CI/CD pipeline? This article is about the specific steps and details on it. 1. Example Code There are several versions of Conpose file: ...

关于Redis,MyBatis和Spring之中问题的一点梳理

包括SpringBean,以及Lua脚本的一些杂谈

最近在极限做项目的过程之中真的学到了很多……当然压力也真的很大,总是担心自己会成为团队的瓶颈,所以只能更逼自己去make it. 今天分配我的第一阶段的任务已经结束了,正好趁这个周五,马上要从北京回到坡县的晚上,在马上要去理发的间隙,静下心来好好梳理一下最近的收获和心得. 话不多说,开搞! 1. 关于 Redis 部分的总结 在新项目的过程之中,Redis的部分是我第一次遇到。 之前的,...

关于API设计和Spring的一点记录

总结一下最近踩到的坑

做中学的确是最快学习的方式……开冲 1. 对API设计的一些经验总结 下面是针对应用内部,即前端对后端的API的设计之中总结的一点经验。 命名:前端对后端的API不应叫做 Internal API,Internal API 是内部的一些功能,是不对用户开放的,比如黑名单设置等等。前端对后端的API应直接叫做 API 在API的设计之中,命名和URL设计的原则要让人一眼知道其作...

MyInfo 使用方法

对于MyInfo 的 API 调用做一点小结

MyInfo API Data 数据分为两种:政府确认数据和用户个人提供数据。 政府确认数据,是从政府的信息源拿到的,不可以以电子形式更改。个人提供数据是User自己在MyInfo APP 之中提供的,可以以电子形式更改。 FAQ MyInfo 不支持IP白名单,但是可以白名单下面的Fully Qualified Domain Names: test.ap...

学习Go语言

阅读《The way to Go》

趁着在间隙的时间,把Go入个门。虽说语言只是工具,但是学学也是比不学要好。 阅读环境在:https://github.com/unknwon/the-way-to-go_ZH_CN/blob/master/eBook/directory.md 作者的中文译本是经过官方授权的,不必担心版权问题。 话不多说。实战。 前言 本书由这样几部分组成: Go语言起源和开发环境 Go语言核...

《阿里巴巴Java开发手册》总结与理解

和个人的一些感悟

经各位大佬推荐,想要把 Java 弄明白一点,就看一下《阿里巴巴 Java 开发手册》,那就开始呗。 看了看发现 《码出高效》 这本书更适合,那就改成看这本书了…… 第一章 计算机基础 以下的基础问题: 位移运算可以快速的实现乘除运算,那位移的时候要注意什么? 浮点数的存储与计算为什么总会产生微小的误差? 乱码产生的根源是什么? 代码执行的时候,CPU 是如何配合内...

数据库设计和一些业务注意的要点

包括数据库索引设计

数据库在任何的业务之中都非常重要,尤其是对于互联网企业的业务,大部分都是“数据密集型”,说白了,不同于游戏等“计算密集型”业务,其主要就是将数据传输和搬运给需要的人,那么这种场合下面,数据库的设计就更重要了。 本文之中,我对于数据库的索引,结构和一些其他需要注意的细节方面做一些简要的梳理。下文的很多情况是针对于互联网公司的,高并发访问、低频写入、高频读取、产生大量日志、单个业务逻辑简单、分...

学习Shell

Shell简析和基本操作介绍

已经想不出该在这里说什么了,开工…… 参考:http://www.runoob.com/linux/linux-shell.html 1. Shell 简介和 Shell 环境 Shell 既是一种命令语言,又是一种程序设计语言。 Shell 提供了一个应用程序,其提供了一个界面,用户通过这个界面进行访问操作系统内核 的操作。 1.1 Shell 环境 本教程之中所说的 Shel...

MyBatis 入门

对于XML和annotation的SQL语句做一些梳理和总结

高产似母猪之中的母猪…… MyBatis 因为其支持定制化 SQL,存储过程等等,而且避免了几乎所有的JDBC 代码和手动设置参数,以及获取结果集等等这些操作,深受广大被折磨的程序员的欢迎. 由于环境配置已经存在,那么我就直接略过环境配置的环节,直接上干货啦! 1. XML 映射文件 官方说明是:由于MyBatis 的映射语句的强大,其映射器的XML 文件变得相对简单,相对于同功能的...

学习 Groovy

包括Groovy基本知识和闭包(clousure)相关

Groovy 是一门基于 JVM 的动态语言,既可以面向对象编程,又可以用作纯粹的脚本语言。在学习 Java 语法的情况下会很容易学习,下面就是 Groovy 和 Java 语法的不同之处的学习。 学习教程:https://www.kancloud.cn/kancloud/learnxinyminutes/58931 Groovy基础 1. 与Java的异同 Groovy可以作为 J...

高性能,高可用网站架构研究

对高性能网站的一点梳理

看到一篇文章,手把手教你构建一个高性能、高可用的大型分布式网站,其中将 大型分布式网站 的架构做了一个梳理,那就自己看着学习一下。 1. 大型网站的特点与架构目标 下面是一般的大型网站的特点: 用户多,分布广泛 大流量,高并发 海量数据,服务 高可用 安全环境恶劣,易受网络攻击 功能较多,迭代较快,发布比较频繁 从小到大,采取渐进发展的发展方式 大型网站架...

Linux基础知识

在后端开发过程之中需要知道的 Linux 基础知识

要做一个合格的后端开发,只会一点 Java 是远远不够的。Linux 作为一种历史”长远“的操作系统,若想将每个细节都说清楚属实太难,本篇文章之中,将一些基础的 Linux 概念和使用方法进行一定的梳理,感谢下面的参考资料: 后端程序员必备的Linux基础知识 1. 从认识操作系统开始 ……这里就不多讲了,再多讲就像科普了…… 1.1 操作系统简介 下面是作者的四点操作系统介绍: ...