自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

转载 CAS的原子性保证

比如上面例子中,**如果一个线程在执行i = i +1,如果在执行这段代码的过程中,在总线上发出了LOCK锁的信号,那么只有等待这段代码完全执行完毕之后,其他CPU才能从变量 i 所在的内存读取变量,然后进行相应的操作。它的核心思想是:**当CPU向内存写入数据时,如果发现操作的变量是共享变量,即在其他CPU中也存在该变量的副本,会发出信号通知其他CPU将该变量的缓存行置为无效状态,**因此当其他CPU需要读取这个变量时,发现自己缓存中缓存该变量的缓存是无效的,那么它就会从内存重新读取。

2023-03-17 09:53:34 1305

原创 CAS乐观锁

乐观锁总是假设最好的情况,认为并发安全问题一定不会发生,所以不需要加锁。每次去拿数据的时候都认为别人不会修改,所以不会上锁。但是在最终更新数据的时候,会判断一下在此期间别人有没有更新过这个数据,如CAS算法的实现。CAS算法主要分成3步:获取共享数据的值,拷贝副本到工作内存,保存到值 current对工作内存中的共享数据进行操作,获得更新后的值 next执行CAS (compare and set)操作,先去主存获取当前共享变量的值value,与自己的旧值current比较如果二

2023-03-15 09:37:05 187

转载 JVM虚拟机栈和堆的理解

JVM栈和堆

2023-03-14 15:42:50 160

原创 线程池运行原理

线程池

2023-03-07 16:14:54 238

原创 VS导入没有.sln文件的项目

关于在VS中导入没有.sln文件的.net项目     导入的是一个网站项目,步骤是先创建一个空白的解决方案,再在解决方案中点击右键,添加一个现有网站项目,再选择相应的项目文件,即可进行网站的运行。如果在运行过程中出现xxx.cs文件中不存在该类型的命名或命名空间,那么极有可能是相应的.net框架版本不一致导致,所以在点击该项目的属性页中调整相应的框架版本,即可进行相应的网站项目运行。...

2021-09-16 22:28:20 1905

原创 DWZ------查找带回方法

项目中第一次使用DWZ,之前没有用过,在开发过程中用户有这样一个需求,在其中一个页面中选择,可以带出其他页面中的数据。因此就发现了DWZ中的这个查找带回的方法,感觉还是很可以的。需求:原本用户是要填写这么多的数据,但是实际情况下,一般来说都会有一个基础数据库给他们选择,他们只需要选择,即可完成下面这个文本框的填写。即通过下图中作业项目(一级)的选择就可以把一些对应的数据都带出,而不需要去依次填...

2019-11-26 17:34:07 832 2

原创 常用时间类型转换

Date通常用来存储时间。但是在进行时间计算时,比如加一分,一小时,我们通常用TimeStamp来做。而输出或展示时,通常又转为比较常见的yyyy-MM-dd HH:mm:ss格式输出,所以这三者的互相转化是相对较经常用的。1.Date转String:利用SimpleDateFormat的format方法Date date = new Date();DateFormat sdf = new ...

2019-11-13 15:17:27 156

转载 数据库表设计

//创建用户且置密码,在MySQL中行,但在Oracle中行  ----必须在超级管理员身份下操作create user hncu identified by '1234'DROP...

2019-07-28 16:05:35 291

转载 Java 接口(interface)的作用与好处

