mockito-study-api Testverify(arrayList, description("size()没有调用")).size();// org.mockito.exceptions.base.MockitoAssertionError: size()没有调用verify(arrayList, timeout(200).times(3).description("验证失败")).add(anyString());
源码级别理解java拆箱装箱过程 知道字节码吗,字节码都有哪些?比较下面代码x == y都经过了哪些过程public class interview { public static void main(String[] args) { Integer x = 5; int y = 5; System.out.println(x == y); }}通过idea的工具jClasslib插件查看main方法的code,发现:然后我们去Integer中查看Valueof和i
剑指 Offer 10- I. 斐波那契数列 title: 剑指 Offer 10- I. 斐波那契数列categories:算法剑指offertags: 剑指offerabbrlink: 7eea4da1剑指 Offer 10- I. 斐波那契数列写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由.
剑指 Offer 09. 用两个栈实现队列 title: 剑指 Offer 09. 用两个栈实现队列categories:算法剑指offertags: 剑指offerabbrlink: 6fda8efa剑指 Offer 09. 用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1:输入:["CQueue","appendT.
剑指 Offer 07. 重建二叉树 title: 剑指 Offer 07. 重建二叉树categories:算法剑指offertags: 剑指offerabbrlink: 73d0ff75剑指 Offer 07. 重建二叉树题目输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null.
剑指 Offer 06. 从尾到头打印链表 title: 剑指 Offer 06. 从尾到头打印链表categories:算法剑指offertags: 剑指offerabbrlink: 8c70c103剑指 Offer 06. 从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1:输入:head = [1,3,2]输出:[2,3,1] 限制:0 <= 链表长度 <= 10000原理:链表只有一个头结点,想要到尾结点只能从头.
剑指 Offer 05. 替换空格 title: 剑指 Offer 05. 替换空格categories:算法剑指offertags: 剑指offerabbrlink: baec5e48剑指 Offer 05. 替换空格请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 1:输入:s = "We are happy."输出:"We%20are%20happy." 限制:0 <= s 的长度 <= 10000class Solution { .
剑指 Offer 04. 二维数组中的查找 title: 剑指 Offer 04. 二维数组中的查找categories:算法剑指offertags: 剑指offerabbrlink: 58b0f60b剑指 Offer 04. 二维数组中的查找在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11.
剑指 Offer 03. 数组中重复的数字 title: 剑指 Offer 03. 数组中重复的数字categories:算法剑指offertags: 剑指offerabbrlink: 7e9ab8a剑指 Offer 03. 数组中重复的数字找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2.
redis分布式锁 title: redis分布式锁categories:分布式分布式锁tags: 分布式锁abbrlink: e2ee4148背景为了保证数据的一致性,在一些业务处理中都会选择加锁来保证数据的一致性。在单机模式下我们通常选择使用synchronized等这种JAVA提供好的jvm锁来实现,但是在集群和分布式情况下,这种jvm级别的锁式无法满足我们的需求,因为一个服务部署在多台服务器上,这些服务器上的jvm是无法通讯的,所以我们需要一种方案来解决分布式情况下数据一致性。在互联网公司,基本.
有三个线程T1,T2,T3,如何保证顺序执行? 有三个线程T1,T2,T3,如何保证顺序执行?在多线程中有多种方法让线程按特定顺序执行,你可以用线程类的join()方法在一个线程中启动另一个线程,另外一个线程完成该线程继续执行。为了确保三个线程的顺序你应该先启动最后一个(T3调用T2,T2调用T1),这样T1就会先完成而T3最后完成。实际上先启动三个线程中哪一个都行,因为在每个线程的run方法中用join方法限定了三个线程的执行顺序。public class JoinTest2 { // 1.现在有T1、T2、T3三个线程,你怎样保证
剑指 Offer 10- I. 斐波那契数列 剑指 Offer 10- I. 斐波那契数列写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。&nb
spring ioc aop Spring IOC和AOPIOC(Inverse of Control):控制反转是一种设计思想:将原本在程序中手动穿件对象的控制权,交给Spring 框架来管理。Ioc在其他语言中也有应用,并非spring特有。Ioc容器是Spring用来实现ioc的载体,Ioc容器实际上就是个map(key,value),Map中存放的是各种对象。将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注⼊。这样可以很⼤程度上简化应⽤的开发,把应⽤从复杂的依赖关系中解放出来。 IoC 容
JVM面试题总结 类加载过程https://cloud.tencent.com/developer/article/1749366加载——链接(验证、准备、解析)——初始化——卸载(程序结束或异常终止)加载(3件事):通过全类名获取该class文件,以二进制流的形式读入内存将字节流所代表的静态存储结构转化为方法区的运行时数据结构在内存中国生产一个类的class对象,最为方法区这个类的各种数据入口验证:验证文件格式、语义、语法、符号引用是否有错误准备:静态变量在方法区分配内存并赋初值解析:将符号引用转化为
spring bean创建过程——源码级 创建bean读取文件信息BeanDefintionReader @Override protected final void refreshBeanFactory() throws BeansException { if (hasBeanFactory()) { destroyBeans(); closeBeanFactory(); } try { DefaultListableBeanFactory beanFactory = createBeanFactory();
拥塞控制和滑动窗口有什么区别 两者都是对流量的控制,但是一个是接收方控制一个是发送方控制,适用于不用的情况。滑动窗口:是接收端进行的流量控制。流量控制是为了控制发送方的发送速率,保证接收方来得及接收信息。发送方和接收方都有一个缓存队列,接收方发送确认报文的时候都会携带上要求发送方的流量窗口大小。当接收方的缓存队列已经满的时候,接收方在发送确认报文的时候,会减小窗口大小,是发送发下一次发送更少的数据。因为这个窗口时动态改变大小的,所以叫滑动窗口。拥塞控制:也是对流量 的控制,是发送方主动发起的。拥塞控制主要是解决网络中的流量过大超过了
java中的值传递和String的特殊性(不可变性) /** * @author Lvzixin * @date 2021/6/20 11:05 */public class StringExer { String str = new String("good"); char [] ch = {'t','e','s','t'}; int a = 1; public void change(String str, char ch [],int a ) { str = "test ok";
深入理解 start方法和run方法的区别 代码查看public class Test2 { public static void main(String[] args) { MyRunnable myRunnable = new MyRunnable(); myRunnable.run(); Thread thread = new Thread(myRunnable, "线程用例"); thread.run(); thread.start(); }}
什么Java序列化,有什么用 为什么要序列化在我们进行操作对象的时候,往往有这样的一个需求,需要把当前对象的信息保存起来,然后通过网络传递或者保存到本地以便于下次的读取。例如:我们在进行web开发的时候,往往与数据库对应有一个entity类,我们需要把从数据库中的信息保存到一个new 的entity对象中,然后在进行网络传输的时候需要把这样的一个对象中的信息取出,然后转为一个json字符串传递个前端,或者前端传递过来的数据我们要把json对象转为一个对象,这个时候就需要java的序列化和反序列化。对一个对象进行序列化后,就是吧该
微信小程序 input数据动态绑定,并封装为组件 官方提供的案例:https://developers.weixin.qq.com/miniprogram/dev/component/input.html在官方提供的案例中只有一个简单的时间,并没有去封装为一个组件,在时间项目开发中我们常常要把共有的部分抽象出来,封装为一个组件,下面提供一个实现注意:在微信小程序中默认不是动态绑定的,需要我们对不同的输入框调用不用的方法,实现对不同的数据动态绑定,因此我们封装组件的时候必须考虑到不同的方法在template.wxml(没有请创建)中<templ