Spring笔记之Cloud组件 Spring笔记 由于Spring Cloud涉及的组件太多, 各个组件之间的依赖关系比较复杂, 因此为了保证项目的一致性, 任何时候都不建议手写这些配置文件. 可以使用SpringBoot官网上的Spring Initializr来获得初始项目的结构和pom文件. 如果使用IDEA, 也可以在创建的时候使用S...
Spring笔记之Web开发 Spring笔记 在Spring中, 最常使用的技术就是MVC框架, 使用Sping中的MVC框架, 可以实现将HTTP URL 映射到Controller某个方法上, 将HTTP 参数映射到Controller方法的参数上, 对参数进行检验, 调用视图等功能. 请求绑定在Controller层, 首先需要使...
Spring笔记之数据库 Spring笔记 数据库组件为了使Spring能够访问数据库,我们需要导入三个依赖,即数据库驱动mysql-connector-java,数据库连接池druid和数据库映射工具mybatis-spring-boot-starter。 为了保证版本的一致性,使用官网工具添加依赖 mybatis-spring-...
Spring笔记之基础知识 Spring笔记 本文介绍Spring体系中Spring framework的主要内容, 包括Spring的两个核心概念, 即控制反转(Inversion of Control, IoC)和面向切面编程(Aspect Oriented Programming, AOP). 这些内容是Spring的基础知识, 被...
Spring笔记之通用配置 Spring笔记 项目依赖一致性由于Spring/Spring Cloud涉及的组件太多, 各个组件之间的依赖关系比较复杂, 因此为了保证项目的一致性, 需要通过引入合适的parent文件来规定各个组件的版本. 手写pom文件比较复杂, 任何时候都不建议手写这些配置文件. 应该使用SpringBoot...
Docker笔记之构建镜像 Docker笔记 Dockerfile指令详解Dockerfile的指令不多, 只需要理解几个简单的指令就可以构建一个自定义的镜像. 一个Dockerfile一般具有如下的一些指令, 以下分别介绍这些指令的含义. 12345678FROM python:3.8-alpineWORKDIR /appCOPY a...
Java源码分析之动态代理 Java源码分析 前段时间在学习Google的Java工具库Guava, 发现其中有一个反射包, 提供了动态代理的封装功能. 深入源码一看, 发现实际上还是用了JDK提供的动态代理功能. 查阅一下网络上的相关资料, 就可以看到很多文章声称JDK的动态代理是基于反射实现的. 但仔细一想就会发现其中存在一个问题, ...
Guava学习笔记 Guava是Google开发的Java工具包, 其中提供了很多好用的Java工具类. 学习这些类的使用方法和实现原理有助于提高Java的开发效率和Java的编写水平. Guava包功能简介首先简单介绍一下Guava包中每个模块的具体功能. base包Optional 表示一个可能为null的值...
Python笔记之网络请求 Python笔记 由于Python的脚本特性, 使得Python特别适合开发网络请求的小脚本. requests库简介虽然Python自带的网络库也能够实现网络请求, 但用起来不够简单直接, 所以在条件允许的情况下, 还是直接安装requests库, 然后使用其提供的高级API能够更好的满足需求. 对于HTT...
Go语言笔记之内置模块 Go语言笔记 本文介绍Go语言最常用的模块, 包括基础的数据结构(数组, 切片, 哈希表), 基本的IO操作, 字符串操作, 并发控制和反射相关的内容. 由于Go并不是我的第一门语言, 所以本文将对照C, Java, Python等语言已有的语法进行对比. 对于其他语言中已有的内容, 会比较简略地带过. 数...
Redis学习笔记 Redis笔记 Redis是一个纯C语言实习的开源项目, 且项目中已经自带了所有的依赖. 因此在Linux平台可以非常简单的从源码编译得到Redis可执行文件. 配合Vscode可以轻松的阅读Redis源码. 在Mac平台可直接使用brew安装Redis服务端和客户端. 不建议在Windows平台查看和编译源...
Go语言笔记之基础知识 Go语言笔记 Go基础配置Go语言的下载和安装过程比较简单, 不需要进行特殊处理. 在Go安装完毕后, 需要注意两个特殊的环境变量GOROOT和GOPATH. 其中GOROOT表示Go语言安装的位置, GOPATH表示项目和依赖存储的位置. 一般情况下不需要关注GOROOT的值, 对于低版本的Go(低于1....
MySQL笔记之事务原理 MySQL笔记 在数据库原理之事务控制中, 我们从理论层面讨论了数据库的事务应该具备的一些特性. 但在实践层面, 数据库软件往往需要提供比理论要求更细致的能力, 才能满足实际业务开发的需求. 本文将以MySQL作为基础, 讨论MySQL中的数据库事务特性. 由于实现了ACID特性的数据库比没有实现ACID特性...
Netty笔记之基础知识 Netty是一个基于Java的高性能的, 异步事件驱动的网络通信框架, 其对Java的NIO进行了封装并提供简单易用的API. Netty本身是一个Jar包, 可以通过Maven进行管理. 基本概念缓存IO技术缓存 I/O 又被称作标准 I/O,大部分操作系统的的默认 I&...
MySQL笔记之性能优化 MySQL笔记 本文主要探讨MySQL的性能优化, 性能优化的基础是理解MySQL的索引结构和索引的实现原理. 在理解这些内容之后, 很多MySQL索引的特性都是显然的, 而相应的优化措施也就是直观而符合逻辑的. B+树与索引总所周知, 数据库中一般采取B+树的结构来存储数据. 一颗B+树一般具有如下的结构:...
MySQL笔记之基本配置 MySQL笔记 最近打算给服务器端的MySQL配置一个只读远程的远程账号, 找了一圈居然没有一篇博客能完整解决这个问题, 所以这篇博客会记录MySQL的一些常见需求的操作方法. 创建账号创建账号的语句非常简单, 执行如下的SQL语句, 即可创建名为lizec的用户. 1CREATE USER lizec; ...
深入理解JVM之类加载机制 深入理解JVM 类加载过程 一个类从加载到卸载的生命周期如上图所示. 其中验证, 准备, 解析三个阶段也统称为链接阶段. 加载在加载阶段, Java虚拟机需要完成三件事情 根据类的全限定名获取其二进制流 将二进制流转化为方法区的运行时数据结构 在内存中生成一个代表这个类的class对象, 作为方法区这个类各...
深入理解JVM之字节码 深入理解JVM 本文主要介绍Java虚拟机的字节码相关的内容. 由于Java字节码的独特设计, 使得大部分指令仅需要一个字节即可表示, 这也是其被称为字节码的原因. 由于Java字节码严格区分数据类型, 因此很多指令都会针对不同的数据类型单独设计一条指令. 例如load指令根据数据类型的不同, 就存在ilo...
数据结构知识库 栈的性质栈满的时候要考虑上溢的情况, 栈空的时候要考虑下溢的情况. 队列的性质设队尾指针是rear, 队头是front, 循环队列的最大长度为QueueSize, 循环队列的相关条件和公式为: 条件 代码 条件 代码 队空条件 rear==front 队满条件...
VIM笔记 由于最近经常需要在服务器端简单修改一些配置文件, 因此有必要了解一下VIM的基本操作. 此外, 目前的主流IDE基本都提供了VIM的键位映射, 虽然这些键位映射的模式并不能等同于VIM, 但大部分基本操作都是支持的. 因此掌握了VIM的基本操作还是能够在其他IDE上提高代码的编辑速度. 目前的...