- 博客(49)
- 收藏
- 关注
原创 Go之数组和切片
1. 数组和切片数组是具有相同唯一类型的一组已编号且长度固定的数据项序列 切片是内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大package mainimport "fmt"/* append函数会改变slice所引用的数组的内容,从而影响到引用同一数组的其它slice。 但当slice中没有剩 余空间(即(cap-len) == 0)时,此时将动态分配新的数组空间。 返回的slice数组指针将指...
2022-03-02 15:35:39
806
原创 Go之流程语句
1. if语句package mainimport "fmt"/*if语句格式:if 布尔表达式 { 在布尔表达式为 true 时执行}if 布尔表达式 { 在布尔表达式为 true 时执行} else { 在布尔表达式为 false 时执行}if 布尔表达式1 { 在布尔表达式1为 true 时执行} else if 布尔表达式2{ 在布尔表达式1为 false ,布尔表达式2为true时执行} else{ 在上面两个布尔表达式都为false时,执行}*/fun
2022-03-02 14:32:45
61
原创 Go之基础语法
1. 基础数据类型布尔型: 布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true整数型: int8 有符号 8 位整型 (-128 到 127) 长度:8bit int16 有符号 16 位整型 (-32768 到 32767) int32 有符号 32 位整型 (-2147483648 到 2147483647) int64 有符号 64 位整型 (-9223372036854775808 到 922337
2022-03-02 10:43:47
56
原创 Spring之面向切面(AOP)
1. 如果没有Spring框架,我们需要在每个service的方法中都添加记录日志的方法,如下:public List<User> findUserList() { System.out.println("execute method findUserList"); return this.userDao.findUserList();}2.有了Spring框架,通过@Aspect注解 定义了切面,这个切面中定义了拦截所有service中的方法,并记录日志; 可以.
2022-02-28 11:19:08
421
原创 Spring之控制反转(IOC)
1. 如果没有Spring框架,我们需要自己创建User/Dao/Service等,如下:UserDaoImpl userDao = new UserDaoImpl();UserSericeImpl userService = new UserServiceImpl();userService.setUserDao(userDao);List<User> userList = userService.findUserList();2. 有了Spring框架,可以将原有Bean的创
2022-02-28 11:03:54
309
原创 Semaphore(信号量)实现应用
package cn.itcast.Demo21.JUC;import java.util.concurrent.Semaphore;public class ConnectPool { // 连接池大小 private int size; // 数据库连接集合 private Connect[] connects; // 数据库连接状态 private boolean[] connectFlag; // 剩余可用连接 private.
2022-02-25 10:31:41
74
原创 分布式唯一ID
package cn.itcast.Demo21.algorithm;// 雪花算法生成的id采用long整型存储,即64位=12位序列号+10位机器标志号+41位时间戳+1位符号位public class SnowFlake { // 采用时间戳占用位数 private final static long START_STAMP = 1645581043000L; // 序列号占用的位数 private final static long SEQUENCE_BIT =.
2022-02-23 16:50:30
50
原创 JAVA之日期处理
package cn.itcast.Demo20.日期处理;/** * JAVA8所有日期和时间API都是不可变的并且线程安全的,而现有的Date和 Calendar API中的java.uil.Date和SimpleDateFormat是非线程安全的 */import java.time.*;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoUnit;import java.util.Dat.
2021-10-11 11:06:50
273
原创 Spring之数据库连接JDBC
1. 第一种方式:使用spring自带的DriverManagerDataSource<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.
2021-09-25 13:16:37
494
原创 Spring之默认标签的解析
private void parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) { // 对import标签的处理 if (delegate.nodeNameEquals(ele, IMPORT_ELEMENT)) { importBeanDefinitionResource(ele); } // 对alias标签的处理 else if (delegate.nodeN.
2021-09-22 17:42:06
197
原创 Intellij IDEA 调试技巧
Step 系列按钮日常调试的过程中为了为了找到程序的 bug,通常需要单步调试,一步一步跟踪程序执行的流程,根据变量的值,找到最终原因。IDEA 中提供一系列 Step 功能按钮用于单步调试,可以在 Run 菜单栏找到全部 Step 功能。另外在调试窗口也可以找到,不过这里只会显示一部分常用按钮。调试过程中,使用频率最高的可能就是 Setp Over。Setp Over 可以单步调试代码,但是当碰到方法执行时,不会进入方法内,直接调用了方法,然后到下一行。如果需要进入方法内,
2021-09-12 10:30:21
418
原创 Spring源码之资源文件处理相关类
1. InputStreamSource 意义:封装任何能返回InputStream的类,比如File、Classpath下的资源和ByteArray等 源码:public interface InputStreamSource { /** * Return an {@link InputStream} for the content of an underlying resource. * <p>It is expected that ea...
2021-09-08 19:08:18
90
原创 Spring源码之核心类XmlBeanDefinitionReader
1. 意义 XmlBeanFactory对DefaultListableBeanFactory类进行了扩展,XmlBeanFactory使用了自定义的XML读取器XmlBeanDefinitionReader对资源文件进行了读取和注册2. 结构层次图
2021-09-07 10:32:34
52
原创 Spring源码之核心类DefaultListableBeanFactory
1. 意义 该类是整个bean加载的核心部分,是spring注册及加载bean的默认实现2. 层次结构图
2021-09-06 20:42:44
48
原创 Spring源码调试环境搭建
1. spring源代码下载地址:https://github.com/spring-projects/spring-framework, 本文所用版本5.2.x2. 安装Gradle:Gradle下载地址: https://services.gradle.org/distributions/注意:需要下载的gradle版本,这个需要和jdk和gradle插件的版本对应起来安装中遇到的问题(一):之前编译5.2.x版本的源码,遇到错误,...
2021-09-05 10:15:58
887
原创 数据结构之向量实现
import java.util.Arrays;import java.util.RandomAccess;import jdk.internal.util.ArraysSupport;/** * @Classname Vector继承自AbstractList,实现了Stack类 * @note:Vector是线程安全的,ArrayList不是线程安全的 * @note:Vector底层是一个可以增长的数组组成的,通过capacity和capacityIncrement来尽量少的占用空间.
2021-09-04 16:47:10
137
原创 数据结构之栈的实现
import java.util.EmptyStackException;/** * @Classname Stack:栈是一种线性数据结构,遵从LIFO(后进先出)的操作顺序,所有操作都是在顶部进行 */public class Stack<E> extends Vector<E> {/** * Stack的构造函数:跟Vector 一样,它是数组实现的栈 */ public Stack() {};// 构造函数/** * Stack的入栈:Vector的a.
2021-09-04 16:45:44
76
原创 集合类源码之迭代器ListIterator
/** * @Classname ListIterator:Iterator的一个重要子接口,增加了6个方法 * @see:为需要双向遍历数据时准备的,在后续ArrayList和LinkedList分析时会用到 * @see:在遍历时修改List的元素 * @see:在遍历时获取迭代器当前游标所在位置,注意长度为N的集合会有N+1个游标的位置,第一个元素位置为0,第一个游标位置为-1,在第一个元素前 * @date 2021年7月5日 下午3:00:14 * @Version 1.0 */.
2021-09-04 16:44:13
113
原创 集合类源码之LinkedList(八)
import java.util.AbstractSequentialList;import java.util.NoSuchElementException;import jdk.jfr.internal.PrivateAccess;/** * @Classname LinkedList:采用链表方式实现的队列,因此所有操作都在Node节点上,每个Node节点首尾相连,存有数据和前后指针 * @note:LinkeList实现了List和Deque接口,因此能够像使用ArrayList一样.
2021-09-04 16:41:10
58
原创 集合类源码之Deque(七)
/** * @Classname Deque:双端队列,继承Queue,直接实现的有LinkedList\ArrayDeque\ConcurrentLinkedDeque * @note:Deque定义了分别在头部、尾部进行插入、删除、获取元素 * @note:实现类LinkedList:大小可变的链表双端队列,允许元素为null * @note:实现类ArrayDeque:大小可变的数组双端队列,不允许为null * @note:实现类LinkedBlockingDeque用于并发场景,如果队.
2021-09-04 16:39:32
89
原创 集合类源码之Queue(六)
/** * @Classname Queue:继承子Collection接口,实现类包括Deque、LinkedList、PriorityQueue、BlockingQueue * @note:Queue用来存放“等待处理元素”的集合,所以常运用于缓冲、并发访问、阻塞队列、多线程等领域 * @note:Queue除了继承Collection接口的一些方法,Queue还添加了额外的添加、删除、查询等操作,均提供了两种形式, * 一种操作失败时直接返回异常,另一种则返回一个特殊的值 * @no.
2021-09-04 16:37:11
52
原创 IDEA+Gradle
导语:IDEA拥有大量的JAVA开发者拥护,相比于开源的eclipse,IDEA拥有更简洁直观的界面,拥有更强大的自动补全功能,号称能“一路敲回车完成编码”。如果把IDEA和eclipse比作手机系统,IDEA就好比IOS,美观、强大、人性化、傻瓜化,官方就帮你解决了大部分问题与操作。eclipse更像android,自由、开放、高度可定制,通过一系列的插件也可以达到IDEA同样的、甚至更个性化的体验,但是操作不免让人感觉复杂、上手难。Gradle作为build工具的新星,受到谷歌的大力拥护,直接
2021-09-04 09:35:04
871
原创 集合类源代码之迭代器Iterable
import java.util.Objects;import java.util.Spliterators;import java.util.function.Consumer;/** * @Classname Iterable:所有集合类实现了Collection接口,而Collection继承了Iterable接口 */public interface Iterable<T> { /** * @note:为什么集合类一定要实现Iterable接口,但并不直接实现I..
2021-09-03 19:50:29
90
原创 集合类源码之迭代器Iterator
import java.util.Objects;import java.util.function.Consumer;/** * @Classname Iterator:Iterator是foreach遍历的主体 * @note:Iterator是一个集合上的迭代器,用来替代Enumeration进行遍历和迭代 * @note:Iterator和Iterable的区别和联系?集合实现类都会重写Iterable接口的Iterator()方法,返回适合自己的迭代器 * @date 2021年7.
2021-09-03 19:28:38
53
原创 集合类源码之ArrayList(五)
import java.util.Arrays;import java.util.Objects;import jdk.internal.util.ArraysSupport;import jdk.nashorn.api.tree.ForInLoopTree;import sun.jvm.hotspot.utilities.GrowableArray;import sun.security.util.Length;/** * @Classname ArrayList:是Java集合框架中.
2021-09-03 16:49:33
138
原创 集合类源码之List(三)
import java.util.Objects;import java.util.function.UnaryOperator;/** * @Classname List:是Collection三大直接子接口之一,其他两大子接口包括Set和Queue接口 * @see:List针对线性表结构的,提供了对位置以及子表的操作,其数据可以为空,也可以重复,可以为null * @note:List的实现类主要包括ArrayList\LinkedList\Vector。其中ArrayList作为默认选.
2021-09-03 16:45:14
54
原创 集合类源码之AbstractList(四)
/** * @Classname AbstractList:AbstractList抽象类继承自AbstractCollection, * AbstractCollection抽象类要求子类实现iterator()和size() * @note:AbstractList抽象类实现了iterator()方法,但没有实现size()方法,还提供了抽象方法get(), * 因此子类ArrayList必须要实现get()和size(),子类想要修改元素得重写add()\set()\remove(..
2021-09-03 16:38:51
84
原创 集合类源码之AbstractCollection(二)
import java.util.Arrays;import jdk.internal.util.ArraysSupport;/** * @Classname AbstractCollection:实现了一些方法,也定义了几个抽象方法留给子类实现,因此是个抽象类 * @note:Collection接口的定义和继承的Iterable都可以在这个抽象类中实现,可以减少实现类需要实现的方法 * @note:如果要实现一个不可修改的集合,只需要重写iterator和size接口 * @note:如.
2021-09-03 16:16:48
80
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人