# 工业互联网saas平台 **Repository Path**: sh541210/scm-saas ## Basic Information - **Project Name**: 工业互联网saas平台 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: nacos-saas - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2022-03-15 - **Last Updated**: 2022-03-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## cola #### 适配层(Adapter Layer:负责对前端展示(web,wireless,wap)的路由和适配,对于传统B/S系统而言,adapter就相当于MVC中的controller; #### 应用层(Application Layer):主要负责获取输入,组装上下文,参数校验,调用领域层做业务处理,如果需要的话,发送消息通知等。层次是开放的,应用层也可以绕过领域层,直接访问基础实施层; #### 领域层(Domain Layer):主要是封装了核心业务逻辑,并通过领域服务(Domain Service)和领域对象(Domain Entity)的方法对App层提供业务实体和业务逻辑计算。领域是应用的核心,不依赖任何其他层次; #### 基础实施层(Infrastructure Layer):主要负责技术细节问题的处理,比如数据库的CRUD、搜索引擎、文件系统、分布式服务的RPC等。此外,领域防腐的重任也落在这里,外部依赖需要通过gateway的转义处理,才能被上面的App层和Domain层使用。 ### ==和equals的区别,一般来说,equals里面自定义判断== ### 实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用 ### 子类覆盖父类的方法时,只能比父类抛出更少的异常 ### 只有记住抽象类与普通类的唯一区别就是不能创建实例对象和允许有abstract方法。 jdk17 1. 密封类 指定继承 2. switch可以做到instanceof 的事情 jdk11 1. String新增工具:repeat 返回重复 strip、stripLeading、stripTrailing trim增强版 isblank lines string转stream 2. 增强文件读写 readString和writeString 四次握手: 结束连接 WebSocket(持久化的协议) 与 Socket(一套标准IP 地址 + 端口 + 协议) 的区别 人群打标 入参后缀,如示例代码 DTO(Data Transfer Object) @Transactional P.S. 如果 try-catch 语句在 finally 语句块中进行了 return 操作,那么 catch 语句块中手动抛出的异常也会被覆盖,同样不会自动回滚。 jdk8 1.hashmap--->拉链法--->1.8尾插法--->红黑树 简单点说,旋转的目的是让树保持红黑树的特性 O(n) > O(logn)。 ConcurrentHashMap java的两个锁 synchronized-jvm层面 ReentrantLock-代码层面 HTTPS(SSL/TLS) TCP三次握手 SSL/TLS四次握手 关于es8的搭建过程 关于spring初始化读取nacos配置中心的自定义配置文件 文件上传 1.秒传:MD5 redis 2.分片上传 RandomAccessFile 位置指示器 操作模式 MappedByteBuffer javax.servlet UnionFS 多个目录(也叫分支)内容联合挂载到同一个目录下,而目录的物理位置是分开的 Init层 它是一个以“-init”结尾的层,夹在只读层和读写层之间。Init层是Docker项目单独生成的一个内部层,专门用来存放/etc/hosts、/etc/resolv.conf等信息。需要这样一层的原因是,这些文件本来属于只读的系统镜像层的一部分,但是用户往往需要在启动容器时写入一些指定的值比如hostname,所以就需要在可读写层对它们进行修改。可是,这些修改往往只对当前的容器有效,我们并不希望执行docker commit时,把这些信息连同可读写层一起提交掉。所以,Docker做法是,在修改了这些文件之后,以一个单独的层挂载了出来。而用户执行docker commit只会提交可读写层,所以是不包含这些内容的。 AUFS的whiteout的实现是通过在上层的可写的目录下建立对应的whiteout隐藏文件来实现的。 Namespace分别对进程的 Cgroup root、进程间通信、网络、文件系统挂载点、进程ID、用户和组、主机名域名等进行隔离。 在每个容器内也要有一个父进程来管理其下属的子进程 Docker就会在这个PID=3702的进程启动时给他施一个“障眼法”,让他永远看不到不属于它这个namespace中的进程。这种机制,其实就是对被隔离应用的进程空间做了手脚,使得这些进程只能看到重新计算过的进程编号,比如PID=1。可实际上,他们在宿主机的操作系统里,还是原来的第3702号进程 命名空间建立系统的不同视图, 对于每一个命名空间,从用户看起来,应该像一台单独的Linux计算机一样,有自己的init进程(PID为0),其他进程的PID依次递增,A和B空间都有PID为0的init进程,子容器的进程映射到父容器的进程上,父容器可以知道每一个子容器的运行状态,而子容器与子容器之间是隔离的。 Cgroups Linux Cgroups的全称是Linux Control Groups。它最主要的作用,就是限制一个进程组能够使用的资源上限,包括CPU、内存、磁盘、网络带宽等等 docker通过cgroup来配置容器里的各种配置参数,会生成一个控制组(一个容器一个),最后会把容器在宿主机外面对应的pid塞到tasks文件中,标识该进程持有我这个控制组 一个容器如果不对其做任何资源限制,则宿主机会允许其占用无限大的内存空间,有时候会因为代码bug程序会一直申请内存,直到把宿主机内存占完。   为了避免此类的问题出现,宿主机有必要对容器进行资源分配限制,比如CPU,内存等,Linux Cgroups的全称是Linux Control Groups,它最主要的作用就是限制一个进程组能够使用的资源上限,包括CPU,内存,磁盘,网络带宽等等。   此外,Linux Cgroups还能够对进程优先级设置,以及将进程挂起和恢复等操作。 复合索引有最左匹配限制 or语句对于mysql来说还是没有顺序的 ( 注:一个索引最多可以包含 16 列。) 覆盖索引 即普通索引查询方式,则需要先搜索name索引树,得到id的值为3,再到id索引树搜索一次。这个过程称为回表 行数据库擅长增删改,列数据库擅长查询 redis的大key问题 1.redis大key是什么 单个keyvalues很大 2.redis大key带来的影响 指令单线程操作IO阻塞 3.redis大key的解决方法 拆分KV redis单线程?主要是指 Redis 在网络 IO和键值对读写是采用一个线程来完成的 redis内部操作? redis为什么那么快? Redis 在设计上采用将网络数据读写和协议解析通过多线程的方式来处理,对于命令执行来说,仍然使用单线程操作。 如何知道有消息丢失? 哪些环节可能丢消息? 如何确保消息不丢失? JVMTI可以支持第三方工具程序以代理的方式连接和访问JVM,并利用JVMTI提供的丰富的编程接口,完成很多跟JVM相关的功能; 在JVM启动时,通过JVM参数-javaagent,传入agent jar,Instrument Agent被加载 也可以在JVM启动后,attach agent包 Kafka 中,一个 Topic 可以配置多个 Partition(分区),数据会被写入到多个分区中,但在消费的时候,Kafka 约定一个分区只能被一个消费者消费,Topic 的分区数量决定了消费的能力 上下文切换 直接消耗:指的是CPU寄存器需要保存和加载 间接消耗:指的是多核的cache之间得共享数据