设计模式
设计模式单例模式单例模式是指在内存中只会创建且仅创建一次对象的设计模式。 在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在内存中创建一个对象,让所有需要调用的地方都共享这一单例对象。
懒汉式public class Singleton { private static Singleton singleton; private Singleton(){} public static Singleton getInstance() { if (singleton == null) { singleton = new Singleton(); } return singleton; }}
缺点:线程安全问题
解决方案:加锁,在方法上面加锁的话并发效果不好,获取对象时要提前获取锁
在需要用到对象时才实例化对象,正确的实现方式是:Double Check ...
操作系统复习题
第一章操作系统概述
基本概念
操作系统的接口
进程与线程进程的引入
进程的状态及转换
进程的描述
进程的控制
线程
import multiprocessingimport timeimport osdef child_process(char): print(f"Child process {char} (PID {os.getpid()}) is running.") time.sleep(2) print(f"Child process {char} (PID {os.getpid()} ...
byteDance
一、Java基础面试题
String 能被继承吗?为什么?
不可以,因为 String 类有 final 修饰符,而 final 修饰的类是不能被继承的。实现细节不允许改变。平常我们定义的 String str=”abc”(直接赋一个字面量)和 String str=new String(“abc”)(通过构造器构造)还是有差异的。String str=“abc” 和 String str=new String(“abc”); 产生几个对象?
前者 1 或 0,后者 2 或 1。先看字符串常量池,如果字符串常量池中没有,都在常量池中创建一个。如果有,前者直接引用,后者在堆内存中还需创建一个“abc”实例对象。
对于基础类型的变量和常量:变量和引用存储在栈中,常量存储在常量池中。
为了提升 JVM(Java 虚拟机)性能和减少内存开销,避免字符的重复创建,项目中最好不要使用 new String 去创建字符串,最好使用 String 直接赋值。
String,StringBuffer,StringBuilder 的区别。
String: 字符串常量(final 修饰,不可 ...
paicoding
Knif4j作用
但有了 Swagger、Knife4j 后,可以通过简单的配置生成接口的展示页面,把接口的请求参数、返回结果通过可视化的形式展示出来,并且提供便捷的测试服务。访问地址是在后面加上doc.html。
http://127.0.0.1:8080/doc.html#/home
导包不需要再引入 Swagger 了,因为这个库里面包含了。
<dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-openapi2-spring-boot-starter</artifactId> <version>slknife4i.versionl</version></dependency>
需要在 yml 文件里面进行配置
group-name: 分组名称。
api-rule:分组规则,这里使用的是包规则
api-rule-resources:指定包名,Knife4j将扫描此包下的所有APl接口并将它们 ...
paicoding
MVC
paicoding
数据库的使用CRUD
paicoding
基础篇讲解该项目的基础部分
MVC 和三层架构的区别
MVC 流程
用户通过 View 页面向服务端提出请求,可以是表单请求、超链接请求、AJAX 请求等。
服务端的 Controller 控制器接收到请求后对请求进行解析,找到相应的 Model,对用户请求进行处理。
处理结果再交给 Controller(控制器其实只是起到了承上启下的作用)。
根据处理结果找到要作为向客户端发回的响应 View 页面,页面渲染后发送给客户端。
全局架构├── paicoding-api│ └── context // 请求上下文│ └── entity // 通用实体│ └── enums // 枚举值│ └── exception // 异常类│ └── vo // 返回值├── paicoding-core│ └── cache // 缓存│ └── common // 通用常量│ └── config // 配置文件│ └── permission // 权限│ ...
缓存优化
缓存优化环境配置
配置yml文件中的redis
maven导入redis
缓存菜品数据
先从redis获取数据,如果有直接返回;没有的话从数据库中找,把数据放入到redis中。
更新菜品数据时(或者数据库中的数据变化时),需要清理缓存数据。
Spring Cache
在启动类中添加 @EnableCaching 注解,以开启缓存注解功能。这样可以在应用程序中使用缓存相关的注解。
@Cacheable 会在方法执行前先检查缓存中是否有数据,如果有,则直接返回缓存中的数据;如果没有,则执行方法,并将方法返回值放入缓存中。
@CachePut 可以将方法的返回值放入缓存中。该注解通常用于更新缓存数据的场景。
@CacheEvict 可以从缓存中删除一条或多条数据。可以在需要删除缓存数据的方法上添加该注解,并指定要删除的缓存数据的键。
其它在Spring缓存注解中,key是一个SpEL(Spring表达式语言)表达式,你可以使用#root和#result在SpEL表达式中获取上下文数据。
#root:这是根对象,可以通过它访问到方法的各种元信息,如方法的名称(#root.met ...
redis
Redis启动服务 Linux: ./redis-serve
Linux的redis如何允许windows连接
找到conf 配置文件
查找bind关键字,选择后面的ip地址,把该行注释掉
注意防火墙问题
windows: redis-cli -h localhost -p 6379 auth 密码
普通命令
连接远程redis命令 .redis-cli.exe -h 虚拟机ip -p 端口 -a redis密码 keys 检查所有的key
数据类型(是指value的数据类型)字符串
set key value 设置指定key的值
get key 获取值
setex key seconds value 设置指定key的值,把超时时间设为second秒
setnx key value 只有在key不存在时设置key值
哈希
存储对象
hset key field value 把hash表中的key字段的field值设为value hget key field 获取指定字段的值 hdel key field ...