- 博客(20)
- 资源 (2)
- 收藏
- 关注
原创 java策略模式实践
java策略模式 在具体实践中根据业务形态不同做适当调整1、被动方式策略维护规则用 switch case 模式 每新加一个实现类 需根据 type 指定具体实现类优点:所有实现类都必须在context中显示初始化 所有实现类一目了然 比较清晰缺点:context中暴露了具体的接口实现 弱化了context的能力简略代码实现interface Fruit{ String color; int size;}class Apple implements Fruit{ ...
2022-01-24 16:05:54
466
原创 浅谈数据库分库分表
一、传统的应用将数据集中存储至单一数据节点的解决方案,在性能、可用性和运维成本这三方面已经难于满足互联网的海量数据场景。1、性能大多数关系型数据库采用B+数索引,在数据量查过阈值的情况下,索引深度增加也使得磁盘I/O次数增加,导致查询性能下降。2、可用性单一数据节点或者简单的主从结构已经难以满足大数据量请求的场景。3、运维成本从运维成本方面考虑,当一个数据库实例中的数据达到阈值以上,对于 DBA 的运维压力就会增大。数据备份和恢复的时间成本都将随着数据量的大小而愈发不可控。一般来讲.
2020-07-09 18:15:46
719
原创 spring异常事务处理机制
1、事务注解一般用在业务层2、在业务逻辑中抛出的异常若是被try-catch了,事务是无法回滚的,所以正确的操作是在遇到异常场景需要回滚时,手动抛出RuntimeException(默认情况下Spring 中的事务处理只对RuntimeException 方法进行回滚,所以,如果将Runtime Exception 替换成普通的Exception 不会产生回滚效果。 )3、spring中...
2019-05-27 18:00:34
1575
原创 oracle数据库操作总结
一、数据库操作语句 1、创建数据库语句 create database databasename; 2、删除数据库语句 drop database databasename;二、数据库表操作语句 1、创建数据表语句 create table (col1 type not null default ' defau...
2019-01-18 15:47:55
283
转载 深入Java内存模型——内存操作规则总结
原博客:http://blog.youkuaiyun.com/ns_code/article/details/17377197主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量主要是指共享变量,存在竞争问题的变量。Java内存模型规定所有的变量都存储在主内存中,而每条线程还有自己的工
2017-05-26 16:09:44
347
原创 Synchronized关键字解析
java多线程synchronized关键字详解 多线程的同步机制是通过队资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同步用以解决多个线程同时访问可能出现的问题。 同步机制可以使用synchronized关键字实现。 当synchronized关键字修饰一个方法的时候,该方法叫做同步方法,修饰一个块的话,该块叫做同步快。 1、有关线程获得锁之后什
2017-05-21 11:33:31
337
原创 volatile关键字解析
1、volatile关键字修饰的变量(类的成员变量和类、类的静态成员变量)是不稳定的,但是能保证绝对的可见性。 一旦一个变量被volatile关键字修饰之后,就具备了一下两层含义两层含义: 1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这个新值对其他线程来说都是立即可见的。 2)禁止进行指令重排序。看如下的代码段执行://线程1boolean stop = fa
2017-05-19 18:49:12
398
原创 Java内存模型
1、概述多任务和高并发是衡量一台计算机处理器能力的重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事物处理数(Transaction per Second ,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,而TPS值与程序的并发能力有着密切的联系,因此,在讨论java内存模型和线程之前,有必要简单介绍一下硬件的效率与一致性。2、硬件的效率与一致性 由于计算机的存储
2017-05-17 21:20:10
324
原创 java类加载器加载机制解析
类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java Applet 需要中从远程下载 Java 类文件到浏览器中并执行。现在类加载器在 Web 容器和 OSGi 中得到了广泛的使用。一般来说,Java
2017-05-10 10:17:38
327
原创 二叉树的递归和非递归前、中、后序遍历
1、二叉树树的递归遍历,程序简洁,前、中、后遍历相差不大。本例中用到的二叉树为: 前序遍历为:10 6 4 8 14 12 16 中序遍历为:4 6 8 10 12 14 16 后续遍历为:4 8 6 12 16 14 10 非递归代码:`递归版的前序遍历:private static void TraverseTree(BinaryTreeNode root,Arr
2017-05-06 11:27:17
676
原创 哈希表及处理冲突的方法
**哈希法又称散列法、杂凑法以及关键字地址计算法等,相应的表称为哈希表。这种方法的基本思想是:首先在元素的关键字k和元素的存储位置p之间建立一个对应关系f,使得p=f(k),f称为哈希函数。创建哈希表时,把关键字为k的元素直接存入地址为f(k)的单元;以后当查找关键字为k的元素时,再利用哈希函数计算出该元素的存储位置p=f(k),从而达到按关键字直接存取元素的目的。**当关键字集合很大时,关键字值
2017-05-04 11:38:27
550
原创 冒泡排序及其改进算法
1、简单冒泡排序的思想就是像冒水泡一样,将最大的泡冒在数组最后,但是这里面有一个很大的问题:每次循环只是找最大的数,而其他数则原封不动,即数据的流动很慢,这样的话,效率自然会很低,因为排一次序,只做一件事:找最大的数,并把这个数复制到未排数组的最前面。 2、改进的冒泡排序呢,就是在原来简单冒泡排序的基础上,不再是只找最大的数,而是遇到比当前数据大的数,就放在当前的数后面,这样一次排序下来,即把较小
2017-04-27 10:02:27
863
原创 递归和非递归实现归并排序
1、递归实现归并排序 递归排序其实也是利用了完全二叉树的结构形式,所以时间复杂度和logN挂钩的。具体递归版的归并排序呢,看下面的代码: public class MS { public static void main(String[] args) { int[] s = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7
2017-04-26 18:23:49
467
原创 堆排序
堆排序是基于完全二叉树实现的,堆分为大顶堆和小顶堆,顾名思义,大顶堆是指每个非终端节点的值大于其孩子节点的值,这样的构造使得根节点的值为数组中的最大值。对小顶堆也是同样的构造,将数组中最小的数放置在根节点,每一个双亲节点的值都小于孩子节点的值。 具体算法如下: 1、大顶堆算法实现:public class Heap { public static void main(String[] ar
2017-04-25 17:43:03
276
原创 简单选择排序及其改进算法
1、未改进的简单选择排序 public static void main(String[] args) { int[] s={9,1,5,8,3,7,4,6,2}; SimpleSelectSort(s); } private static void SimpleSelectSort(int[] s) { for(int i=0
2017-04-25 08:52:51
1154
原创 内存泄漏和内存溢出的区别和联系
1、内存泄漏memory leak :是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。 2、内存溢出 out of memory :指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出。
2017-04-20 16:46:25
60297
7
原创 关于String StringBuilder StringBuffer 类
1.String 类对象的不可更改性: 例如:String s=“welcome to java”; s=”html”; welcome to java 这个对象依然是存在的,html这个对象也是存在的,只不过现在s指向html 这个对象,虽然给s重新赋值,但是“welcome to java”这个String类对象没
2017-04-11 18:42:28
283
原创 sizeof函数和strlen()函数
sizeof函数功能:计算数据空间的字节数 在32或者64位编译器下所占字节是不同的,具体如下: 1、32位编译器: 32位系统下指针占用4字节; char:1个字节 char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
2017-04-03 17:39:39
604
原创 关于String.valueOf()方法的使用
1、由基本数据形态转换成String类型:(注意这些方法都是静态的 static) 由String类的valueOf()函数的躲在实现。 String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串 String.valueOf(char c) : 将 char 变量 c 转换成字符串 String.valueOf(char[]
2017-03-25 11:14:14
1395
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