10 2019 档案
摘要:1.编一C程序,它能对输入的一串整数(不多于1000个,以 9999为结束标记, 9999不参与排序), 进行冒泡排序(从小到大排序),输出排序结果和所用的关键字比较次数。 ~~~c include define END 9999 define MAX_SIZE 1005 int array[MAX
阅读全文
摘要:1.编一C程序,它能根据输入的字符(字母或 )序列来构造一棵二叉树,并能输出该二叉树后序和中序序列, 并计算出该二叉树度数为2的节点个数。输入是该二叉树经扩充后的结点前序遍历序列,扩充方法是: 对无左孩子的结点,增加一个标记为的做孩子结点:对无右孩子的结点,增加一个标记为的右孩子结点。 例如,若要构
阅读全文
摘要:什么是分布式事务 分布式事务就是指事务的资源分别位于不同的分布式系统的不同节点之上的事务; 分布式事务产生的原因 2.1、数据库分库分表 在单库单表场景下,当业务数据量达到单库单表的极限时,就需要考虑分库分表,将之前的单库单表拆分成多库多表; 分库分表之后,原来在单个数据库上的事务操作,可能就变成跨
阅读全文
摘要:原文链接:https://blog.csdn.net/weixin_38003389/article/details/89434629 redis 集群做分布式锁,我们使用 Redisson。 | 框架 | 版本 | | | | | Spring Boot | 2.0.3.RELEASE | | S
阅读全文
摘要:什么是分布式锁 在学习Java多线程编程的时候,锁是一个很重要也很基础的概念,锁可以看成是多线程情况下访问共享资源的一种线程同步机制。这是对于单进程应用而言的,即所有线程都在同一个JVM进程里的时候,使用Java语言提供的锁机制可以起到对共享资源进行同步的作用。如果分布式环境下多个不同线程需要对共享
阅读全文
摘要:前言:在java5以后,增加了JUC的并发包且提供了Lock接口用来实现锁的功能。 Lock是一个接口,核心的两个方法lock和unlock,它有很多的实现,比如ReentrantLock、ReentrantReadWriteLock; ReentrantLock 重入锁,表示支持重新进入的锁,也就
阅读全文
摘要:Condition是一个多线程协调通信的工具类,可以让某些线程一起等待某个条件(condition),只有满足条件时,线程才会被唤醒。 condition中两个最重要的方法: | 方法 | 作用 | | | | | await | 当前线程阻塞挂起 | | signal | 唤醒阻塞的线程 | aw
阅读全文
摘要:锁 互斥锁的本质是-->共享资源 锁的使用 可以修饰在方法层面和代码块层面 class Test{ synchronized void demo(){ //临界区 } //修饰代码块 Object obj = new Object(); void demo(){ synchronized(obj){
阅读全文
摘要:Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。线程池就像数据库连接池的作用类似,只是线程池是用来重复管理线程避免创建大量线程增加开销。 合理的使用线程池: 降低创建线程和销毁线程的性能开销 合理的设置线程池大小可以避免因为线程数超出硬件资源瓶颈带来
阅读全文
摘要:JMM保证原子性、可见性、有序性 原子性 两个高级的字节码指令monitorenter和monitorexit,在java中对应的Synchronized来保证代码块内的操作是原子的 可见性 volatile 写操作的时候会多出一个lock前缀的汇编指令 MESI的缓存一致性协议,来保证多CPU下的
阅读全文
摘要:并发编程基础: 线程状态(NEW、RUNNABLE、BLOCKED、WAITING、TIME_WAITING、TERMINATED) NEW:初始状态,线程被构建,但是还没有调用 start 方法 RUNNABLED:运行状态,JAVA 线程把操作系统中的就绪和运行两种状态统一称为“运行中” BLO
阅读全文
摘要:什么是Dockerfile? Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取`Dockerfile`中的指令自动生成映像。 `docker build`命令用于从Dockerfile构建映像。可以在`docker build`命令中
阅读全文
摘要:jps java process status jps l 主 类 全 名 jps m 运 行 传 入 主 类 的 jps v 虚 拟 机 参 数 jstat 类 加 载 , 内 存 , 垃 圾 收 集 , jit 编 译 信 息 、 https://docs.oracle.com/javase/8
阅读全文
摘要:字节码与数据类型 在虚拟机的指令集中,大多数的指令包含了其操作所对应的 数据类型信息 iLoad:从局部变量表中加载int型数据到操作数栈 大多数指令包含类型信息 类型多,指令少 加载与存储指令 加载和存储指令用于将数据在栈帧中的局部变量表和操作数栈直接来回传输 将局部变量表加载到操作数栈: ilo
阅读全文
摘要:对象创建 • 给对象分配内存 • 线程安全性问题 • 初始化对象 • 执行构造方法 给对象分配内存 指针碰撞 假设Java堆中内存是绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间那边挪动一段与对象大小相等的距离
阅读全文
摘要:表示方法:树形表示法、嵌套集合表示法、凹行表示法、广义表表示法 度为0的是叶子节点或者终端节点 度不为0的是非终端节点或者分支节点或者内部节点 根节点称为开始节点 数的存储结构:双亲表示法、孩子链表法、孩子兄弟表示法 树常用遍历:前序遍历和后序遍历 森林常用遍历:前序遍历和后序遍历 前序遍历一个树等
阅读全文
摘要:性质1 在二叉树的第i层至多有个结点(i1) 性质2 深度为K的二叉树至多有个节点 (k1) 二叉树的遍历 前序遍历 中序遍历 后序遍历 线索二叉树 一棵结点数目为n的二叉树,采用二叉链表的形式存储。对于每个结点均有指向左右孩子的两个指针域,而
阅读全文
摘要:队列的基本运算:置空队列、判空队列、入队列、出队列、取队列头 顺序队列(循环队列) 置空队列 ~~~c void InitQueue(CirQueue Q){ Q front=Q rear=0; } ~~~ 判空队列 ~~~c int QueueEmpty(CirQueue Q){ return Q
阅读全文
摘要:栈 栈主要有空栈、判栈空、判栈满、进栈、出栈、取栈顶元素六种。 顺序栈 空栈: 判栈空 ~~~c int StackEmpty(SeqStack S){ return S top== 1; } ~~~ 判栈满 ~~~c int StackFull(SeqStack S){ return S top
阅读全文
摘要:有向图 无向图 图的遍历 深度优先遍历类似树的前序遍历,若采用邻接矩阵算法时间复杂度O(),若采用邻接表表示时间复杂度O(n+e)。 广度优先遍历类似树的按层次遍历,若采用邻接矩阵算法时间复杂度O(),若采用邻接表表示,时间复杂度为O(n+e)。 图的生成树和最小生成树 最小生成
阅读全文
摘要:排序方法:插入、选择、交换、归并、分配排序 插入排序 直接插入排序 流程图: 代码实现: void InsertSort(int arr[]){ for (int i = 1; i < arr.length; i++) { //需要插入的数据 int temp = arr[i]; int j = i
阅读全文
摘要:优点:链表不需要初始化容量,可以任意加减元素,并且添加与删除元素十分快捷,只需要改变指针域指向的内容即可 , 内存利用率高, 缺点:查找元素,需要通过遍历链表来查找,十分耗时 适用于:需要频繁添加或者删除操作的场景 单链表和双向链表 在存储空间方面:单链表需要的存储空间比双向链表的要少,因为双向链表
阅读全文
摘要:多线程含义 最终目的解决等待问题。 通过并行计算提高程序执行性能 需要等待网络、 I/O响应导致耗费大量的执行时间,可以采用异步线程的方式来减少阻塞 tomcat以前的io模型 客户端阻塞 如果客户端只有一个线程,这个线程发起读取文件的操作必须等待IO 流返回,线程(客户端)才能做其他的事 线程级别
阅读全文