- 博客(97)
- 收藏
- 关注
原创 AI学习之自然语言处理(NLP)
自然语言处理(Natural Language Processing,NLP)是计算机科学、人工智能和语言学领域的交叉学科,旨在让计算机能够理解、处理和生成人类语言。
2025-01-14 16:34:06
1200
原创 MySQL之开窗函数sum over,sum over order by,rank,row_number,lag / lead
sum oversum over order byrankrow_numberlag / lead
2025-01-10 15:06:08
268
原创 MySQL之子查询 - exists
其中,子查询中的一种特殊类型是 "exists" 子查询,用于检查主查询的结果集是否存在满足条件的记录,它返回布尔值(True 或 False),而不返回实际的数据。之前的教程讲到,子查询是一种强大的查询工具,它可以嵌套在主查询中,帮助我们进行更复杂的条件过滤和数据检索。
2025-01-10 15:00:00
231
原创 MySQL之outer join
在 OUTER JOIN 中,包括 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 两种类型,它们分别表示查询左表和右表的所有行(即使没有被匹配),再加上满足条件的交集部分。在 SQL 中,OUTER JOIN 是一种关联查询方式,它根据指定的关联条件,将两个表中满足条件的行组合在一起,并。
2025-01-10 14:54:25
195
原创 MySQL之having关键字
在 SQL 中,HAVING 子句用于在分组聚合后对分组进行过滤。它允许我们对分组后的结果进行条件筛选,只保留满足特定条件的分组。HAVING 子句与条件查询 WHERE 子句的区别在于,WHERE 子句用于在。进行过滤,而 HAVING 子句用于在。
2025-01-10 14:51:33
345
原创 行为模式11.访问者模式
访问者模式(Visitor Pattern)是一种行为型设计模式,它允许你在不改变元素类的前提下,定义作用于这些元素的操作。它通过将操作封装到访问者对象中,使得可以在不修改元素对象的情况下,增加新的操作。访问者模式的关键思想是将数据结构和操作分离,使得在不修改数据结构的情况下可以增加新的操作,适用于那些数据结构经常变化,但操作比较固定的场景。
2025-01-07 14:41:26
511
原创 23种设计模式总结
设计模式是软件工程中的一种通用解决方案,用于解决在特定场景下出现的常见问题。学习设计模式不仅帮助我们提升编码水平,也帮助我们更好地理解面向对象设计的原则与思想。通过设计模式的学习,我们可以获得一些最佳实践和解决问题的标准方法,从而提高软件系统的可维护性、扩展性和可复用性。以下是我对设计模式学习的总结。
2025-01-06 17:50:34
826
原创 创建型模式1.工厂方法模式
我们先定义一个动物的接口,每种动物都必须实现这个接口。// 产品接口:Animal然后,我们创建不同种类的动物,分别实现Animal接口。// 具体产品:Dog@OverrideWoof!");// 具体产品:Cat@OverrideMeow!");接下来,我们定义一个抽象的工厂类,提供工厂方法来创建动物。// 抽象工厂:AnimalFactory然后,我们定义具体的工厂类,分别实现并提供不同的动物对象。// 具体工厂:DogFactory@Override。
2025-01-06 17:17:05
473
原创 创建型模式2.抽象工厂模式
我们定义两类产品:桌子(Table)和椅子(Chair// 抽象产品A(桌子)// 抽象产品B(椅子)每种风格的家具都有不同的实现类。例如,现代风格和传统风格的桌子和椅子会有所不同。// 现代风格的桌子@Override// 现代风格的椅子@Override// 传统风格的桌子@Override// 传统风格的椅子@Override抽象工厂接口提供了创建家具的方法(创建桌子和椅子)。// 抽象工厂接口每个具体工厂类负责生产特定风格的家具。// 现代风格的家具工厂。
2025-01-06 17:06:42
667
原创 创建型模式3.建造者模式
ProductBuilderDirector建造者模式通过分步骤、分部分地构建复杂对象,极大地解耦了对象的构建和表示过程。这种模式的优点是能够应对对象的复杂性,同时提供灵活的创建过程。它常用于产品(如汽车、电脑等)的构建过程较为复杂、包含多个可选部分的场景。通过使用建造者模式,可以使得创建不同类型的对象更加灵活,并保持较高的可维护性。
2025-01-06 16:45:20
1047
原创 创建型模式4.原型模式
原型模式允许一个对象通过复制现有对象来创建新的对象,而无需知道如何具体实现这个对象的类。这种模式通过克隆原有对象来产生新对象,避免了直接使用new关键字的开销。原型模式是一种通过复制现有对象来创建新对象的设计模式,适用于对象创建开销较大、需要频繁创建相似对象的场景。通过实现clone()方法,可以轻松地复制对象。它提供了一种通过已有对象进行对象创建的方式,能有效提高系统性能并简化对象创建过程。但在使用时需要特别注意深拷贝和浅拷贝的区别。
2025-01-06 16:02:09
842
原创 静态内部类为什么在不需要加锁就是线程安全的单例模式
当方法第一次被调用时,类才会被加载,进而初始化INSTANCE。JVM 保证的初始化是线程安全的,且只会初始化一次。Java 的类加载机制本身是线程安全的,类的初始化过程会确保只有一个线程会初始化,其他线程会看到已经初始化的实例。因此,不需要在中加锁,因为 JVM 会自动处理初始化的线程安全问题。通过这种方式,我们既能实现懒加载,即仅在第一次调用时才创建实例,又能避免显式的同步锁,从而提高性能。
2025-01-06 14:49:11
593
原创 创建型模式5.单例模式
懒汉式(线程不安全): 延迟实例化,适合需要延迟加载的场景,但需要处理线程安全问题。饿汉式(线程安全): 类加载时实例化,线程安全,简单,但可能会造成资源浪费。双重检查锁定: 提供了懒加载和线程安全的优势,性能较高。静态内部类方式(推荐): 最佳的单例实现方式,延迟加载,线程安全,且简单。对于大多数情况,静态内部类方式是最推荐的实现方式,因为它利用了Java的类加载机制,在保证线程安全的同时也保持了延迟加载的优点。
2025-01-06 14:37:44
981
原创 结构型模式1.适配器模式
适配器模式是非常实用的设计模式,尤其在需要处理接口不兼容的情况时。它能够有效地解耦系统中的不同部分,使得系统更加灵活且易于扩展。适配器模式尤其适用于需要兼容多个接口或将现有类库与新系统进行集成的场景。
2025-01-06 14:17:58
748
原创 结构型模式2.桥接模式
桥接模式是一种非常强大的结构性设计模式,可以有效地分离抽象与实现,允许独立地扩展两者,减少系统的复杂度。在面对多个变化维度时,桥接模式尤其有用。
2025-01-06 12:03:57
576
原创 结构型模式3.组合模式
组合模式通过递归组合的方式,将对象和对象组合统一处理,使得在处理“部分-整体”结构时,客户端代码更加简洁。它适用于具有树形结构的场景,如文件系统、组织结构、菜单结构等。
2025-01-06 11:10:32
951
原创 结构型模式4.装饰器模式
装饰器模式通过将功能与对象的实现分离,使得我们能够在运行时动态地增加对象的功能,而不需要修改对象本身。它能够灵活地扩展对象功能,减少了子类数量,提升了系统的灵活性和可维护性。
2025-01-06 10:29:54
810
原创 结构型模式5.外观模式
外观模式是一种结构型设计模式,其核心思想是为复杂的子系统提供一个统一的接口,使得客户端与复杂的子系统进行交互时更加简单,避免直接与多个子系统类进行交互。通过外观模式,客户端可以通过一个简单的接口来调用复杂的操作,降低了系统的复杂度,提升了可用性。假设我们有一个家庭影院系统,它包括多个设备:DVD播放器、音响系统、投影仪等。每个设备都有复杂的控制接口,客户端如果直接与这些设备交互会显得很麻烦。为了简化操作,我们可以使用外观模式提供一个统一的接口,使得用户只需要通过外观接口进行操作。
2025-01-06 07:00:00
323
原创 结构型模式6.享元模式
享元模式通过将共享状态提取出来,减少内存消耗,适用于大量相似对象的场景。在设计时需要仔细分离共享和非共享状态,确保享元对象的高效利用。
2025-01-03 14:28:05
340
原创 结构型模式7.代理模式
代理模式是一种结构型设计模式,它提供了一个代理对象来控制对另一个对象的访问。通过代理对象,客户可以间接访问目标对象。代理对象通常用来在访问目标对象时提供附加功能,比如延迟加载、访问控制、日志记录等。
2025-01-03 11:29:32
950
原创 行为模式1.模板方法模式
模板方法模式通过定义一个固定的算法骨架,并将一些具体步骤延迟到子类中实现,提供了代码复用的同时也保留了灵活的扩展性。它能够让不同的子类在不修改父类的情况下,提供不同的行为实现。
2025-01-03 11:05:27
843
原创 行为模式2.命令模式------灯的开关
是一种行为型设计模式,它将一个请求封装为一个对象,从而使你可以用不同的请求、队列或日志来参数化其他对象。命令模式让你能够将请求发送者与请求接收者解耦,发送者只关心发送命令,而不需要知道如何处理它们。命令模式非常适合用于需要将多个操作组合成一个单一操作、撤销操作等场景。假设我们有一个遥控器(Invoker),可以控制开关家里的灯(Receiver),而每个按钮的动作就是一个命令(Command)。
2025-01-02 17:21:14
1046
原创 行为模式3.迭代器模式
是一种行为型设计模式,它提供一种顺序访问集合对象元素的方式,而不暴露集合的内部结构。迭代器模式允许客户端按顺序访问集合中的元素,而无需直接访问集合本身。通常,当你有一个集合(如列表、队列、栈等),你希望对集合中的元素进行迭代,但又不想暴露其内部结构时,可以使用迭代器模式。
2025-01-02 16:37:50
487
原创 行为模式5.中介者模式-聊天室收发消息
中介者模式是一种行为设计模式,它定义了一个对象,用来封装一组对象之间的交互。中介者模式通过使对象之间的交互集中化,从而减少了对象之间的直接依赖关系。这样,减少了类与类之间的耦合性,使得它们之间的交互变得更加清晰和可维护。在中介者模式中,所有对象通过中介者对象来进行交互,而不是直接相互联系。中介者通过协调各个对象的行为来实现它们之间的协作。
2025-01-02 15:10:49
770
原创 多个线程处理不同的数据,等线程都完成后再进行下一步操作
现在有三个任务,三个任务之间没有关联关系,但是第四个任务要等前三个完成之后才能进行,于是使用多线程完成前三个任务节省时间。
2024-12-31 14:37:53
443
原创 使用POI原生自定义输出定制化表格
这就导致没法用一些封装好的工具(例如easyExcel)简单快捷的输出,这时候只能使用poi进行原生的制作表格,在工作中我使用到了这部分功能,现在将代码贴在如下进行记录。在工作中有时候会遇到一些统计功能,需要输出的内容并不是很规则的第一行表头后面全是数据的格式,而是这样。
2024-12-23 14:48:20
244
原创 idea的.gitignore文件不生效处理办法
根本原因是因为git的缓存原因,需要将本地缓存清除一下,然后在项目中上传.gitignore文件,然后将本地代码删除后重新拉代码。
2024-09-18 16:40:51
308
原创 使用163邮箱发送邮件,含多个附件(完整代码)
使用Java的库发送邮件,需要自行申请密钥,并且保护好密钥,每个邮件商每日发送邮件有限制,一般免费版的限制会多一些,付费版的限制会少一些,需要你们根据自己的需求选择性付费,或者自己搭建一个邮件发送服务,这样就不用付费了。
2024-09-11 15:23:42
395
原创 Redis的incr命令引发的反序列化异常和ERR value is not an integer or out of range异常
在Java中使用inc命令的时候发现redis中的值被反序列化后居然不是数字,检查后发现可能是序列化器没对,在redis配置的地方将序列化器设置为。Jackson2JsonRedisSerializer后使用整成,贴上代码。
2024-09-03 09:28:31
745
原创 行为模式6.备忘录模式------文本的撤销和保存
备忘录模式是一种行为设计模式,它允许在不破坏封装的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态。备忘录模式在实际应用中非常有用,尤其是在需要实现撤销操作或者保存对象历史状态的场景中,比如文本编辑器的撤销/恢复功能、游戏中的存档功能等。备忘录模式能够帮助我们在不破坏对象封装性的前提下,实现对象状态的保存和恢复,从而提高系统的灵活性和可维护性。这个示例展示了备忘录模式在文本编辑器中的应用,允许用户保存文本的不同状态,并在需要时进行恢复。充当发起人角色,负责创建备忘录和恢复状态;
2024-08-27 10:45:09
520
原创 行为模式7.解释器模式------DSL语言
定义了解释操作的抽象接口,为文法中的每个符号(终结符或非终结符)都声明了一个解释操作。这个接口为抽象语法树中所有的节点所共享。
2024-08-27 10:22:40
910
原创 美团面了大概四十分钟,全程细节拷打,面完汗流浃背,感觉过不了了,看面经吧
8. 餐箱满了,但你又接单了,餐箱放不下了,出现了Out Of Box,如何解决?我说一般我会每次接单前检查下餐箱容量,有空间才会接新的单,又追问这样会不会影响接单效率,如果被其它骑手抢单了怎么办?我说会打电话催促客户,客户一直不来的话就把餐放到地点,然后拍照走人,然后问我这样做有没有考虑过外卖丢失的情况,外卖丢失怎么办,完了,又掉进坑了。直接回答干等着了,然后感觉这样回答不太好,又补了句我可能会催催商家。做了道算法,一道贪心,给定单子信息,寻找最短配送路线,之前刷过,用c++10分钟a出来了。
2024-08-08 15:38:50
334
原创 redis是如何实现过期时间一到就删除key
Redis 使用一种称为"惰性删除"的策略来处理过期键。这意味着 Redis 不会以定期的方式扫描所有的键来查找过期的键,而是在访问键时检查它是否过期,如果过期了,就会在访问时被删除。具体来说,当你尝试访问一个键时,Redis 会先检查这个键是否过期,如果过期了,它会被删除。这种方式可以保证过期键能够被及时删除,但不会产生额外的定时任务开销。另外,Redis 也提供了一种主动删除的方式,称为"定期删除"。
2024-07-19 14:39:40
462
原创 Maximum call stack size exceeded错误
在工作过程中需要启动一个前端项目,端口默认80,但是启动成功后在浏览器总是空白页面,开启F12检查发现报错:Maximum call stack size exceeded,这个意思是出现了无限递归导致堆栈溢出,定位到具体的代码发现没有问题,并且其他同事都没问题,于是我在更换node和npm以后重新启动发现还是不行,最后我发现那句错误的代码是和权限有关,判断是否跳到登陆页面,于是灵光一显,觉得应该是本地有别的项目的缓存刚好跟需要的字段冲突了,相当于是错误数据导致的循环,于是把本地80端口的缓存清除掉以后错误
2024-07-19 11:15:41
1285
原创 行为模式8.状态模式------灯泡状态切换
虽然这两种模式有相似之处,但它们的关注点和使用场景不同。状态模式适用于对象状态改变时的行为变化,而策略模式适用于根据不同的需求选择不同的算法或策略。理解它们之间的区别有助于选择适当的模式来解决特定的设计问题。
2024-07-11 11:25:23
376
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人