一、明明可以在类中直接写所需的方法,为什么还要多写一个接口(或抽象类)?二、抽象类和接口都差不多,在什么时候才选择使用接口?一、抽象类 为了多态的实现假设现在有7个类,分别如下: 1. 动物(Animal)抽象类 2. 哺乳动物(Mammal)抽象类 继承动物类 3. 爬行动物(Reptile)抽象类 继承动物类 4. 老虎(Tiger) 继承爬行动物类 5. 蛇类(...

2019-07-24 09:23:08 282

原创 物理层

基本概念:物理层的作用是尽可能的屏蔽掉这些传输媒体和通信手段的差异,使物理层上面的数据链路层感觉不到差异,这样子就可以使数据链路层只需要考虑如何完成本层的协议和服务,不必考虑网络具体的传输媒体和通信手段是什么。信噪比:信号的平均功率和噪声的平均功率之比。 信噪比= 10 log以10为底的S/N;香农公式:C = W log以2为底的(1+S/N);香农公式表明信道的带宽或信道中的信噪比越大,...

2019-07-20 09:08:18 149

原创 计算机网络概述

进制转换:https://baike.baidu.com/item/进制转换计算机网络是由若干结点和连接这些结点的链路组成。对等连接:P2P连接,是指两台主机在通信是并不区分哪一个是服务器请求方,哪一个是服务器提供方。分组交换的特点:分组交换采用存储转发技术,高效,灵活,迅速,可靠。但是在存储转发的过程中需要排队,会造成一定的时延,另外各分组必须携带的控制信息会造成一定的开销。分组交换是单个...

2019-07-20 09:01:32 160

原创 第一章:java多线程技能

1:进程和线程的概念进程是受操作系统管理的基本运行单元,可以把进程列表中的.exe程序理解成一个进程。线程是进程中独立运行的子任务,比如,QQ.exe在运行的时候会有很多的子任务在运行,比如,下载文件线程,传输数据线程,发送表情线程,这些都可以看成是QQ.exe进程的子任务。线程是异步的,不是同步的,不用按照排队顺序执行,而是根据CPU安排。2:使用多线程 2.1:继承Thread类;...

2019-07-17 12:39:22 135

原创 eclipse中项目配置环境和关联项目步骤

先在project Facets中配置jdk环境变量添加JARs包,在add jars中添加在主项目中添加这个项目与之关联。

2019-06-04 18:59:24 610

原创 为什么重写了equals方法一定要重写hashcode方法 ; ==和equals的区别

Object类是所有类的超类,在Object类中定义了equals方法和hashcode方法。在Object类中,equals方法是判断这两个对象是否具有相同的引用。hashcode方法是默认导出对象的存储地址。如果重写了equals方法,看一个例子。在这个Student类中重写了equals方法,比较的是这两个对象的内容。那么equals方法返回的是true,但是又因为没有重写hashcod...

2019-05-14 09:27:49 214

原创 为什么dao层和service层要写接口和实现类

为什么要用Service接口?是让表示层不依赖于业务层的具体实现。为什么要用DAO接口?是让业务层不依赖于持久层的具体实现。举个例子,用DAO接口,那么持久层用Hibernate,还是用iBatis,还是 JDBC,随时可以替换,不用修改业务层Service类的代码。不用接口的话,假如修改了dao中的代码,因为service引用了dao中的类,那么也要改变service里面的代码,改完之后要重新...

2019-05-11 15:23:16 13752

原创 贪心1:金条问题

题目: 一块金条切成两半,是需要花费和长度数值一样的铜板的。比如 长度为20的 金条,不管切成长度多大的两半,都要花费20个铜 板。一群人想整分整块金 条,怎么分最省铜板? 例如,给定数组{10,20,30},代表一共三个人,整块金条长度为 10+20+30=60. 金条要分成10,20,30三个部分。 如果, 先把长 度60的金条分成10和50,花费60 再把长度50的金条分成20和30, 花费...

2019-04-03 21:23:25 239

原创 字符串1:前缀树的使用

前缀树: Trie树,又称字典树、前缀树,是一种树形结构,是哈希树的变种,是一种用于快速检索的多叉树结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。Trie树也有它的缺点,Trie...

2019-03-27 21:08:09 371

原创 哈希4:使用并查集解决岛问题

岛问题一个矩阵中只有0和1两种值,每个位置都可以和自己的上、下、左、右 四个位置相连,如果有一片1连在一起,这个部分叫做一个岛,求一个 矩阵中有多少个岛?举例:这个矩阵中有三个岛。思想:1:使用递归DFS,深度搜索;2:使用并查集;这里主要说一下使用并查集的方法。假设把那个大的岛分成两个岛,这样子分两个的时候有4个岛,那么我们可以怎么算出岛的个数呢** 我们只需要看这两个岛的边...

2019-03-26 20:18:16 334

原创 哈希3:认识并查集

并查集: 并查集主要有两个作用。1:它可以查询两个元素A和B是不是同一个集合里面的。2:它可以把A和B两个元素所在的集合合并起来,注意是两个元素所在的集合,而不是两个元素。使用并查集的时候要一次性把数据全部输入,不支持动态的变化。下面来说一下实现并查集的结构:使用这样一种方式,假设每一个元素都是自己的代表节点,用代表节点表示集合。合并时:那个集合的元素更少,就挂在元素多的那个集合下面查...

2019-03-26 16:57:42 278

原创 哈希2:认识布隆过滤器,一致性哈希

**布隆过滤器:**当我们要解决处理海量数据的时候,我们可以使用布隆过滤器。它其实也是一个集合。但是它有失误率。例子:当我们处理黑名单的时候,比如有100亿个黑名单,每一个就是一个链接,每个url是64个字节,当用户访问的时候我要判断是不是属于这个黑名单。显然我们可以想到用哈希表来处理,但是当我们用哈希表来解决的需要多大的空间呢,6400亿个字节也就是640G,太大了。这个时候我们就可以使用...

2019-03-24 16:52:09 190

原创 哈希1:认识哈希函数和哈希表;设计RandomPool结构

Hash函数特点:1.输入域无穷,输出域有限。例如:有无穷多个(在工程中可以具体到多少个,例如1000)输入参数经过hash函数映射后得到有限的输出域{1,2,3,4}。2.输入参数确定,经过hash函数映射出的返回值一样。(不是随机函数,不同的输入参数可能得到相同的返回值)。3.输入域上的值经过函数值映射后会几乎均等的分布在输出域上。 得到的输出值%m,也会均匀分布在0–m上。具体了解...

2019-03-24 11:40:49 211

原创 C语言中的值传递和地址传递,C++的引用

typedef struct {elemtype data[maxsize];int length;}Sqlist;定义一个这样的线性表结构体。理解C语言中的值传递和地址传递,如果没有用指针,而是直接用变量传递个函数,那么这个传递是实参传递,实参不会改变;例如,int ListEmpty(Sqlist L) 这个没有指针变量,所以下面函数直接把实参传递给了它,可以直接使用L.leng...

2019-03-17 10:30:37 472

原创 二叉树7:已知一棵完全二叉树,求其节点的个数

要求:时间复杂度低于O(N),N为这棵树的节点个数思想:如果采用遍历的话,那么复杂度就刚好是O(n)。不符合要求;首先我们可以知道对于一个完全二叉树来说,具有n个节点的完全二叉树的深度是(log以2为底n)+1,所有我们可以先得到这棵二叉树的深度,即一共有多少层。然后判断这棵二叉树的右子树是否也到达了这个深度,如果到了,那么这棵二叉树的左子树一定是一棵满二叉树。再依次使用递归判断右子树。如果右...

2019-03-14 22:17:19 943

原创 二叉树6:判断一棵树是否是完全二叉树

**完全二叉树:**所谓完全二叉树是指除了最后一层之外,其他每一层的结点数目都是满的,如果最后一层也满了就是满二叉树,如果最后一层不满那么结点全部集中在左侧,从左侧开始补齐。满二叉树是一棵特殊的完全二叉树,对于完全二叉树这种特殊的结构,它可以使用数组来表示各个结点,此时每个结点与它的子节点的位置下标之间存在直接的对应关系,即从数组中i=1开始存放元素,于是对于某个结点i,它的左孩子下标是2i,它的...

2019-03-14 21:34:57 501

原创 二叉树5:判断一棵树是否是搜索二叉树

**搜索二叉树(BST):**所谓搜索二叉树,即左子树上的所有节点都比根节点的小,注意是所有;右子树上的所有节点都比根节点的大。所有搜索二叉树有一个特点,如果采用的是中序遍历的方法遍历这棵二叉树的话,那么这个序列一定是单调递增的。思想:怎么判断是否是一棵搜索二叉树呢,我们可以通过中序遍历这棵二叉树的方法,如果这个序列是单调递增的那么这棵树一定是搜索二叉树。使用中序遍历的非递归方法可以很简单的就...

2019-03-14 20:35:16 359

原创 二叉树4:判断一棵二叉树是否是平衡二叉树

平衡二叉树,又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多。 思想:即每个节点...

2019-03-14 18:52:53 384

原创 二叉树3:介绍二叉树的序列化和反序列化

二叉树的序列化:所谓序列化也就是持久化,把二叉树变成一个字符串来存放在一个文件里面。二叉树的序列化也诶有很多方式。一般都是使用先序序列化的方式,先介绍二叉树先序序列化的方式,假设序列化的结果字符串为str,初始时str等于空字符串。先序遍历二叉树,如果遇到空节点,就在str的末尾加上“#!”,“#”表示这个节点为空,节点值不存在,当然你也可以用其他的特殊字符,“!”表示一个值的结束。如果遇到不为...

2019-03-12 20:55:07 110

原创 二叉树2:在二叉树中找到一个节点的后继节点

【题目】 现在有一种新的二叉树节点类型如下: public class Node { public int value; public Node left; public Node right; public Node parent; public Node(int data) { this.value = data; } }该结构比普通二叉树节点结构多了一个指向父节点的parent指针。假 设...

2019-03-12 19:31:53 241

原创 二叉树1:实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式

二叉树的先序遍历:3种遍历理解

2019-03-09 16:11:06 3933

原创 链表4:复制含有随机指针节点的链表

【题目】 一种特殊的链表节点类描述如下: public class Node { public int value; public Node next; public Node rand; public Node(int data) { this.value = data; } } Node类中的value是节点值,next指针和正常单链表中next指针的意义 一 样,都指向下一个节点,rand指...

2019-03-06 19:56:27 96

原创 链表3: 两个单链表相交的一系列问题

【题目】 在本题中,单链表可能有环,也可能无环。给定两个 单链表的头节点 head1和head2,这两个链表可能相交,也可能 不相交。请实现一个函数, 如果两个链表相交,请返回相交的 第一个节点;如果不相交,返回null 即可。 要求:如果链表1 的长度为N,链表2的长度为M,时间复杂度请达到 O(N+M),额外 空间复杂度请达到O(1)。思想:1,用哈希表遍历,如果遍历到相同的则表示有环,因...

2019-03-04 20:22:58 148

原创 链表2:判断一个链表是否为回文结构

【题目】 给定一个链表的头节点head,请判断该链表是否为回 文结构。 例如: 1->2->1,返回true。 1->2->2->1,返回true。 15->6->15,返回true。 1->2->3,返回false。进阶: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂 度达到O(1)。思想:这里介

2019-03-04 17:02:47 118

原创 链表1:反转单向链表,双向链表

反转单向链表 思想:有好几种方法:这里采用的是创建一个新的链表来存放新产生的链表,把原链表的表头节点依次接到新的链表中代码:public static class Node { //定义一个Node节点类 public int value; public Node next; public Node(int data) { this.value = data; ...

2019-03-04 16:29:14 187

原创 对数器,比较器,矩阵打印问题解析

1:对数器的使用 点击链接2:认识java中的比较器的使用 点击链接3:猫狗队列 【题目】 宠物、狗和猫的类如下: public class Pet { private String type; public Pet(String type) { this.type = type; } public String getPetType() { return this.type...

2019-03-02 15:49:30 178

原创 栈变队列,队列变栈,猫狗队列

栈:先进后出; 队列:先进先出;栈变队列:用两个栈结构实现队列结构。思想:定义一个stackPush栈用来存放添加进来的元素,定义一个stackPop栈用来返回队列的poll方法。一开始将添加的元素放入到Push栈里面,然后如果要调用队列的poll方法时,使用while循环将Push栈里面的元素全部放入到Pop栈里面,再返回Pop栈的pop方法。代码:public static cla...

2019-02-28 20:56:43 224

原创 算法之桶排序,数组结构实现大小固定的队列和栈

桶排序:把数据放入一个个定义范围的桶中,定义的范围必须完全一样。每个桶再排序。经典例题:给定一个数组,求如果排序之后,相邻两数的最大差值,要求时 间复杂度O(N),且要求不能用非基于比较的排序。思想如上图所示。用数组结构实现大小固定的队列和栈思想:先定义一个数组的大小即栈的长度,再定义一个变量来表示当前栈顶元素的位置代码如下:变队列:用3个变量,一个size定义队列的长度,一个first...

2019-02-28 19:48:33 195

原创 Spring AOP 的使用

什么是AOP:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP(向对象编程)的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。关于AOP,我们要认识一下AOP的一些必须要掌握的...

2018-10-28 13:02:13 119

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除