<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[keygwh的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/keygwh</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; keygwh]]></copyright><item><title><![CDATA[OpenAi库的基础使用]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/158844013</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/158844013</guid><author>keygwh</author><pubDate>Mon, 09 Mar 2026 14:51:54 +0800</pubDate><description><![CDATA[messages：提供给模型的消息，是一个list，list中的元素是字典，role代表角色，content是消息内容。可以通过response.choices[0].message.content拿到此次结果。assistant：表示ai的回答，可以人为设定，不是强制ai的回答，而是为其提供上下文。system：表示系统消息，一般用于设置ai的整体行为，人设和规则等，影响全局。首先引入open ai的包，然后创建OpenAi类的实例client，model ：使用的ai模型。]]></description><category></category></item><item><title><![CDATA[Fast Api (二) 路径参数、查询参数、请求体]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/158737769</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/158737769</guid><author>keygwh</author><pubDate>Fri, 06 Mar 2026 16:02:57 +0800</pubDate><description><![CDATA[param: type|None = None ，此参数可传可不传。name的值将作为参数传递给test函数。声明请求体使用Pydantic。如果不传将设置为默认值。]]></description><category></category></item><item><title><![CDATA[Fast Api（一）Python类型介绍]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/158694892</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/158694892</guid><author>keygwh</author><pubDate>Thu, 05 Mar 2026 16:32:39 +0800</pubDate><description><![CDATA[声明长度为3的元组，第一个元素为int类型，第二个元素为str，第三个是bool。可以声明一个形参有多种类型，如下声明 i 可能为int，str或None。可以对函数形参进行类型声明。]]></description><category></category></item><item><title><![CDATA[遇到的死锁问题]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/158659454</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/158659454</guid><author>keygwh</author><pubDate>Wed, 04 Mar 2026 17:56:52 +0800</pubDate><description><![CDATA[把 bm_item_group 的查询条件收到子查询里，子查询作为派生表，派生表在 MySQL 中是快照读，不持有行锁，所以主语句只对 bm_item 加写锁，彻底断掉了和 bm_item_group 写锁互等的死锁链路。某事务正在 UPDATE bm_item_group SET shelflife=... WHERE group_no=?bm_item 如果有触发器/外键回写 bm_item_group，UPDATE bm_item 时反向锁 bm_item_group，与 JOIN 方向形成环。]]></description><category></category></item><item><title><![CDATA[安卓端如何获取在pc端界面自定义中添加的栏位？]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/156081573</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/156081573</guid><author>keygwh</author><pubDate>Fri, 19 Dec 2025 14:31:50 +0800</pubDate><description><![CDATA[由于仓管员这个栏位是在搜索条件中显示，所以需要获取对应的字段list以及适配器，判断list中是否有字段名为standardCol02的字段，有就通过SharePreferenceCommon.getUserInfo()获取当前登陆用户，将其name赋值给仓管员栏位，最后通知对应的适配器更新ui。所以我们可以在doBusiness()方法中，调用这个方法，用于界面初始化的时候给自定义字段的栏位赋值。如下：需要将自定义的仓管员栏位的值赋值为当前登陆用户。]]></description><category></category></item><item><title><![CDATA[如何新增一个栏位？]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/155819302</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/155819302</guid><author>keygwh</author><pubDate>Fri, 12 Dec 2025 09:33:29 +0800</pubDate><description><![CDATA[如需要在物料管理的页面新增一个密码栏位显示，并可以支持高级搜索以及导入导出excel，在新增，修改等页面也需要显示这个栏位。]]></description><category></category></item><item><title><![CDATA[Spring中的@Autowired和@Bean有什么区别？]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/150270619</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/150270619</guid><author>keygwh</author><pubDate>Tue, 12 Aug 2025 15:13:49 +0800</pubDate><description><![CDATA[Bean是用于注册bean的，@Component是用于注册我们自己定义的bean，将自定义的bean注册到spring容器中，而对于Maven导入的一些第三方jar包要注册到spring中就需要使用@Bean注解了，@Bean注解用于方法上，在这个方法中我们产生对象，这个对象就会注册到容器中。在方法上使用是setter注入；在构造器上使用是构造注入。@Autowired按照类型注入bean，如果spring容器中不存在此类型的bean，会报错，可以搭配@Qulifier来按照name注入bean。]]></description><category></category></item><item><title><![CDATA[Java工厂模式]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/150219928</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/150219928</guid><author>keygwh</author><pubDate>Tue, 12 Aug 2025 11:23:32 +0800</pubDate><description><![CDATA[工厂模式用于创建对象，将对象的创建和使用分开，创建对象的时候不再去new，而是使用工厂来创建对象，提高了代码的可维护性，可扩展性和灵活性。工厂模式分为简单工厂模式、工厂方法模式和抽象工厂模式。]]></description><category></category></item><item><title><![CDATA[Java中的包装类]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/147824799</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/147824799</guid><author>keygwh</author><pubDate>Fri, 09 May 2025 15:36:23 +0800</pubDate><description><![CDATA[Java中的八种基本数据类型都有其对应的包装类，将基本数据类型转换为对象。]]></description><category></category></item><item><title><![CDATA[JVM、JRE、JDK的区别]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/147813694</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/147813694</guid><author>keygwh</author><pubDate>Fri, 09 May 2025 10:21:49 +0800</pubDate><description><![CDATA[JVM全称Java虚拟机(Java Virtual Machine, JVM),它是运行java字节码的虚拟机，JVM针对不同的系统有不同的实现，目的运行相同的字节码有同样的结果，JVM是“一次编译，到处运行”实现的关键。如下不同的编程语言编译生成字节码文件，通过JVM在不同的操作系统上运行。]]></description><category></category></item><item><title><![CDATA[SpringBoot的自动装配原理]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/146695157</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/146695157</guid><author>keygwh</author><pubDate>Sat, 29 Mar 2025 16:52:49 +0800</pubDate><description><![CDATA[继续进入@EnableAutoConfiguration，发现有个@Import注解，它引入了一个核心类，可以去将META/INF/spring.factories文件中所有的全路径类名的类加载到spring容器中。进入@AutoConfigurationPackage注解，里面也是引入了一个核心类，可以将spirngboot启动类目录及其子目录下的所有bean加载到spring容器中。进入这个注解，里面有@EnableAutoConfiguration，这个注解表示开启springboot自动装配。]]></description><category></category></item><item><title><![CDATA[谈谈你对多态的理解]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/146600554</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/146600554</guid><author>keygwh</author><pubDate>Sat, 29 Mar 2025 16:16:35 +0800</pubDate><description><![CDATA[多态是面向对象三大特征之一，我的理解就是多态可以使不同的对象，去调用同名的方法的时候有不同的实现。]]></description><category></category></item><item><title><![CDATA[Mysql中各种连接的区别]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/146482869</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/146482869</guid><author>keygwh</author><pubDate>Mon, 24 Mar 2025 18:32:08 +0800</pubDate><description><![CDATA[left join会返回左表的数据，以及右表匹配的数据，不匹配的数据会显示为null。内连接：通过inner join连接两个表，返回两个表中的匹配的数据，不匹配的不显示。right join右表的所有数据，以及左边匹配的数据，不匹配的数据显示为null。外连接：主要分为左连接(left join)和右连接(right join)。]]></description><category></category></item><item><title><![CDATA[java对象的生命周期]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/146478568</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/146478568</guid><author>keygwh</author><pubDate>Mon, 24 Mar 2025 16:22:53 +0800</pubDate><description><![CDATA[java对象的生命周期可分为。]]></description><category></category></item><item><title><![CDATA[Mysql的锁]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/146453023</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/146453023</guid><author>keygwh</author><pubDate>Sun, 23 Mar 2025 11:16:55 +0800</pubDate><description><![CDATA[表级锁：锁住一整张表，针对非索引字段加的锁，sql没有用到索引就会使用全局锁，性能较低。行级锁：针对索引字段加的锁，会锁住一行记录，并发性能高。全局锁：锁住一整个库，让数据库处于只读状态，一般在数据备份时用到。当update、delete的时候没有命中唯一索引或者索引失效，会走全表扫描加上表锁，性能很低。]]></description><category></category></item><item><title><![CDATA[Spring事务的传播行为]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/146416140</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/146416140</guid><author>keygwh</author><pubDate>Fri, 21 Mar 2025 11:24:40 +0800</pubDate><description><![CDATA[Nested，如果存在外层事务则嵌套外层事务，不存在则新建一个事务。嵌套事务的意思是如果外层事务提交，嵌套事务也会提交；外层事务回滚，嵌套事务就会回滚；这种场景适用于允许部分失败的业务，比如一个订单中有多个商品，其中有个商品库存不足了，只需要回滚那个商品就行了，其余商品可以下单成功。Required是spring事务默认的传播行为，如果存在外层事务就会融入外层事务，如果没有则新建一个事务。spring的事务传播行为指在一个开启了事务的方法内，去调用了另一个方法，那么事务会怎么传播呢？]]></description><category></category></item><item><title><![CDATA[索引的设计原则]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/146414331</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/146414331</guid><author>keygwh</author><pubDate>Fri, 21 Mar 2025 10:31:40 +0800</pubDate><description><![CDATA[3.对于区分度越高的列，建立索引的效果越好。对于唯一的列，索引效果最佳；如果有多个重复值的列，索引效果不好。1.where、order by、group by后的字段，还有join时的连表条件的字段适合建立索引。4.区分度最高的列放在联合索引的最左侧，更频繁使用的列放在联合索引的左侧。2.不要给每个列单独建立索引，尽量使用联合索引。5.对于较长的索引列，可以使用前缀索引。6.单表的索引数最好不要超过5个。]]></description><category></category></item><item><title><![CDATA[受检异常和非受检异常]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/146395457</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/146395457</guid><author>keygwh</author><pubDate>Thu, 20 Mar 2025 14:14:02 +0800</pubDate><description><![CDATA[非受检异常指在编译时不强制我们去捕获或者抛出的异常，所有的RuntimeException都是非受检异常，比如NullPointerExcetion、IndexOutOfBoundsException。受检异常指在编译时需要我们强制去捕获或者抛出的异常，比如IOException、SQLExcetion。受检异常的好处就是在发生这些异常的时候，我们能及时去做一些相应的处理，比如发生SQLException的时候我们可以去通过try-catch去捕获，然后及时的关闭数据库连接池对象。]]></description><category></category></item><item><title><![CDATA[为什么重写了equals必须要重写hashCode？]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/146380121</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/146380121</guid><author>keygwh</author><pubDate>Wed, 19 Mar 2025 20:54:44 +0800</pubDate><description><![CDATA[hashcode方法用于获取对象的哈希码，一般用于快速找到对象在容器中的索引位置以及快速判断对象是否相等。比如说set集合，它其中的元素是唯一的，我们往set集合里put元素的时候，它会先去判断set中有没有元素和加入的元素的hashcode相等，如果没有就直接加入set，否则就用equals判断是否相等，不相等就加入set，否则就不加入。因为hashcode可能会发生哈希冲突，所以如果两个对象的hashcode相等，它们的equals不一定相等。]]></description><category></category></item><item><title><![CDATA[==和equals的区别？]]></title><link>https://blog.youkuaiyun.com/keygwh/article/details/146379827</link><guid>https://blog.youkuaiyun.com/keygwh/article/details/146379827</guid><author>keygwh</author><pubDate>Wed, 19 Mar 2025 20:36:22 +0800</pubDate><description><![CDATA[比如String类就重写了equals方法，它会先用==判断两个对象的内存地址是否相同，相同直接返回true，不相同再去判断字符串的内容是否相等，相等返回true，否则返回false。如果没有重写equals方法，会去调用Object类的equals，其实就是去用了==比较两个对象。equals是Object类的方法，所以所有的类都有equals方法。如果重写了equals方法，会按照重写的逻辑来判断对象是否相等。对于引用数据类型，比较的是它们的内存地址。对于基础数据类型，比较的是值是否相等。]]></description><category></category></item></channel></rss>