同步操作将从 xinhe65045/study 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
Redis Watch 命令用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断
@Test @SqlGroup({ @Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, value = "classpath:h2/clean.sql"), @Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, value = "classpath:h2/init-data.sql") }) ...
spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem:test;MODE=MYSQL; spring.datasource.schema=classpath:h2/init-table.sql mybatis.mapper-locations=classpath:sql-mappers/**/*.xml
@Bean protected AppInfoCloudService appInfoCloudService() { return mock(AppInfoCloudService.class); }
//mock服务调用行为 when(appInfoCloudService.getAppInfo(any(Integer.class), any(Integer.class))).thenReturn(APIResponse.success());
Java语言包,这个包下的文件不需要显式import。包括:Object类,数据类型相关的类(String,Long,Byte),Class类,线程相关类Thread,异常类Throwable,等。
I/O操作相关的类。包括:文件类File,FileReader,FileWriter,输入输出流InputStream/OutputStream,等。
网络相关类。包括:http连接类HttpURLConnection,socket类,等。
工具类。包括:数据结构相关的类ArrayList、Hashmap,日期类Date,随机数类Random,等。
/** * This implements the expansion semantics of ensureCapacity with no * size check or synchronization. */ void expandCapacity(int minimumCapacity) { int newCapacity = value.length * 2 + 2; if (newCapacity - minimumCapacity < 0) newCapacity = minimumCapacity; if (newCapacity < 0) { if (minimumCapacity < 0) // overflow throw new OutOfMemoryError(); newCapacity = Integer.MAX_VALUE; } value = Arrays.copyOf(value, newCapacity); }
这里暂时只分析linux下的原理
注解也叫元数据,它主要的作用有以下四方面: 生成文档,通过代码里标识的元数据生成javadoc文档。 编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证。 编译时动态处理,编译时通过代码里标识的元数据动态处理,例如动态生成代码。 运行时动态处理,运行时通过代码里标识的元数据动态处理,例如使用反射注入实例。
表示该注解可以用于什么地方,可能的ElementType参数有: CONSTRUCTOR:构造器的声明 FIELD:域声明(包括enum实例) LOCAL_VARIABLE:局部变量声明 METHOD:方法声明 PACKAGE:包声明 PARAMETER:参数声明 TYPE:类、接口(包括注解类型)或enum声明
表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括: SOURCE:注解将被编译器丢弃 CLASS:注解在class文件中可用,但会被VM丢弃 RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息。
将注解包含在Javadoc中
允许子类继承父类中的注解
取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) = a?key + b,其中a和b为常数(这种散列函数叫做自身函数)
分析一组数据,比如一组员工的出生年月日,这时我们发现出生年月日的前几位数字大体相 同,这样的话,出现冲突的几率就会很大,但是我们发现年月日的后几位表示月份和具体日期的数字差别很大,如果用后面的数字来构成散列地址,则冲突的几率会 明显降低。因此数字分析法就是找出数字的规律,尽可能利用这些数据来构造冲突几率较低的散列地址。
取关键字平方后的中间几位作为散列地址。
将关键字分割成位数相同的几部分,最后一部分位数可以不同,然后取这几部分的叠加和(去除进位)作为散列地址。
选择一随机函数,取关键字的随机值作为散列地址,通常用于关键字长度不同的场合。
取关键字被某个不大于散列表表长m的数p除后所得的余数为散列地址。即 H(key) = key MOD p, p<=m。不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。对p的选择很重要,一般取素数或m,若p选的不好,容易产生同义词。
每个栈空间的默认大小为0.5M,在1.7里调整为1M,每调用一次方法就会压入一个栈帧,如果压入的栈帧深度过大,即方法调用层次过深,就会抛出StackOverFlow,,SOF最常见的场景就是递归中,当递归没办法退出时,就会抛此异常,Hotspot提供了参数设置改区域的大小,使用-Xss:xxK,就可以修改默认大小。
标准参数中包括功能和输出的参数都是很稳定的,很可能在将来的 JVM 版本中不会改变。可以用 java 命令(或者是用 java -help)检索出所有标准参数。
非标准化的参数,在将来的版本中可能会改变。所有的这类参数都以 - X 开始,并且可以用 java -X 来检索。
非标准化的参数,X 参数的功能是十分稳定的,而很多 XX 参数仍在实验当中。主要是 JVM 的开发者用于 debugging 和调优 JVM 自身的实现)。java -XX:+PrintFlagsFinal可以打印XX参数
堆大小,最小值
堆大小,最大值
新生代大小,官方建议是整个堆得3/8。在较老的版本中,还有2个参数-XX:NewSize and -XX:MaxNewSize,而-Xmn则是直接设置一个稳定的新生代大小。
-XX:NewRatio 设置老年代与新生代的比例。例如 -XX:NewRatio=3 指定老年代 / 新生代为 3/1。
永久代大小,初始值
永久代大小,最大值
发生内存溢出时自动的生成堆内存快照
设置默认的堆内存快照生成路径, 可以是相对或者绝对路径。
新生代大小
sds对char进行了包装,使长度计算操作的时间复杂度从O(n)降到O(1),同时减少了字符串追加造成的内存重新分配次数。
typedef char *sds; struct sdshdr { // buf 已占用长度 int len; // buf 剩余可用长度 int free; // 实际保存字符串数据的地方 char buf[]; };
1、用户发送请求至前端控制器DispatcherServlet 2、根据Request信息,匹配handler 3、HandlerAdapter#handle 匹配session 入参 等 4、invokeHandlerMethod 5、Controller执行完成返回ModelAndView。 6、ViewReslover解析后返回具体View。 7、渲染数据,返回响应
Ioc 容器控制对象,并注入到依赖者
利用JDK Proxy 或者Cglib,在创建代理对象时织入代码
工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。
简单工厂模式又称静态工厂方法模式。它存在的目的很简单:定义一个用于创建对象的接口。 BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象。
工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。
需要控制实例数目、节省系统资源时,可以使用单例模式。
保证一个类仅有一个实例,并提供一个访问它的全局访问点。 构造函数是私有的。 Spring的BeanFactory提供了全局访问点,但他是否只有一个实例是可配置的。
一些方法通用,却在每一个子类都重新写了这一方法。模板模式负责把这些通用算法抽象出来。
父类定义了骨架(调用哪些方法及顺序),某些特定方法由子类实现。 缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大 Spring Ioc(applicationContext),JdbcTemplate使用了模板模式
在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
为其他对象提供一种代理以控制对这个对象的访问。 被代理的对象不会暴漏给使用者 Spring Aop 中 Jdk 动态代理就是利用代理模式技术实现的
在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。策略模式将这些算法封装成一个一个的类,任意地替换。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。 Spring 的Resource是一种策略模式
dubbo整个框架共分10个层 第三层 proxy、第六层Monitor是两个分界线 三层之前,1、2层的Service和Config是直接面向用户的,用户通过注解、XML等配置服务、服务依赖、配置信息等 三层Proxy对用户的配置进行必要的包装 三层到六层之间,4、5层是服务化的总控,通过4层注册中心、实现整个服务化系统的互通,5层Cluster的特点是以消费端为主 六层Monitor主要做一些信息的收集工作 六层以下是服务调用的落地部分,包括协议、信息交换、数据传输、序列化等
ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务。由于ZooKeeper的开源特性,后来我们的开发者在分布式锁的基础上,摸索了出了其他的使用方法:配置维护、组服务、分布式消息队列、分布式通知/协调等。 ZooKeeper所提供的服务主要是通过:数据结构+原语+watcher机制,三个部分来实现的。
ZooKeeper命名空间中的Znode,兼具文件和目录两种特点。既像文件一样维护着数据、元信息、ACL、时间戳等数据结构,又像目录一样可以作为路径标识的一部分。图中的每个节点称为一个Znode。 每个Znode由3部分组成: ① stat:此为状态信息, 描述该Znode的版本, 权限等信息 ② data:与该Znode关联的数据 ③ children:该Znode下的子节点 znode创建类型(CreateMode),有以下四种: PERSISTENT 持久化节点 PERSISTENT_SEQUENTIAL 顺序自动编号持久化节点,这种节点会根据当前已存在的节点数自动加 1 EPHEMERAL 临时节点, 客户端session超时这类节点就会被自动删除 EPHEMERAL_SEQUENTIAL 临时自动编号节点
客户端调用create()方法创建名为“locknode/guid-lock-”的节点,需要注意的是,这里节点的创建类型需要设置为EPHEMERAL_SEQUENTIAL。 客户端调用getChildren(“locknode”)方法来获取所有已经创建的子节点,同时在这个节点上注册上子节点变更通知的Watcher。 客户端获取到所有子节点path之后,如果发现自己在步骤1中创建的节点是所有节点中序号最小的,那么就认为这个客户端获得了锁。 如果在步骤3中发现自己并非是所有子节点中最小的,说明自己还没有获取到锁,就开始等待,直到下次子节点变更通知的时候,再进行子节点的获取,判断是否获取锁。
单一职责原则(SRP)表明一个类有且只有一个职责。
一个类应该对扩展开放,对修改关闭。这意味一旦你创建了一个类并且应用程序的其他部分开始使用它,你不应该修改它。
派生的子类应该是可替换基类的,也就是说任何基类可以出现的地方,子类一定可以出现。
类不应该被迫依赖他们不使用的方法,也就是说一个接口应该拥有尽可能少的行为,它是精简的,也是单一的。
高层模块不应该依赖低层模块,相反,他们应该依赖抽象类或者接口。这意味着你不应该在高层模块中使用具体的低层模块。
定理:任何分布式系统只可同时满足二点,没法三者兼顾。
- Consistency(一致性) - Availability(可用性) - Partition tolerance(分区容忍性)
ACID模型拥有 高一致性 + 可用性 很难进行分区
BASE模型,牺牲高一致性,获得可用性或可靠性
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。