- 博客(23)
- 收藏
- 关注
原创 异步操作返回原始上下文
在讨论同步上下文执行回调的概念时,我们首先需要了解一些基本概念:同步与异步操作、上下文以及回调函数。当提到“同步上下文中执行回调”,主要是指确保异步操作完成后,其回调函数将在最初的同步上下文中执行。这对于维护UI更新的一致性特别重要,因为在许多UI框架中,所有UI相关的操作都必须在创建它们的原始线程(通常是主线程)上执行。如果不这样做,可能会导致跨线程访问错误或其他并发问题。例如,在C#中使用async和await关键字进行异步编程时,默认情况下,await。
2025-03-04 16:00:40
924
原创 运行时的相互关系——类型,对象,线程栈,托管堆
M3的下一行调用Employee的静态方法Lookup,调用静态方法时,CLR定位对应的类型对象(这里是Employee类型对象),然后JIT编译器在该类型对象的方法表中查找与被调用方法对应的纪律项,对方法进行JIT编译(第一次执行该方法)。同时,如果代码中存在的所有引用类型(如示例中的Employee,Mananger,Int32,Sting)CLR会确认这些类型的所有程序集都已加载,利用程序集中的元数据,CLR提取这些类型的相关信息,在托管堆中创建一些数据结构来表示该类型本身。
2024-11-27 14:01:27
584
原创 一、CLR基础——首先搞明白它是一个什么东西,做哪些事情,起什么作用
公共语言运行时(Common Language Runtime CLR)是一个可由多种编程语言使用的“运行时”,核心功能包括:内存管理,程序集加载,安全性、异常处理和线程同步,可由面向CLR的所有语言使用。
2024-10-16 09:25:23
2300
3
原创 Mybatis中mapper文件中sql语句的几点
一、resultMap中的映射关系resultMap:设置自定义映射resultMap标签的属性: id:该自定义映射的唯一标识type:查询的数据要映射的实体类的类型resultMap的子标签: id:设置主键的映射关系result:设置普通字段的映射关系resultMap的子标签的属性: property:设置映射关系中实体类中的属性名column:设置映射关系中表中的字段名二、参数占位符的映射#{id}是MyBatis中的参数占位符,用于接收传入的参数值。
2024-01-14 15:43:16
1331
1
原创 单例模式学习笔记
在Java中,单例模式是一种常用的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。然而,当多个线程同时访问单例对象时,可能会引发线程安全性的问题。
2023-11-30 16:36:31
450
1
原创 Spring IOC容器的创建过程
当使用注解来定义Bean时,我们通常会结合`@Component`、`@Service`、`@Repository`、`@Controller`等注解来标识Bean,并使用`@Autowired`注解来进行依赖注入。总的来说,Spring IOC容器的创建过程包括了加载配置文件、实例化容器、实例化Bean、注入依赖、初始化Bean等步骤,最终使得应用程序能够通过IOC容器来管理和使用Bean对象。4. 注入依赖:一旦Bean对象被实例化,容器会根据配置文件中的依赖关系,将相应的依赖注入到Bean中。
2023-11-30 11:30:05
1510
1
原创 IOC容器——控制反转,DI注入
控制反转(IoC)是一种设计原则,它将控制权从应用程序代码中转移到外部容器或框架。传统的程序设计中,应用程序代码通常负责创建和管理对象之间的依赖关系,而在IoC容器中,对象的创建和管理由容器来负责。IoC容器通过反转了传统的对象创建和管理方式,使得应用程序更加灵活、可扩展,并且更容易进行单元测试。依赖注入(DI)是IoC的一种实现方式,它是指将对象的依赖关系通过外部注入的方式来实现。
2023-11-28 18:29:54
912
原创 Java注解学习
/ 名字// 年龄// 性别public String gender() default "男";// 开发语言//课程名称//课程标签//课程简介//课程序号自定义两个注解以后,尝试去使用它们@CourseInfoAnnotation(courseName = "java基础", courseTag = "基础课",courseProfile = "Java相关的核心知识“
2023-11-28 11:21:44
1492
原创 关于Java反射的学习笔记
Java反射是指在运行时检查或操作一个类、接口、字段或方法的能力。通过Java反射,可以在运行时获取类的信息、调用方法、访问字段等,而不需要在编译时知道这些信息。
2023-11-27 18:56:05
977
1
原创 工厂模式学习笔记(简单工厂模式、工厂方法模式、抽象工厂模式)
当需要添加新的产品类型时,只需要创建新的具体产品类和对应的工厂类,而不需要修改已有的代码。但是随着新产品类的不断增加,对应工厂类也随之增加,系统类的个数成倍增加,增加了系统的复杂度,还需要创造同等数量的controller类,使代码变得臃肿。总的来说,工厂模式通过将对象的创建和使用分离,使得系统更容易扩展新的产品类型,而不需要修改已有的代码,从而符合开闭原则的设计原则。工厂方法模式,是简单工厂模式的进一步抽象和扩展,保留了简单工厂的封装优点,让扩展变得简单,让继承可行,增加了多态的体现。
2023-11-27 18:04:50
880
1
原创 关于ArrayList的自动扩容
指在程序运行过程中,由于空间的分配和释放不规则,形成了很多不连续、空闲的内存片段,使得原本容易找到连续空间的程序运行变得困难。内存中的空闲区域是不连续的,当需要分配一个大段的内存时,就会因为找不到足够的连续空间而产生问题。这种情况常常发生在反复分配和释放内存的场景中,例如大数据量的操作或多次执行动态数组扩容等。
2023-11-25 15:49:07
826
原创 Java迭代器(Iterator)
接下来,我们使用`hasNext()`方法检查是否还有下一个元素,如果有,则使用`next()`方法获取下一个元素并打印出来。- 统一的遍历方式:迭代器提供了一种统一的遍历方式,适用于各种集合类型,无需关注集合的具体实现。- 安全性:使用迭代器遍历集合时,不会修改集合的结构,避免了在遍历过程中产生的并发修改异常。- `E next()`: 返回集合中的下一个元素,并将迭代器的指针移动到下一个位置。- 无法修改集合:使用迭代器遍历集合时,不能修改集合中的元素,只能删除最后访问的元素。
2023-11-25 15:34:15
553
原创 Java并发——锁(重入锁)
这样,当某个线程在等待获取锁的过程中被中断时,可以及时退出等待状态,避免线程长时间等待锁而无法响应中断。重入锁采用基于CAS操作的方式来实现锁的获取和释放,相对于synchronized关键字的互斥方式,重入锁的性能更高。总而言之,重入锁是一种功能强大且灵活的锁机制,它提供了可重入性、公平性、可中断等待和条件变量等特性,可以更好地满足不同并发场景的需求,并提供更好的性能和可靠性。3. 可中断等待:重入锁支持可中断的等待方式,可以更好地处理线程的中断请求,避免线程长时间等待锁而无法响应中断。
2023-11-24 13:18:17
1536
1
原创 Java并发——锁
在乐观锁中,线程在读取数据时不会阻塞其他线程的读取或写入操作。在悲观锁中,线程在读取数据时会阻塞其他线程的读取或写入操作,以确保数据的一致性。通过使用compareAndSet方法来比较并设置counter的值,只有当counter的值与预期值相同时才更新counter的值。重入锁是一种可重入的互斥锁,它允许同一个线程多次获取同一个锁。通过创建两个线程并分别使用lock和unlock方法来获取和释放锁,确保对counter变量的互斥访问。锁是用于实现并发控制的一种机制,不同类型的锁适用于不同的并发场景。
2023-11-24 11:46:52
363
1
原创 关于Java异常的基本使用和理解
在上面的示例中,我们定义了一个长度为5的数组`arr`,然后尝试访问索引为10的元素,这将引发`ArrayIndexOutOfBoundsException`异常。然后,在`MyClass`类中的`doSomething`方法中抛出了这个自定义异常。在`Main`类的`main`方法中,我们通过try-catch块捕获并处理了这个异常。一个方法必须声明所有可能可能抛出的检查型异常,而非检查型异常要么在我们的控制之外(Error),要么应该从一开始就避免错误情况的发生(RuntimeException)
2023-11-24 10:07:09
402
1
原创 关于Java多线程并发的整理笔记
为了进一步提高资源利用率,人们在进程中,引入了线程,线程只是CPU轮流调度的单位,其他上下文信息用所在进程中的。得益于CPU的计算速度,我们可以“同时”运行多个任务,实质上是多个任务之间轮流使用CPU资源,由于速度超快,给用户的感觉就是连续的。需要注意的是,直接调用线程对象的run()方法并不会创建新的线程,而是在当前线程中以普通方法的方式执行run()方法。3. 提高资源利用率:多线程可以使得程序在等待某些资源的时候,可以继续执行其他任务,充分利用CPU的时间片,提高了资源的利用率。
2023-11-23 23:51:26
1648
原创 关于Mysql的笔记
MySQL索引可以理解为一本书的目录,它提供了一种快速查找数据的方式。当我们在数据库表中创建索引时,MySQL会根据索引列的值创建一个数据结构,通常是B+树。这个数据结构按照索引列的值进行排序和组织,以便快速定位和访问数据。假设我们有一张存储学生信息的表,其中包含学生的姓名、年龄和成绩等列。如果我们希望根据学生姓名进行查询,而没有索引,那么MySQL需要逐行扫描整个表,直到找到匹配的学生姓名。这个过程非常耗时,尤其是当表中数据量很大时。
2023-11-23 17:49:13
90
原创 关于MyBatis 中的一级和二级缓存的整理
SqlSession 是一个接口,提供了一些 CRUD 的方法,而 SqlSession 的默认实现类是 DefaultSqlSession,DefaultSqlSession 类持有 Executor 接口对象,而 Executor 的默认实现是 BaseExecutor 对象,每个 BaseExecutor 对象都有一个 PerpetualCache 缓存,也就是上图的 Local Cache。中,在两次查询之间进行了其他的增删改等操作,当第二次查询进行时,就会重新执行 SQL 语句,导致缓存失效;
2023-11-23 13:21:15
76
原创 关于使用js,jQuery来实现循环渲染添加多个元素
以上是部分代码段,当一开始forEach循环使用innerHTML添加页面元素的时候,效果是这样的。元素中,从而实现了循环出多个元素的效果。元素内部追加新的内容。只添加了一个元素,其原因是因为。只会保留最后一个元素,而使用。元素内部的所有内容,而改用。会将每次循环的内容都追加到。
2023-11-22 09:57:39
859
1
原创 JWT笔记
(session方式,服务器会把用户信息保存到session缓存中,同时将对应的sessionId保存到Cookie中并响应给前端浏览器,校验时根据Cookie中的sessionId从session缓存中获取session,因为session缓存存放在各个服务器中,因此在分布式系统中不适用)最后,算出签名以后,把Header、Payload、Signature三个部分拼成一个字符串,每个部分之间用点(.)分隔,就可以返回给用户了。JWT原理是,服务端认证通过以后,会生成一个json对象,发回给客户端。
2023-11-20 23:10:19
58
1
原创 mybatis的实现原理学习笔记
*** 根据配置文件的路径,加载配置文件成字节输入流,存到内存中* @return*/在使用段调用/*** 传统方式(不使用mapper代理)测试*/@Test// 1.根据配置文件的路径,加载成字节输入流,存到内存中 注意:配置文件还未解析映射配置类:存放mapper.xml解析内容/*** 映射配置类:存放mapper.xml解析内容*/// 唯一标识 statementId:namespace.id// 返回值类型。
2023-11-19 21:45:15
105
1
原创 springboot常用注解
Autowired跟Spring框架强耦合了, 如果换成其他框架,@Autowired就没作用了。而@Resource是JSR-250提供的,它是Java标准,绝大部分框架都支持。
2023-11-19 21:42:47
77
1
原创 关于MyBatis-plus踩的一个坑 Unsatisfied dependency expressed through field ‘baseMapper‘: No qualifying bean
但是我检查了@Mapper注解以及Application方法上添加了扫描的注解@MapperScan,显然并不是这里的代码有问题。在这里添加了一个userService的注入以后,就启动不了了。又经过多轮排查后,还是没有头绪,最后去检查pom文件里的依赖,这里把版本修改为3.5.3.1之后,就完美解决了。根据报错信息来看,是没找到Mapper。这是一个新建项目的目录结构。
2023-11-19 17:41:27
930
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人