java后端技术栈
文章平均质量分 88
南七行者
相信时间会创造奇迹。
展开
-
对中介者模式的理解
第一行包括一个整数N,表示用户的数量(1 <= N <= 100) 第二行是N个用户,比如User1 User2 User3,用空格分隔 第三行开始,每行包含两个字符串,表示消息的发出者和消息内容,用空格分隔。小明正在设计一个简单的多人聊天室系统,有多个用户和一个聊天室中介者,用户通过中介者进行聊天,请你帮他完成这个系统的设计。对于每个用户,输出一行,包含该用户收到的所有消息内容。原创 2024-05-13 22:50:16 · 839 阅读 · 0 评论 -
对命令模式的理解
【代码】对命令模式的理解。原创 2024-05-03 17:01:03 · 1379 阅读 · 0 评论 -
对策略模式的理解
接下来的 N 行,每行输入两个整数,第一个整数M( 0 < M < 400) 表示商品的价格, 第二个整数表示优惠策略,1表示九折优惠策略,2表示满减优惠策略。小明家的超市推出了不同的购物优惠策略,你可以根据自己的需求选择不同的优惠方式。请你设计一个购物优惠系统,用户输入商品的原价和选择的优惠策略编号,系统输出计算后的价格。输入的第一行是一个整数 N(1 ≤ N ≤ 20),表示需要计算优惠的次数。每行输出一个数字,表示优惠后商品的价格。个人觉得这种方式更灵活。原创 2024-04-26 22:44:20 · 1463 阅读 · 0 评论 -
对观察者模式的理解
小明所在的学校有一个时钟(主题),每到整点时,它就会通知所有的学生(观察者)当前的时间,请你使用观察者模式实现这个时钟通知系统。发布者状态(数据)变化后,通知订阅者(Subscriber)/观察者。输入的第一行是一个整数 N(1 ≤ N ≤ 20),表示学生的数量。接下来的 N 行,每行包含一个字符串,表示学生的姓名。对于每一次时钟更新,输出每个学生的姓名和当前的时间。主题状态(数据)变化后,通知订阅了该主题的观察者。最后一行是一个整数,表示时钟更新的次数。打开文件 or 保存文件。原创 2024-04-21 21:35:22 · 892 阅读 · 0 评论 -
对享元模式的理解
享元模式只有一个目的: 减少内存消耗。如果程序没有遇到内存容量不足的问题, 则可以暂时忽略该模式。当然了也有其他称呼:缓存、Cache、Flyweight。我理解:享元,共享元数据。原创 2024-04-20 21:37:49 · 423 阅读 · 0 评论 -
对组合模式的理解
接下来的 N 行,每行描述一个部门或员工的信息。部门的信息格式为 D 部门名称,员工的信息格式为 E 员工名称,其中 D 或 E 表示部门或员工。请你设计一个组合模式来管理这些部门和员工,实现对公司组织结构的统一操作。部门和员工都具有一个通用的接口,可以获取他们的名称以及展示公司组织结构。第一行是一个整数 N(1 <= N <= 100),表示后面有 N 行输入。小明所在的公司内部有多个部门,每个部门下可能有不同的子部门或者员工。输出公司的组织结构,展示每个部门下的子部门和员工。显然,这并不是正确的实现。原创 2024-04-20 20:10:24 · 974 阅读 · 0 评论 -
对桥接模式的理解
实际开发中,我们希望Spring帮我们组织好bean,我们拿来就用即可。装饰器模式,是同一接口(同一抽象)的组合。桥接模式,是不同接口(不同抽象)的组合。原创 2024-04-16 22:57:23 · 446 阅读 · 0 评论 -
对外观模式的理解
每个设备都有独立的开关密码,分别用数字1、2和3表示。即输入1时,空调关闭,输入2时,台灯关闭,输入3时,电视机关闭,当输入为4时,表示要关闭所有设备。请你使用外观模式编写程序来描述电源总开关的操作。接下来的 N 行,每行包含一个数字,表示对应设备的开关操作(1表示关闭空调,2表示关闭台灯,3表示关闭电视机,4表示关闭所有设备)。输出关闭所有设备后的状态,当输入的数字不在1-4范围内时,输出Invalid device code.第一行是一个整数 N(1 <= N <= 100),表示后面有 N 行输入。原创 2024-04-15 23:16:57 · 754 阅读 · 0 评论 -
AI来了,Spring还会远吗?(Spring AI初体验)
下载好JDK 17,在上图的JDK中不一定能看到。此时,选add JDK:选。接触过各种llm的api就知道,那叫一个千奇百怪。原创 2024-04-14 23:04:37 · 859 阅读 · 0 评论 -
正确使用@RequestMapping(包含属性详解)
服务端报错:Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation]为啥把这个属性放到最后?并不是last but not least,而是这个属性真不重要。默认情况下:请求头的Accept为。原创 2024-04-14 21:27:43 · 1541 阅读 · 0 评论 -
对装饰器模式的理解
破罐子破摔,世界是熵增的…原创 2024-04-13 21:57:50 · 1259 阅读 · 0 评论 -
怎么“访问”Spring容器管理的bean?
一种方式:注入依赖【告知容器,我需要某个bean】正确使用@Resource正确使用@Autowired另一种方式:注入容器,直接“访问”容器中的bean。原创 2024-04-11 23:14:55 · 423 阅读 · 0 评论 -
Bean的生命周期(正确使用bean创建后和销毁前的钩子)
实际开发中,极少会同时使用三套方法。目前觉得注解真是不错的语法。原创 2024-04-11 21:54:06 · 794 阅读 · 0 评论 -
正确使用@Autowired
Spring框架两大核心特性:IoC容器(对开发者来说,就是希望Spring帮助注入依赖) + AOP因此,熟练使用Spring框架之一便是熟练使用依赖注入。之前介绍了“正确使用@Resource”,本文重点介绍“正确使用@Autowired”原创 2024-04-07 20:38:48 · 1084 阅读 · 0 评论 -
对代理模式的理解
在【对AOP的理解】中,提到过代理模式。本篇文章进一步谈谈我对代理模式的理解。@Slf4j@Service@Resource@Override@Resource...UserService是接口,有两个实现类,Spring不知道到底要注入哪个bean,因此报错了。原创 2024-04-06 23:43:30 · 633 阅读 · 0 评论 -
正确使用@Resource
如果@Resource注解中指定了name属性,那么Spring只会根据name属性的值去找bean,找不到则报错。如果@Resource注解没有指定name属性,那么会根据字段名或setter方法推断一个默认名字。如果根据默认名字找到了bean,那就注入这个bean。如果根据默认名字找不到bean,那就降级为根据类型去找bean。如果还找不到,那就报错。原创 2024-04-06 21:15:52 · 959 阅读 · 0 评论 -
Free MyBatis Tool插件的进阶使用指南(消灭dao层的繁琐编码)
目录零、起因一、怎么使用Free MyBatis Tool插件?1 基本使用2 进阶使用(搞清楚Options的用法)2.1 概览2.2 详述2.2.0 Options(一项都不勾选)2.2.1 Use-Lombok【消除UserDO中的getter和setter代码】2.2.2 Comment(实体注释)【和“2.2.1”相比,没任何变化...】2.2.3 Use-Schema(使用Schema前缀)【和“2.2.1”相比,没任何变化...】2.2.4 Overwrite-Java【和“2.2.1”相比,原创 2024-04-04 21:08:42 · 1077 阅读 · 0 评论 -
让我们一起搞懂:数据库的悲观锁和乐观锁
后端开发少不了操作数据库的表(也就是CRUD boy~)。在多线程环境下,线程A和线程B同时修改同一张表的同一条记录,会导致错误。例如,对于库存Stock表:idquantity1Widget1用户A和用户B几乎同时访问网站,并决定购买"Widget"商品。用户A的请求被线程A处理,线程A读取到"Widget"的库存数量为1。同时,用户B的请求被线程B处理,线程B也读取到"Widget"的库存数量为1。线程A开始处理用户A的购买请求,减少库存数量,即。原创 2024-03-31 18:07:01 · 796 阅读 · 0 评论 -
用Optional取代null
【代码】用Optional取代null。原创 2024-03-30 17:01:46 · 906 阅读 · 0 评论 -
对AOP的理解
跟着廖雪峰老师,实现:对计算方法执行的耗时。@Service@Overridetry {@Aspect@Componenttry {中的xxx和要一一对应。/***/原创 2024-03-27 22:56:11 · 1016 阅读 · 0 评论 -
如何配置元数据?(如何使用Spring容器)
当然了,本质是@Component这个注解。例如:@Service这个注解也包含@Component。原创 2024-03-24 17:15:09 · 933 阅读 · 0 评论 -
对适配器模式的理解
如果fits()方法不变,那么就得将SquarePeg适配成RoundPeg。接口A:RoundHole::fits。数据A:RoundPeg。原创 2024-03-23 21:23:16 · 652 阅读 · 0 评论 -
对原型模式的理解
如User的ak字段。原创 2024-03-23 19:29:57 · 625 阅读 · 0 评论 -
如何高效测试Mybatis?(xxxMapper)
【代码】如何高效测试Mybatis?原创 2024-03-17 22:50:28 · 942 阅读 · 0 评论 -
Java访问数据库(重点:SpringBoot整合Mybatis)
为啥需要这两个?通过mybatis官方文档就知道了,需要一个配置文件和一堆映射文件。为啥key是mybatis.config-location和mybatis.mapper-locations?原创 2024-03-17 19:57:20 · 976 阅读 · 0 评论 -
对建造者模式的理解
山地车使用的是Aluminum Frame(铝制车架)和 Knobby Tires(可抓地轮胎),公路车使用的是 Carbon Frame (碳车架)和 Slim Tries。小明家新开了一家自行车工厂,用于使用自行车配件(车架 frame 和车轮 tires )进行组装定制不同的自行车,包括山地车和公路车。现在它收到了一笔订单,要求定制一批自行车,请你使用【建造者模式】告诉小明这笔订单需要使用那些自行车配置吧。接下来的 N 行,每行输入一个字符串,字符串表示客户的自行车需求。原创 2024-03-15 22:35:47 · 676 阅读 · 0 评论 -
对抽象工厂模式的理解
小明家新开了两个工厂用来生产家具,一个生产现代风格的沙发和椅子,一个生产古典风格的沙发和椅子,现在工厂收到了一笔订单,请你帮他设计一个系统,描述订单需要生产家具的信息。接下来的 N 行,每行输入一个字符串,字符串表示家具的类型。家具类型分为 “modern” 和 “classical” 两种。对于应用层,需要操作按钮和复选框,前提是获取对应的对象。而不同操作系统,返回的对象应该不同。输入的第一行是一个整数 N(1 ≤ N ≤ 100),表示订单的数量。对于每笔订单,输出字符串表示该订单需要生产家具的信息。原创 2024-03-03 19:10:12 · 865 阅读 · 0 评论 -
对简单工厂模式、工厂方法模式的思考
接下来的 N 行,每行输入一个字符串和一个整数,字符串表示积木的类型。积木类型分为 “Circle” 和 “Square” 两种。整数表示该积木生产的数量。小明家有两个工厂,一个用于生产圆形积木,一个用于生产方形积木,请你帮他设计一个积木工厂系统,记录积木生产的信息。输入的第一行是一个整数 N(1 ≤ N ≤ 100),表示生产的次数。对于每个积木,输出一行字符串表示该积木的信息。多线程场景下,不能用HashMap。原创 2024-03-03 14:32:12 · 789 阅读 · 0 评论 -
对单例模式的饿汉式、懒汉式的思考
单例模式是指一个类在JVM中只有一个实例。在类加载的时候就创建好了实例。创建实例延迟到使用该实例前。原创 2024-03-02 22:39:15 · 665 阅读 · 0 评论 -
认识并使用HttpLoggingInterceptor
从调试和监控HTTP调用的角度,我会选日志级别BODY。这其实对应的就是请求/响应的三部分。原创 2024-02-17 22:06:59 · 1400 阅读 · 0 评论 -
基于cpolar实现微信公众号访问本地服务
免费套餐,随机公网地址,24小时内会随机变化,不利于长期远程访问。我replay没效果…而且,我还是习惯在apifox发起请求。咱先跟着cpolar官方教程学一下怎么使用cpolar。点击“提交”后,本地服务就能收到请求了!前提:已经安装Homebrew。更正:“China Top”改为“因此,必须先启动本地服务!原创 2024-02-04 23:10:46 · 697 阅读 · 0 评论 -
认识并使用OkHttp3
实际开发中,难免有“发送Http请求并处理响应”的技术诉求。那么,在Java的世界中,如何发送Http请求并处理响应呢?// HTTP client单例.Builder().build();OkHttp的拦截器也要学习下~原创 2024-01-28 21:56:40 · 1171 阅读 · 0 评论 -
使用Dockerfile来构建服务的镜像,并部署在容器中
3)当运行 Docker 容器时,可以通过 -e 参数来覆盖这个环境变量的值,例如:docker run -e PARAMS=“arg1 arg2 arg3” your-image-name。2)ln 是 Linux 系统中用于创建符号链接(symbolic link)的命令,-s 表示创建软链接,-n 表示如果目标文件已存在,直接覆盖,-f 表示强制执行。“-c”:这是传递给 sh 的一个选项,表示后面的字符串是一个需要被 sh 执行的命令。很显然,这不是中国时区,因此,为了保险起见,原创 2024-01-21 20:42:28 · 921 阅读 · 0 评论 -
认识并使用Shiro技术
Shiro安全框架为了实现认证和授权,定义了2个抽象方法:// AuthorizingRealm是授权Realm............// AuthenticatingRealm是认证Realm......很显然,这就需要用户去定义xxxRealm,并实现这两个抽象方法。/*** 授权* @return*/@Override// 暂时 return null;/*** 认证,即校验用户的用户名和密码* @return*/@Override。原创 2024-01-20 19:48:45 · 949 阅读 · 0 评论 -
认识并使用JWT
注意:不要把秘密信息放在这个JSON对象中,因为通常这个JSON对象被转换为字符串后,默认是不加密的,这就会被别人解析回JSON对象,里面的信息就暴露了。(1)alg属性表示签名的算法,默认是 HMAC SHA256(写成 HS256);(2)typ属性表示这个令牌(token)的类型,JWT统一写为"JWT"。(2)exp (expiration time):过期时间。(6)iat (Issued At):签发时间。(1) iss (issuer):签发人。(3)sub (subject):主题。原创 2024-01-16 23:28:29 · 811 阅读 · 0 评论 -
第一次开发基于SpringBoot的Java应用
标签已经被解析过了。所以,父项目的版本号必须是硬编码的,不能引用属性。Spring官方的脚手架,已经不支持Java8了:)(2)这是因为Maven的解析顺序的问题,很方便,还给了一些示例。(1)在Maven中,标签中,咱必须直接指定。原创 2024-01-14 16:49:02 · 411 阅读 · 0 评论 -
基于Docker的Nginx的安装与配置
将主机上的 /path/to/nginx/conf 目录挂载到 Nginx 容器的 /etc/nginx/conf.d 目录后,在主机的 /path/to/nginx/conf 目录中编辑 Nginx 的配置文件,容器内的 /etc/nginx/conf.d 目录会实时看到这些更改。:是设定重启策略,意味着无论容器的退出状态码是什么,Docker都会自动重启这个容器。(1)在Nginx容器中,这个配置文件通常会被映射到宿主机的某个文件,以便于在容器外部进行编辑和管理。不支持定制的软件,不是好软件:)原创 2024-01-14 15:24:17 · 1281 阅读 · 0 评论