- 博客(42)
- 收藏
- 关注
原创 国产编程—— 仓颉
中文字符编码和文本数据处理:仓颉编程语言充分利用汉字的结构特点来设计编码,为开发者提供了一种高效的方式来编码、存储和处理中文字和词组。内嵌Agent DSL的编程框架:仓颉提供了面向开发者全套的内嵌Agent DSL的编程框架,便于开发者高效的完成鸿蒙AI原生应用开发。自主可控:仓颉编程语言没有基于任何现有的编程语言演进,从语言规范的制定到实现以及未来的语言社区都将实现自主可控。仓颉编程语言作为一款国产自研编程语言,在应用中具有显著的优势,在代码显示上简洁明了,未来发展前景广阔。
2024-06-24 09:51:05 2272 1
原创 MySQL有哪些锁?作⽤是什么?
AUTO-INC 锁:表⾥的主键通常都会设置成⾃增的,之后可以在插⼊数据时,可以不指定 主键的值,数据库会⾃动给主键赋值递增的值通过 AUTO-INC 锁实现的。在插⼊数据 时,会加⼀个表级别的 AUTO-INC 锁,然后为被 AUTO_INCREMENT 修饰的字段赋值递 增的值,等插⼊语句执⾏完成后,才会把 AUTO-INC 锁释放掉。全局锁主要应⽤于做全库逻辑备份,这样在备份数据库期间,不会因为数据或表结构的更新, ⽽出现备份⽂件的数据与预期的不⼀样,加上全局锁,意味着整个数据库都是只读状态。
2024-06-22 11:12:58 793
原创 ⼀条SQL查询语句是如何执⾏的?
2. 查询缓存:MySQL拿到⼀个查询请求后,会先到查询缓存看看,之前是不是执⾏过这条语句。之 前执⾏过的语句及其结果可能会以key-value对的形式,被直接缓存在内存中。或者在⼀个语句有多表关联 (join)的时候,决定各个表的连接顺序。3. 分析器:你输⼊的是由多个字符串和空格组成的⼀条SQL语句,MySQL需要识别出⾥⾯的字符串 分别是什么,代表什么。5. 执⾏器:MySQL通过分析器知道了你要做什么,通过优化器知道了该怎么做,于是就进⼊了执⾏ 器阶段,开始执⾏语句。
2024-06-22 11:05:21 273
原创 java每日一题:static与final的区别
无论创建多少个类的实例,静态变量都只有一份拷贝,它们存储在JVM的方法区中,随着类的加载而加载,随着类的消失而消失。静态代码块:static修饰的代码块是静态代码块,它在类加载时执行一次,常用于初始化静态变量或执行一些只需要执行一次的代码。static修饰的成员属于类级别,随着类的加载而加载,可以通过类名直接访问,主要用于实现共享数据和工具方法等。final修饰的成员表示不可改变,用于确保类、方法、变量的最终性,避免被继承、重写或修改。final表示不可改变的最终形态,用于修饰类、方法、变量等。
2024-06-20 09:33:14 600
原创 java每日一题:接口与抽象类的区别
接口是一种特殊的类,只包含抽象方法(在Java 8及以后版本中,接口可以包含默认方法和静态方法),不能拥有构造方法、字段等。实现接口的类必须实现接口中定义的所有方法。抽象类是不完整的类,包含抽象方法和非抽象方法,可以拥有构造方法、字段、静态和非静态方法等。子类继承抽象类时,必须实现抽象类中定义的所有抽象方法。如果需要定义一组公共的方法和属性,并且这些方法和属性可以被子类继承和实现,那么应该使用抽象类。如果需要实现多继承、插件开发、回调函数、规范和约束或单元测试等应用场景,那么应该使用接口。
2024-06-20 09:31:05 385
原创 redis每日一题:Redis哨兵是如何工作的
(2)向每个master节点特殊的pubsub中发送master当前的状态信息和哨兵自身的信息。(1)哨兵要知道整个集群的拓扑关系,因此每隔10秒会向master节点发送info命令,返回信息中,包含了每个slave节点的端口号。首先,要选举出来一个哨兵领导者,由这个哨兵领导者进行故障恢复操作,选举协商的过程,在分布式领域叫做共识算法。(4)确认回复后,所有哨兵都无法达到多数选票的结果,那么进行重新选举,直到选出领导者为止。哨兵节点可以发现其他哨兵的加入,进而方便多个哨兵的通信。提升新的master。
2024-06-18 09:59:26 583
原创 sping怎么解决循环依赖
在初始化A的时候发现需要注入B,此时就从三级缓存中寻找B,发现没有B,将B实例化并且放入到第三层缓存中,初始化B,B在初始化的时候需要注入A,于是从第三层缓存中的A单例bean的创建工厂创建出一个“半成品”A,放入到第二层缓存中,同时注入到B中,此时B初始化完成,放入到第一层缓存中。接着继续初始化A,将第一层缓存中的B注入到A中,此时A初始化完成,将半成品A从第二层中删除,将创建好的A存放到第一层缓存中。解决循环依赖的流程如下:假设有两个bean:A和B,且两个bean之间出现循环依赖。
2024-06-17 20:22:45 702
原创 javab每日一题:在spring里有哪些常用注解?
这些注解大大简化了Spring应用的配置和开发过程,提高了代码的可读性和可维护性,同时也符合了Spring的“约定优于配置”(Convention over Configuration)的理念。作用: 用于定义通知,结合@Aspect使用,分别表示在方法执行前、方法执行后、方法执行前后、方法正常返回后、方法抛出异常后执行的逻辑。作用: 这三个注解分别用于标识服务层、持久层、控制层的Bean。作用: 与@Autowired一同使用,指定要注入的Bean的名称,解决多个相同类型的Bean被注入时的歧义性。
2024-06-17 20:21:24 660
原创 事务的四大特性有哪些
4. Durability持久性:指事务提交后,其结果应该永久保存到数据库中,即使系统崩溃或断电也要保证数据不会丢失,也就是说,一旦事务成功提交,则对数据库中的数据所做的更改就是永久性的。2. Consistency一致性:指事务执行前后数据库的状态必须保持一致性,即事务前后数据库所处的状态应该满足某些约束条件,例如某些数据不能为NULL,某些数据之间应该满足某些关系等。1. Atomicity原子性:指事务是一个不可分割的最小操作单位,要么全部执行成功,要么全部回滚失败,不会出现只执行了一部分的情况。
2024-06-15 10:05:55 267
原创 数据库的隔离级别
当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)的问题,为了解决这些问题,就有了“隔离级别”的概念。SQL标准的事务隔离级别包括:读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(serializable )可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。
2024-06-15 10:03:32 149
原创 java面试:Redis事务的相关命令
EXEC:执行所有在 MULTI 开始之后,EXEC 执行之前添加到队列中的命令。WATCH:监视一个或多个键,一旦其中任何一个键被修改,服务器将拒绝执行事务。DISCARD:取消事务,清空事务队列中已入队的所有命令。MULTI:标记一个事务块的开始。UNWATCH:取消对所有键的监视。
2024-06-14 23:47:11 393
原创 java面试题:redis过期键的删除策略
定期删除:Redis通过内部定时任务定期扫描并删除已经过期键,防止过期积累。惰性删除:仅在访问键时检查其过期状态,若已过期则立即删除。
2024-06-14 23:45:37 334
原创 java面试题:hashMap扩容机制
在扩容过程中,需要重新计算每个元素的哈希值和在新数组中的索引。但在HashMap中,为了提高效率,当数组长度为2的幂时,会采用(n - 1) & hash的方式来计算索引,其中n为数组长度。当HashMap中的元素数量超过容量与加载因子的乘积时,就会触发扩容操作,通过创建一个新的、容量更大的数组来重新调整HashMap的大小和内部结构。扩容完成后,HashMap的容量变为原来的两倍,同时阈值(即容量与加载因子的乘积)也相应地更新为新的值。创建一个新的Entry空数组(即新的哈希表),其长度是原数组的两倍。
2024-06-13 19:32:11 300
原创 java面试题:强缓存和协议缓存
强缓存是通过设置HTTP响应头来实现的缓存策略,它告诉浏览器在一定时间内直接使用缓存的副本,而不需要再向服务器发起请求。如果服务器返回的状态码指示缓存失效,将返回新的资源内容,并带有新的缓存相关的响应头,浏览器将使用新的资源并更新缓存。协商缓存则在强缓存失效时进行,通过请求头中的条件信息来验证缓存的有效性。协商缓存是在强制缓存失效的情况下进行的一种机制,用于验证缓存的有效性。在强缓存失效时,通过协商机制验证缓存的有效性,减少不必要的数据传输。no-cache:表示需要使用协商缓存来验证缓存的有效性。
2024-06-13 17:50:42 275
原创 2024年,计算机相关专业还值得选择吗?
进入2024年,计算机相关专业依然保持着极高的吸引力和价值,对于有志于在科技领域发展的学生而言,这是一个充满机遇和挑战的选择。选择计算机专业意味着你将站在技术发展的最前沿,参与塑造未来的技术格局。技术的快速迭代为创业者提供了无限可能,许多成功的科技企业和产品都源自计算机专业背景的创始人持续学习与成长:计算机科学是一个快速发展的领域,要求从业者具备终身学习的态度。总之,2024年及以后,计算机相关专业不仅值得选择,而且对于那些对技术充满热情、渴望在数字时代发挥影响力的人来说,它是一个充满潜力和机遇的领域。
2024-06-12 13:13:14 298
原创 java面试题:springMVC的执行流程
异常处理器可以对特定异常进行统一处理,避免代码中出现大量的try-catch代码块。DispatcherServlet根据请求中的URL和HandlerMapping找到对应的Controller对象,HandlerMapping是一个接口,定义了请求的URL和对应的Controller的映射关系。一旦有了Controller对象,DispatcherServlet将请求交给该Controller进行处理,Controller会根据业务逻辑调用Service层的方法,并将结果返回。
2024-06-12 10:22:56 468
原创 java面试题:线程池的作用
在大规模的并发场景下我们创建线程和销毁线程就会消耗很多cpu的性能,如果我们有一个线程的池子,当我们要执行任务的时候,只需要从线程池中获取一个线程去使用,使用完毕后,再将线程归还到线程池中供下一个任务去使用,这样就实现了一个线程的复用,可以减少创建和销毁线程的开销。上下文切换开销:线程在运行时,会频繁发生上下文切换,即交出当前线程的CPU执行权限,并保存其状态,切换到另一个线程上运行,然后再恢复前一个线程的状态。线程池通过复用已有的线程,减少线程的创建和销毁次数,降低上下文切换开销,提高系统性能。
2024-06-12 10:12:58 196
原创 java面试题:CPU飙高问题如何排查
1.查看任务管理器:首先,打开任务管理器(Windows)或使用类似的工具(Linux上的top命令),找出哪个程序或进程正在占用大量的CPU。2.检查程序内部:找到高CPU占用的程序后,检查程序内部是否有问题,比如可能有无限循环或内存泄漏。6.代码审查和优化:如果在性能剖析中找到了问题代码,进行代码审查并优化。7.重启服务:有时,简单地重启相关服务或应用程序就能解决问题,尤其是在资源问题或内部状态异常的情况下。8.持续监控:最后,建立监控机制,定期检查系统的性能,以便及早发现和解决潜在的性能问题。
2024-06-11 23:57:01 903
原创 java面试题:数据库死锁问题如何排查
1.调整事务隔离级别:通过将事务隔离级别降低为读未提交(或读已提交,可以减少死锁的发生概率。4.设置合理的超时时间和重试机制:当发生死锁时,可以设置适当的超时时间,在一定时间内尝试解锁操作。如果超过设定的时间仍未成功,则进行死锁处理,如终止较早请求的事务或进行回滚等。2.优化查询和事务逻辑:分析造成死锁的原因,优化查询语句和事务逻辑,尽量缩短事务持有锁的时间,减少死锁的可能性。需要根据具体情况分析和实施相应的解决方案,并进行测试和验证,以确保解决死锁问题,并提高数据库的并发性。
2024-06-11 23:53:40 736
原创 java面试题:hashCode的作用
总结来说,hashCode在Java集合中起到了至关重要的作用,它通过提供一种基于哈希的快速查找和定位机制,显著提高了集合操作的效率。在并发集合框架(如ConcurrentHashMap)中,hashCode()方法被用于实现分桶策略,将不同的对象映射到不同的桶中,从而减少线程之间的竞争和冲突,提高并发性能。如果两个对象的hashCode不同,那么这两个对象在哈希表中一定位于不同的位置,因此可以立即判断这两个对象在集合中是不相等的,无需进一步调用equals()方法进行比较。
2024-06-10 10:09:38 414 1
原创 java面试题: HashMap、HashSet 和 HashTable 的区别
HashMap 允许使用 null 键和 null 值,但 HashSet 不允许 null 元素(因为 null 键在 HashMap 中是允许的,但 HashSet 是基于 HashMap 的键集合实现的)。Hashtable 是一个同步的 Map 接口的实现,因此是线程安全的。由于 Hashtable 是同步的,因此在多线程环境下,如果你不需要同步,使用 HashMap 会更加高效。它基于 HashMap 实现,因此不包含重复元素的特性是由 HashMap 的键的唯一性保证的。
2024-06-10 09:41:16 1398 1
原创 java面试题:ArrayList扩容的过程
ArrayList的扩容过程是一个自动化的过程,通过检查当前容量、计算新容量、创建新数组、复制元素和更新引用来实现。为了减少扩容操作的次数,可以在添加大量元素之前,通过ensureCapacity(int minCapacity)方法提前设定ArrayList的容量。对于有参构造方法创建的ArrayList,例如ArrayList<数据类型>(8),当集合已经添加完8个元素之后,会按照原来容量的1.5倍进行扩容,即12个元素的容量。根据计算得到的新容量,ArrayList会创建一个新的更大的数组。
2024-06-09 08:45:33 278
原创 java面试题:java三大特性多态又是如何实现的
子类可以重写父类的方法,当子类对象调用该方法时,会执行子类重写后的方法,而不是父类的方法。在上面的示例中,虽然animal1和animal2都是Animal类型的引用,但它们分别引用了Dog和Cat对象。因此,在调用makeSound()方法时,会根据引用所指向的实际对象类型来确定要调用的方法,这就是多态性的体现。其中,多态(Polymorphism)是面向对象编程中一个非常重要的概念,它允许不同的对象对同一消息做出不同的响应。对象引用:在Java中,对象引用是静态的,但引用所指向的对象是动态的。
2024-06-09 08:24:51 313
原创 国内大模型写高考作文-新课标I卷
文心一言随着互联网的普及、人工智能的应用,越来越多的问题能很快得到答案。那么,我们的问题是否会越来越少?以上材料引发了你怎样的联想和思考?请写一篇文章。要求:选准角度,确定立意,明确文体,自拟标题;不要套作,不得抄袭;不得泄露个人信息;不少于800字。文心一言。
2024-06-08 18:58:01 573 1
原创 java面试题:java运行时的常见错误
它们通常是编程错误或逻辑错误的结果,如访问空指针(`NullPointerException`)、数组越界(`ArrayIndexOutOfBoundsException`)、类型转换错误(`ClassCastException`)、算术运算错误(`ArithmeticException`)等。- **Error** 类通常指示的是非常严重的故障,这些错误通常是不可恢复的,比如虚拟机内存不足(`OutOfMemoryError`)或堆栈溢出(`StackOverflowError`)。
2024-06-08 17:57:57 506
原创 java面试题:什么时候使用抽象类?什么时候使用接口
1. **多实现与解耦:** 接口允许一个类实现多个接口,这提供了多重继承的功能,增加了灵活性和解耦。3. **定义类型族的行为:** 如果你需要定义一个类型族的通用行为,其中一些行为是固定的而其他行为需要由子类具体化,抽象类就很合适。4. **未来扩展性:** 接口提供更好的扩展性,因为可以在不修改现有接口用户代码的情况下添加新的接口,而抽象类一旦定义就较难修改。4. **模板方法模式:** 当你想要定义一个操作中的算法骨架,而将某些步骤延迟到子类中实现时,可以使用抽象类来实现模板方法模式。
2024-06-08 17:46:56 367
原创 程序员应该具备这些素养
总之,程序员应该具备技术能力、问题解决能力、团队协作、代码质量、时间管理、持续学习、职业道德、客户导向、责任心和创新思维等多方面的职业素养。这些素养将有助于他们在职业生涯中取得成功,并为团队和公司创造价值。
2024-06-05 20:27:02 222
原创 myspl入门案列
MySQL是一个流行的关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,后被Sun Microsystems收购,现属于Oracle公司。MySQL使用SQL(结构化查询语言)进行数据库管理。它具有体积小、速度快、总体拥有成本低、开放源代码等特点,在Web应用方面,MySQL是最好的RDBMS应用软件之一。
2024-06-05 20:09:32 907
原创 】开源大模型与闭源大模型,你更看好哪一方?
选择开源还是闭源大模型,并没有绝对的好坏之分,而是取决于具体的应用场景、业务需求和价值观。开源大模型在数据隐私、社区参与方面表现突出,而闭源大模型在商业应用和数据控制方面可能更有优势。最终,用户和企业应根据自己的需求和目标,选择最合适的发展路径。
2024-06-04 18:01:51 248
原创 WebSocket
WebSocket 是基于 TCP 的一种新的**网络协议**。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建**持久性**的连接, 并进行**双向**数据传输。
2024-06-04 17:39:57 967
原创 Spring Task
Spring Task是Spring Framework的一个扩展模块,它提供了一种声明式的方式来配置和执行定时任务。简单来说,Spring Task允许开发者在Spring应用中轻松定义、调度和执行定时任务,无需深入了解底层的调度机制。在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发。在每天下午2点到下午2:55期间的每5分钟触发。
2024-06-04 17:28:04 591
原创 解决java.lang.ClassNotFoundException org.h2.Driver at java.base/jdk.internal.loader.BuiltinClassLoader
com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure
2024-05-18 18:46:34 360
原创 SpringBoot3整合Mybatis
druid-spring-boot-3-starter目前最新版本是1.2.18,虽然适配了SpringBoot3,但缺少自动装配的配置文件,需要手动在resources目录下创建META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports。4. 创建Mapper接口:创建与数据库表交互的Mapper接口。
2024-05-18 18:40:30 907 1
原创 springMvc-参数接收方式
在 RESTful 的 Web 应用程序中,经常使用路径传递参数来表示资源的唯一标识符或更复杂的表示方式。Spring MVC 是 Spring 框架提供的 Web 框架,它允许开发者使用实体对象来接收 HTTP 请求中的参数。例如,如果我们想将 `/user/{id}` 路径下的 `{id}` 映射到控制器方法的一个参数中,则可以使用 `@PathVariable` 注解来实现。`@PathVariable` 注解允许将 URL 中的占位符映射到控制器方法中的参数。1 首先配置jackson依赖。
2024-05-14 16:50:51 607 1
原创 逆向工程 MyBatisX的安装使用
MyBatisX 是一款基于 IntelliJ IDEA 平台的 MyBatis 开发插件。它主要为开发者提供便捷的 MyBatis 开发工具,使开发者更加高效地开发 MyBatis 应用程序。MyBatisX 的主要功能包括以下几个方面:SQL 智能提示和补全:MyBatisX 可以智能地提示和补全 SQL 语句中的关键字、表名、列名等信息,从而提高开发效率。 强大的 SQL 映射系统:MyBatisX 提供了一个强大的 SQL 映射系统,允许开发人员在数据库和 Java 对象之间建立映射。 简洁
2024-05-13 14:22:47 723 1
原创 如何使用mybatis的多表映射
也就是说,如果某个字段在 Java 对象中有明确的 getter/setter 或者在 MyBatis 的映射文件中有明确的 <result> 映射,那么这个字段就不会被自动映射。设置为 FULL 时,MyBatis 会尝试将结果集中的所有列都映射到 Java 对象的对应字段,即使这些字段在映射文件中已经有了明确的 <result> 映射。当两个表之间存在一对一的关系时,可以使用 MyBatis 的一对一映射功能将查询结果映射到包含相关对象的 Java 对象中。是 MyBatis 框架中的一个配置设置。
2024-05-13 14:03:17 348 1
原创 Spring IOC 三种配置方式
在 Spring 中,IoC 容器是负责实例化、配置和组装 bean 的核心容器。ClassPathXmlApplicationContext 是 Spring 提供的 IoC 容器实现之一,它从类路径下的 XML 配置文件中读取配置信息,并根据配置创建相应的 bean 实例。<property> 元素用于设置 bean 的属性值,name 属性指定了属性名,value 属性指定了属性值。3. 标记IoC注解:@Component,@Service,@Controller,@Repository。
2024-05-10 13:59:12 912 3
原创 setContentView的解释
1、setContentView的作用是将View加载到根view之上,这样当显示view时,先显示根view,然后在显示子view,以此类推,最终将所有view显示出来。2、setContentView必须要放在findviewbyid之前,因为view在加载之前是无法引用的。3、setContentView最本质的作用是为要显示的view分配内存。...
2024-05-10 13:29:39 99
原创 算法总结1-二分查找
如果相等直接返回查找下标.如果不相等,中间的数字大于目标值,则中间数字向右的所有数字都大于目标值,全部排除,如果中间的数字小于目标值,则中间数字向左的所有数字都小于目标值,全部排除。int b1 = 0;// 初始化 b1 为 0 ,并用来储存i的个位。二分法的解决方法为:首先数组是有序的 ,选择数组中间的数字和需要查找的目标值比较。if (b1 == 2) { //判断是否为2。今天学了算法中的二分查找,
2023-11-07 19:35:29 46
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人