03 2019 档案
摘要:spring中几种事务的实现方式? 1.编程式事务管理对基于 POJO 的应用来说是唯一选择。我们需要在代码中调用beginTransaction()、commit()、rollback()等事务管理相关的方法,这就是编程式事务管理。(已经不用了) 2.基于 TransactionProxyFact
阅读全文
摘要:我们的Starer提供一个Service,包含一个能够将配置文件中配置的字符串根据传入的字符进行分割的方法String[] split(String separatorChar)。将配置文件中的字符串读入 配置文件读取类 编写自动配置的类: 最后: 在resources/META-INF/下创建sp
阅读全文
摘要:1.加了钥匙的搜索,很有趣 关键点就是用位来保存钥匙的状态 https://www.nowcoder.com/practice/e3fc4f8094964a589735d640424b6a47?tpId=90&tqId=30779&rp=1&ru=/ta/2018test&qru=/ta/2018t
阅读全文
摘要:乘法: 思路:用一个长度为两个字符串长度和的数组保存两个字符串下标的值(在新的数组中的下标就是这两个下标的和)相乘的结果,然后再第0位往后做进位处理,取余保存为当前位的值,去商加到下一位的值中,继续做相同的处理。 加法,比乘法简单很多
阅读全文
摘要:链表节点结构: public static class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } 1.判断链表是否存在环:通过快慢节点 public boolean isLoop
阅读全文
摘要:OSI的体系结构: 具体协议 ARP协议: 数据在传输的过程中,有不断封装过程,到了链路层的话(以太网传输),在以太网的帧格式中会出现目的主机的MAC地址,但是我们从一开始就只知道目的主机的IP地址,所以这里用到了ARP协议(简单来说就是寻找对应 目标的MAC地址) 源主机先在自己的ARP缓冲区中寻
阅读全文
摘要:分表设计:对于访问极为频繁且数据量巨大的单表来说,我们首先要做的就是减少单表的记录条数,以便减少数据查询所需要的时间,提高数据库的吞吐,这就是所谓的分表! 垂直拆分: 1.当一张表的字段过多时则可以考虑垂直拆分。 2.通常是将一张表的字段才分为主表以及扩展表,使用频次较高的字段在一张表,其余的在一张
阅读全文
摘要:char和varchar区别: 在MyISAM存储引擎的下面: 1.char是固定长度,varchar长度可变: 存储时,前者不管实际存储数据的长度,直接规定CHAR规定的长度分配存储空间;而后者会根据实际存储的数据分配最终的存储空间。通常情况下,varchar能够节约磁盘空间,为此往往认为其能够提
阅读全文
摘要:第一范式(1NF): 数据库表中的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。 简而言之,第一范式就是无重复的列。例如,由“职工号”“姓名”“电话号码”组成的表(一个人可能有一部办公电话和一部移动电话),这时将其规范化为1NF可以将电话号
阅读全文
摘要:MySQL的基本存储结构是页: 页的中间有一部分专门用来存储行记录 各个数据页之间组成一个双向链表,每个数据页里面的记录又组成单向链表。 mysql底层结构是采用B+树。 在默认的情况下,我们会为id创建索引,每个数据页存储的是相关的数据项,也可能是目录项 B+索引和hash索引: B+树是多路平衡
阅读全文
摘要:这里重点介绍NIO 待定 http://www.apigo.cn/2018/11/09/javacore5/ https://juejin.im/entry/598da7d16fb9a03c42431ed3 https://mp.weixin.qq.com/s/c9tkrokcDQR375kiwCe
阅读全文
摘要:为什么? hash一致性算法主要应用于分布式系统中,当数据量过大,需要进行分库的时候采用这个算法。 具体实现: 使用普通的hash算法,在某一个服务器宕机或者添加新的服务器的时候,几乎所有的数据都会受影响,所以出现了hash一致性算法。 一致性hash算法是将整个hash值空间组织成一个虚拟的圆环,
阅读全文
摘要:线程池的好处: 第一:降低资源消耗。通过重复利用已创建的线程来降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以可以不用等待线程的创建就能立即执行。 第三:提高线程的可管理性,线程是稀缺资源,不能无限制的创建。 额外好处:有效避免this逃逸问题:this逃逸是指在构造函数返
阅读全文
摘要:输入:abc 输出:bac,cba,acb,bca,cab,abc 全排列的问题: 基本思想就是递归,固定第一个数,先求后面的所有的数的全排列,再用这个固定的数和后面的每个数来交换,注意重复字符的处理。 利用全排列解决一些问题: 比如从1,2,3,4里面拿出3个数,组成不重复的 就是在退出的地方重新
阅读全文
摘要:查询的话就和普通的平衡二叉树一样。时间复杂度O(logn) 这里我们回顾红黑树的特点: 1.根节点为黑色 2.红色节点的子节点一定都是黑色 3.每个叶子节点都是黑色的(空节点) 4.从任一节点到其每个叶子的路径都包含相同数目的黑色节点。 红黑树和普通的平衡二插树最大的优势就是任何不平衡都可以在三次以
阅读全文
摘要:HashMap不是线程安全的,hashTable是线程安全的,但是它对整个hash表加锁,get/put操作都加锁了,在高并发的情况下性能不好,于是就有了ConcurrentHashMap ConcurrentHashMap的读操作是不用加锁的。 为什么1.8不再采用reentrantlock,主要
阅读全文
摘要:http协议封装的数据包->tcp/ip->服务器 缺点:数据包中途被窃取或者被篡改。 http协议封装的数据包->ssl加密->tcp/ip->服务器:缺点:虽然安全,但是开销变大,传输数据变慢。 http的连接很简单,是无状态的;https协议是由ssl+http协议构建的可进行加密传输、身份认
阅读全文
摘要:Thread使用: class mythread1 extends Thread { int num=10; @Override public void run() { while(num>0) { System.out.println(Thread.currentThread()+"-"+num-
阅读全文
摘要:进程与线程的区别: 进程是是计算机系统资源的最小单位,进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。 线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进
阅读全文
摘要:集合类中线程安全的就只有,vector,hashtable,concurrentHashmap ArrayList: ArrayList 实现于 List、RandomAccess 接口。可以插入空数据,也支持随机访问。 ArrayList的初始容量为10,这里我们主要了解一下ArrayList的扩
阅读全文
摘要:1.集合转数组toArray的用法 2.数组转集合,只能用List 3.关于数组的复制copyOf 4.System.arraycopy(); copyOf内部也是用的System.arraycopy(); 5.subList方法:截取的新的List是持有原List的引用的 6.Colletions
阅读全文
摘要:1.实现conparable接口 2.匿名内部类(用lambda的方式写)
阅读全文
摘要:四种垃圾收集算法: 1.标记清除算法: 算法分为“标记”和“清除”阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。它是最基础的收集算法,效率也很高 它主要会带来的问题是空间问题(会产生大量的不连续的碎片) 2.复制算法: 为了解决内存空间碎片化问题,“复制”收集算法出现了。
阅读全文
摘要:内存溢出 out of memory: 是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory; 内存泄露 memory leak: 是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。 memor
阅读全文
摘要:问题引入 1.使用索引为什么可以加快数据库的检索速度啊? 2.为什么说索引会降低插入、删除、修改等维护任务的速度。 3.索引的最左匹配原则指的是什么? 4.Hash索引和B+树索引有什么区别?主流的使用哪一个比较多?InnoDB存储都支持吗? 5.聚集索引和非聚集索引有什么区别? Mysql默认的数
阅读全文
摘要:使用Redis缓存所带来的好处: 1.降低后端的负载: 对高消耗的SQL:join结果集/分组统计结果缓存 2.加速请求时间: 在内存中做IO操作很快 3.大量写合并为批量写: 频繁更新某一个值,可以在缓存层面统一处理了,再写入到数据库中。 缓存更新策略 1.LRU/LFU/FIFO算法剔除,给缓存
阅读全文
摘要:操作系统如何分配空间给JVM? JVM首先会向操作系统申请空闲内存。JVM 对操作系统说“给我 64M(随便模拟数据,并不是真实数据) 空闲内存”,于是,JVM 向操作系统申请空闲内存作系统就查找自己的内存分配表,找了段 64M 的内存写上“Java 占用”标签,然后把内存段的起始地址和终止地址给
阅读全文
摘要:插入排序 1.简单插入,前面排好了序,后面往前插 //时间复杂度O(n^2),稳定,逆序的时候花费时间最长 public void InsertSort(int a[]) { int n=a.length; for(int i=1;i<n;i++) { int temp=a[i]; int j=i-
阅读全文
摘要:在Spring中经常利用BeanFactory的getBean方法去获取Bean就是一个简单工厂的设计模式的实现,通过Bean的ID去获取这个对象的实例。Bean的ID一般配置在XML文件中。 工厂方法 在工厂方法模式中, Spring不会直接利用反射机制创建bean对象, 而是会利用反射机制先找到
阅读全文
摘要:Spring是什么?由来,思想,特性? Spring是一套为了解决企业应用开发的复杂性而创建的框架,特点是分层的架构,允许用户在不同层面使用不同的组件进行组合。同时通过IOC容器来降低耦合,简化开发。利用AOP来进行切面编程统一管理通用模块。 Sping由哪些产品组成?作用,特点,使用场景? 我在工
阅读全文
摘要:自旋锁和自适应锁: 在互斥同步对性能最大的影响就是阻塞和唤醒线程的实现,因为挂起线程/恢复线程的操作都需要转入内核态中完成(用户态转换到内核态会耗费时间)。 自旋锁原理非常简单,如果持有锁的线程能在很短时间内释放锁资源,那么那些等待竞争锁的线程就不需要做内核态和用户态之间的切换进入阻塞挂起状态,它们
阅读全文
摘要:首先理解悲观锁和乐观锁: 乐观锁: 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则
阅读全文
摘要:了解一些基本概念: 同步与异步:(主要是针对多个任务或者事件) 同步:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行(单线程),一个事件或者任务的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行; 异步:如果有多个任务或者事件发生,这些事件可以并发地执行(多线程或者多进程),一
阅读全文