JAVA
Java开发知识与应用
程序吟游
这个作者很懒,什么都没留下…
展开
-
原型模式类图与代码
原型模型是一种对象创建模型,用原型实体指定创建对象的种类,并且通过复制这些原型创建新的对象。原型模型允许一个对象再创建另一个可定制的对象,无须知道任何创建的细节。现要求实现一个能够自动生成求职简历的程序,简历的基本内容包括求职者的姓名、性别、年龄及工作经历。希望每份简历中的工作经历有所不同,并尽量减少程序中的重复代码。采用原型模式(Prototype)来实现上述要求,得到如图 7.25 所示的类图。原创 2024-05-07 14:51:05 · 380 阅读 · 0 评论 -
桥接模式类图与代码
根据绘图软件的扩展性要求,该绘图软件将不断扩充新的图形和新的绘图程序。为了避免出现类爆炸的情况,现采用桥接(Bridge)模式来实现上述要求,得到如图 7.21 所示的类图。欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例,对应的绘图程序如表 7.7 所示。原创 2024-05-07 09:09:03 · 295 阅读 · 0 评论 -
回溯法:n-皇后问题
从第一个皇后开始,对每个皇后,从其对应行(第i个皇后对应第i行)的第一列开始尝试放置,若可以放置,确定该位置,考虑下一个皇后;n-皇后问题是在n行n列的棋盘上放置n个皇后,使得皇后彼此之间不受攻击,其规则是任意两个皇后不在同一行、同一列和相同的对角线上。|| fabs(i-k) — fabs(pos[i] - pos[k])){ //同一列不能有多个皇后。pos:一维数组,pos[i]表示第i个皇后放置在第i行的列位置。/*判断第 k个皇后目前放置位置是否与前面的皇后冲突*//*尝试摆放第i个皇后*/原创 2024-04-19 17:06:21 · 521 阅读 · 0 评论 -
分治法:假币问题
(2)当n为奇数时,将前后两部分,即1~(n-1)/2和(n+1)/2+1~n,放在天平的两端,较轻的一端里有假币,继续在较轻的这部分硬币中用同样的方法找出假币;若两端重量相等,则中间的硬币,即第(n+1)/2枚硬币是假币。(1)当n为偶数时,将前后两部分,即1~n/2和n/2+1~0,放在天平的两端,较轻的一端里有假币,继续在较轻的这部分硬币中用同样的方法找出假币。假币问题:有n枚硬币,其中有一枚是假币,已知假币的重量较轻。first,last://当前考虑的硬币数组中的第一个和最后一个下标。原创 2024-04-18 16:08:15 · 595 阅读 · 0 评论 -
访问者模式类图与代码
某图书管理系统中管理着两种类型的文献:图书和论文。现在要求统计所有馆藏文献的总页码(假设图书馆中有一本540页的图书和两篇各25页的论文,那么馆藏文献的总页码就是590页)。采用Visitor(访问者)模式实现该要求,得到如图7.16所示的类图。访问者模式让增加新的操作很容易,因为增加新的操作就意味着增加一个新的访问者。访问者模式将有关的行为集中到一个访问者对象中。原创 2024-04-11 17:37:25 · 489 阅读 · 0 评论 -
适配器模式类图与代码
某软件系统中,已设计并实现了用于显示地址信息的类Address,现要求提供基于Dutch语言的地址信息显示接口。为了实现该要求并考虑到以后可能还会出现新的语言的接口,决定采用适配器(Adapter)模式实现该要求,得到如图7.9所示的类图。原创 2024-04-11 16:13:41 · 432 阅读 · 0 评论 -
策略模式类图与代码
某大型购物中心欲开发一套收银软件,要求其能够支持购物中心在不同时期推出的各种促销活动,如打折、返利(例如,满300返100),等等。现采用策略(Strategy)模式实现该要求,得到如图7.13 所示的类图。原创 2024-04-11 16:01:09 · 482 阅读 · 0 评论 -
Java 8 Lambda表达式:基本语法及在集合中的应用
5. 收集到不同的集合类型(Collecting to Different Types):使用collect方法,可以将流中的元素收集到不同的集合类型中。4. 聚合操作(Aggregation):使用reduce方法,可以对集合中的元素进行聚合操作,如求和、求最大值等。与Stream API的结合使得集合操作变得更加简洁和函数式。1. 过滤元素(Filtering):使用filter方法,可以根据某个条件过滤集合中的元素。3. 排序元素(Sorting):使用sorted方法,可以对集合中的元素进行排序。原创 2024-02-27 08:56:03 · 789 阅读 · 0 评论 -
方法鉴权:基于 Spring Aop 的注解鉴权
权限标识如:"business:project:list" 保存在菜单表,用户表与菜单表关联。如果自定义注解中的参数值@RequiresPermissions("business:project:list") 存在于当前用户所拥有的权限中,则该允许访问该方法,否则拒绝。这通常涉及到定义一个切面(Aspect),该切面会在方法执行前进行拦截,并根据注解value值来决定是否允许执行该方法。然后,你需要定义一个切面,该切面会拦截带有 @RequiresPermissions 注解的方法。原创 2024-02-22 09:02:13 · 705 阅读 · 0 评论 -
Java自定义注解:如何优雅地扩展代码功能
首先,你需要定义一个自定义注解@Loggable。在这个例子中,使用@Target(ElementType.METHOD) ,@Loggable被定义为方法注解,并且使用@Retention(RetentionPolicy.RUNTIME)来指定它在运行时仍然可用。原创 2024-02-21 09:36:48 · 459 阅读 · 0 评论 -
多线程:基于注解@EnableAsync和使用线程池的场景分析
EnableAsync注解以及直接使用线程池,各自适用于不同的场景。原创 2024-02-20 16:36:59 · 440 阅读 · 0 评论 -
深入理解Java泛型:概念、用法与优势
例如通配符类型:这个方法可以接受任何类型的List作为参数,因为?当代码需要处理不同类型的数据,并且你希望确减少类型转换错误时,泛型是一个很好的选择。例如泛型类:在定义类时,可以使用类型参数来指定类中某些字段或方法的类型。泛型是JDK的一个特性,它允许在定义类、接口和方法时使用类型参数。这个特性有什么用呢?原创 2024-02-08 16:01:15 · 265 阅读 · 0 评论 -
Java集合框架在数据处理中的应用场景
集合框架的主要优点是通过使用高性能的数据结构和算法,可以帮助开发者更高效地处理数据。此外,集合框架的接口和实现是可互换的,因此可以通过切换实现来调整程序的行为。以下是集合框架中的一些主要接口和类。原创 2024-02-06 18:26:07 · 538 阅读 · 0 评论 -
如何在 Java 中通过 Map.Entry 访问 Map 的元素
entrySet() 方法返回一个包含映射中所有键值对的 Set 视图。每个元素都是一个 Map.Entry,可以通过它来访问键和对应的值。Map.Entry 是一个接口,代表一个键值对映射关系,其中 K 是键的类型,V 是值的类型。在 Map.java 中,原创 2024-02-06 18:15:15 · 293 阅读 · 0 评论 -
掌握Static精髓,深入理解静态成员、静态块与静态内部类
当我们希望变量、方法和代码块在这个类的所有实例中共享,那么就使用static关键字创建类变量,类方法,静态代码块。调用时无需通过实例对象调用。以类变量和实例变量为例,探讨一下他们的生命周期。假设这个静态内部类包含静态方法和实例方法!原创 2024-02-06 12:02:51 · 325 阅读 · 0 评论 -
如何正确使用Java中的final关键字:变量、方法和类的终极指南
3.当我们希望成员变量、局部变量的值被初始化后不被改变时,如配置参数等。值得注意的是,对于基本数据类型的变量,final确保变量的值不会被改变。而对于引用类型的变量,final确保变量引用的对象地址不会改变,但对象本身的内容是可以改变的(除非对象也是不可变的)。2.当我们希望方法不被覆盖(override)时,通常用于确保父类中的某个方法不会在子类中被改变。final关键字在Java中有多种用法,它可以用来修饰类、方法、变量(包括成员变量和局部变量)原创 2024-02-06 10:19:46 · 695 阅读 · 0 评论 -
从标准异常类到自定义异常类:Java异常处理的优雅演变
自定义异常类的实现可以通过继承Exception或其子类来创建和使用。// 自定义异常类try {// 一些可能会抛出异常的代码if(){throw new MyException("这是一个自定义异常");// 处理自定义异常System.out.println("捕获到自定义异常: " + e.getMessage());// 处理其他异常System.out.println("捕获到其他异常: " + e.getMessage());自定义异常类。原创 2024-02-05 17:11:07 · 586 阅读 · 0 评论 -
序列化:让数据更容易传输和持久化的关键技术
用ObjectOutputStream来序列化,ObjectOutputStream是Java标准库中提供的用于对象序列化的类,用ObjectInputStream反序列化。:对象转化为字节序列,适用于二进制数据进行存储和传输的场景中。以便于实现跨平台的数据交换、持久化存储和网络通信等功能。JSON或XML数据可以视为字节序列的一种表现形式。:只有实现了Serializable或者Externalizable接口的类的对象才能被序列化为字节序列。看到 inout 就是反序列化过程。:字节序列还原为对象。原创 2024-02-01 18:25:35 · 221 阅读 · 0 评论 -
实现前后端分离:RSA加密传输方案的详解
通过生成密钥对,用公钥加密,用私钥解密。对于前后端分离的项目,让前端获取到公钥对敏感数据加密,发送到后端,后端用私钥对加密后的数据进行解密即可。需要注意的是,前端加密只是数据传输过程中的一部分安全措施。为了确保数据的安全性,还需要在后端服务器进行相应的安全措施,例如验证用户身份、使用HTTPS协议进行通信等。前端需要导入一个适合前端使用的RSA加密库。利用获取到的模数和公共指数创建RSA公钥对象,对敏感数据加密。后端接收到前端利用RSA加密后的字符串后,直接调用RSAUtil进行解密,得到原文。原创 2024-02-01 15:41:43 · 1317 阅读 · 1 评论 -
正则表达式常量类
【代码】正则表达式常量类。原创 2024-01-30 17:09:09 · 130 阅读 · 0 评论 -
@PostConstruct注解:Spring框架中的初始化魔法
是 JDK的一个注解,主要用于依赖注入完成后初始化一个方法。当依赖注入完成之后,会自动调用该方法。通常,这个注解被用于生命周期回调,以便进行一些初始化的工作,例如打开数据库连接、初始化一些配置等。注解的方法必须是一个非静态的、公共的、无参数的方法。此外,这个方法不能抛出任何已检查的异常。原创 2024-01-30 15:47:10 · 327 阅读 · 1 评论 -
如何使用@SuppressWarnings注解来管理Java编译警告
是 JDK 中的一个注解,用于告诉编译器忽略某些警告。当你使用这个注解时,编译器将不会为指定的警告类型显示任何消息。unchecked:当代码中使用了未经检查或不安全的转换时,例如从 List 转换到 ArrayList。rawtypes:当使用了原始类型而不是其泛型版本时。例如,使用了 List 而不是 List。通常,只有在你确定代码没有问题,或者你确实知道你在做什么的情况下才应该使用它。原创 2024-01-29 11:28:08 · 113 阅读 · 0 评论 -
RedisTemplate 在 Spring Boot 中的应用:常用方法与最佳实践
因此,当你使用 opsForValue().set() 方法时,你是在设置一个键值对,其中值的数据结构是字符串。如果你想操作其他数据结构的值,如哈希、列表、集合等,你可以使用 opsForHash(),opsForList(),opsForSet(),opsForZSet()对于 opsForValue() 方法,它是用来获取一个操作字符串值的操作对象。在Spring Data Redis中,redisTemplate 是一个非常重要的组件,它为开发者提供了各种操作 Redis 的方法。原创 2024-01-26 17:17:20 · 499 阅读 · 1 评论 -
@Override注解:Java中的重写之美
Override是jdk的注解,它用于指示一个方法是重写了父类中的方法。这个注解只在编译时有效,不会保留在生成的字节码文件中。注解,只要正确地重写了父类中的方法,代码仍然能够正常工作。使用或不使用取决于个人或团队的编码风格和习惯。注解有几个好处,包括提高代码的可读性和安全性,以及在编译时检查可能的错误。原创 2024-01-26 15:56:02 · 98 阅读 · 1 评论