自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

dressrosa

I would be better

  • 博客(35)
  • 收藏
  • 关注

原创 spring和mybatis的dao层接口调用的原理探究

首先我们来看看mybatis简单的使用方法.我们需要配置一个UserDao.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" &...

2019-06-08 21:15:31 3648 1

原创 cpu缓存知识总结

cpu为了加快数据存取,采取了三级缓存结构:三级缓存大小随着离cpu距离而增大,其中L1和L2缓存是各个内核专属,而L3则是同一个cpu卡槽中所有内核共享.通过三级缓存减少cpu与内存和硬盘的交互,可以大大提高数据的读取速度.缓存行(cache line):数据在三级缓存中,并不是随机存储的,而是以缓存行为基本存储单位存放在三级缓存中.缓存行大小一般为64字节.也就是说当邻近的数据可能被...

2019-05-22 20:09:16 784

原创 利用redis设计分布式锁

首先说下在多台服务器运行的情况下,我们通常会遇到哪些问题.1.前端重复点击的时候,比如发表文章吧.后端接收到多次接受到请求,由于是多台服务器,请求可能被分发到了不同的服务器上执行.这时候,就可能产生文章同时插入数据库的情况.类似这种情形主要出现在更新和插入的时候.2.定时任务的执行.多台服务器会同时执行相同的任务.这样就会导致重复的操作.对于上面的情况,如果存在于单机上,即同一个jvm中,只...

2018-11-12 20:45:42 657 3

原创 mysql锁的使用总结

来总结一下mysql数据库锁的使用. 目前,我所知道的数据库锁就是悲观锁和乐观锁.一般用到数据库锁的场景都是对数据的准确性比较高的,比如钱等.由于水平有限,这里不研究原理,只看看怎样去使用数据库锁. 首先,对于悲观锁,也就是我们默认每次的更新都是非常不安全的操作,我们得给她加锁.相当于java里面的synchronized.在mysql里面这样使用: select xxx for u...

2018-07-16 21:21:06 3467 2

原创 spring开放式扩展的理解

来梳理自己对spring扩展的简单理解. 从大的方面来看,我们可以扩展spring来让我们自己开发的框架融入她的体系中.小的方面,我们可以利用她开放的各种功能接口来自定义一些功能替代spring的默认值.我就从这俩方面来举几个例子来讲下spring扩展的特点. 那现在比如我们自己捣鼓了一个框架,想把她给用起来.然后发现,呀.我们很多系统都是基于spring做的,那么我们自己搞的框架兼容到spr...

2018-07-05 19:59:30 585

原创 maven多module项目的引用问题

问题描述:当建一个多module的maven项目时,我们想要的效果是: 1. 当子项目引用父项目时,我们可以根据需要引用其他子项目,而不是全部其他子项目. 1. 当别的项目引用我们这个父项目时,应该引用了全部子项目. 那我们如何达到这个目标. 首先,我们知道maven的pom文件里面,如果我们想引用另一个项目就需要这样:&lt;dependency&gt; &lt;gro...

2018-07-02 22:01:05 44990 13

原创 有趣的clientAbortException

遇到一个非常有意思的异常. 在使用tomcat(jetty也一样)时,如果client请求,server已经收到请求后,但是client突然关闭了请求,会出现无线循环的抛异常.Resolved exception caused by Handler execution: org.apache.catalina.connector.ClientAbortException: java.io...

2018-06-26 20:08:23 7586 1

原创 从零开始我的rpc第二篇之通信层Consumer端

首篇我提到rpc的关键是consumer和provider间进行socket通信,来进行如方法,参数等信息的传递.所以,通信层是非常的重要的,我们要保证通信的稳定,高效,正确. 我目前所了解和使用的通讯框架就是netty了,当然netty本就是一个非常著名的通讯框架,也值得深入研究.我自己也研究(就是看看)了一段时间,掌握了一些基本的使用.对用在rpc里面也就可以了. 首先,从client这边...

2018-06-20 23:12:51 567

原创 CountDownLatch和CyclicBarrier原理的分析理解

学concurrent并发包的时候,看到countDownLatch和CyclicBarrier有些相似的地方.所以放在一起进行学习分析一下. 首先看一下jdk注释的第一句话简单阐明二者各自的意思:CountDowLatchA synchronization aid that allows one or more threads to wait until a set of opera

2017-02-27 11:48:12 2764

原创 怎么将emoji表情存入mysql

0. stackoverflow > google > baidu1. mysql的数据库, 表 ,字段的字符集必须是utf8mb4,怎么设置自酌,但可以看看自己数据库的字符集 show varaibles like '%set%保证 Character set是utf8mb4 -- UTF-8 Unicode collation是utf8mb4_uni

2016-04-07 14:25:54 5992 1

原创 平台转账的设计

做个平台间余额的互相转账,重点在于如何解决并发访问数据错乱的问题.比如俩个人之间同时都在给对方转账.以及很多人同时给一个人转账.必须保证数据库里面的数据是随时正确的.我本没有想到过这一层面,被提醒的.比如有个转账的方法transfer(业务逻辑主要写在这里)1.首先想到的用多线程加锁,看了资料.是可以实现,但是问题是对方法加锁或者代码块加锁,那么每次只能执行一个线程,a转给b执行了,可

2015-12-14 18:08:49 2158

原创 从零开始我的rpc第三篇之通信层Provider端

上一篇讲了consumer端,这次说下provider端.不过老是在client/consumer,server/provider名词间胡乱转换,挺烦的.个人觉得站在通信层更适合讲client/server,不过站在整个rpc上来讲,还是consumer/provider比较合适.好了,回到这个provider端来. 首先我们梳理下server主要的功能有哪些. 当然server肯定是用来接受...

2018-06-27 21:49:57 691

原创 从零开始我的rpc第一篇之我认识的rpc

rpc是什么呢.从意思来看,翻译为远程过程调用(Remote Procedure Call),目的就是让远程的函数调用起来就像在本地一样轻松方便.类似我们http请求,接收到远程服务器返回的信息.而rpc定位在函数调用上,底层利用tcp传输,更加高效,从而让我们感觉如同本地调用一般. 为什么我们要使用rpc.rpc很好的帮我们解决了远程跨服务器函数调用的问题,而其偏向于函数层面的特点,也就...

2018-06-12 21:52:06 605 1

原创 日常git命令小结

先说自己每日常规提交操作:1.git branch 查看下当前分支,别写错代码了 2.git checkout xxx 切换到某分支 3.git status 查看当前代码状态 4.git add axx.java bxx.java 添加已写的代码,如果确认全部可以git add . 5.git checkout – axxx.java 把添加错的给去掉 6.git commi...

2018-05-23 20:25:29 330

原创 interrupt小结

interrupt意思为中断,为线程运行时提供一个中断机制. 但是中断和阻塞是不一样的,线程的中断并没有结束或暂停线程,而是对线程设置了一个中断的信号,通过此信号来进行具体的其他操作.在Thread里面提供了三个方法: 1. interrupt() 对一个线程进行中断操作,就需要调用此方法,设置中断信号 2. interrupted() 判断线程是否设置过中断信号,返回true/false,同

2017-03-22 21:00:10 471

原创 finally小结

记录一下finally的一些简单知识点.正常情况下finally都会执行,且我们最好不要在finally里面执行业务逻辑,一般用来对资源的释放finally虽说是肯定会执行的,但是有些情况下就不会执行 Thread t = new Thread(new Runnable() { @Override public void run() {

2017-03-22 20:59:09 760

原创 spring注入static变量

在spring中默认是不能注入static变量的,因为static是类变量,而spring是基于实例对象进行注入的. 但是我们有时候需要static的变量进行操作.比如我们经常使用的jedis,如果每次调用jedis的时候都要实例化一遍,是非常麻烦的. 解决办法如下: 1. 我们先通过set方法注入一个jedisPool对象 ,然后再将这个对象赋值给static变量pool,于是我们就可以使用

2017-03-22 20:58:14 1091 1

原创 归并排序

归并排序重点在于合并俩个有序子数组,思想来自于怎么合并俩个有序数组,这里只不过这俩个数组是同一个数组的前后两部分而已.比如 0 1 3 2 4 所以mid=2 俩部分就是0 1 3和 2 4 ,依次比较放入新数组(0 2)取0,然后(1 2)取1,然后(3,2)取2,然后(3,4)取3,这样第一部分取完了,剩下的4直接赋值就行了private static void merge(int

2016-10-13 20:48:14 221

原创 堆排序

堆排序是先将待排序的数看成完全二叉树的结构排列.以大顶堆为例,堆顶数总是大于左右孩子.堆排序的思想:1.现将所有数初始化成一个大顶堆2.将堆顶a[0]和最后一个子节点a[len-1]交换位置3.将余下的数再重新构建成大顶堆4.重复2,3过程,直到全部排序完成(截图于百度百科)构建一个简单的大顶堆的思路就是从第一个非叶子节点开始(至

2016-09-21 18:21:40 264

原创 希尔排序

希尔排序是对直接插入排序的一种改进,利用了直接插入排序在数量少,有序性比较好的情况下效率高.所以产生增量的概念,根据增量d将数组分割为几个子数组,然后对子数组进行直接插入排序,于是在增量d逐步递减的时候,数组的有序性越来越好,所以子数组越来越大的情况下,排序的效率依然很高.public static void shellSort(int a[]) {int i, j, d;int

2016-09-18 17:26:09 208

原创 直接插入排序

直接插入排序就是 每插入一个新数的时候重新排一次序.假如有5个数 5 3 4 1 2,要求按照从小到大排序,那么直接插入的思想是这样的,我们先假设起始状态下我们只有5这一个数的数组,然后有个数3要插入这个数组,这时我们已经默认数组有俩个数了,就是{5 ,_},然后比较,5>3,那么将5赋值给3这个位置,变成{5,5},再将拿出去的3放回5原来的位置去,变成{3,5}.

2016-09-13 15:56:25 307

原创 数组转list的小知识

String phone = "a,b,c,d";Arrays.asList(phone.split(","));这个产生的是一个固定大小,不可变的数组,是无法进行增加,删除操作的,作用有限 ,jdk里面解释为:@SafeVarargsReturns a fixed-size list backed by the specified array. (Chan

2016-06-17 15:33:09 333

原创 支付宝即时支付java后台总结

支付宝提供的接口前提都是基于用户对商家的概念,就是说支付都是打到商家的账户上的.没有个人之间的转账.支付其实就是生成一个单号,相当于在商家那里买了一个商品.在 支付宝开发平台有提供各种形式的demo;java版本的包名create_direct_pay_by_user-JAVA-UTF-8;这个后面需要.看看支付宝提供的几个接口类:1配置类:提示:如何获取安全校验码

2015-12-10 18:09:34 11006

原创 前后台传参问题简记

前台传参到后台:1  function xxx(item,entity) {   cargoEntity = entity;    $.ajax(      {        type: 'POST',        url: '${ctx}/pipeiliebiao/tBizPplb/goodsMatchList' ,        data:{         

2015-12-09 07:58:28 804

原创 串的kmp模式匹配

串就是很多字符组在一起,就是一个字符数组。串的操作不是很复杂,但是查找子串却很麻烦。我是参考大话数据结构这本书学习的,看了n遍,基本思想是懂了(但是还没透彻),我把我所能理解的记录下来。  先说传统的也就是正常思维都能想出来的方法,实现也很简单。先从概念上理解,假设我们有一个字符串abcdefgh,有一个子串ef那么我们平常应该怎么想。肯定是把ef拿过去一个一个的比,第一个比较

2015-03-18 23:12:36 404

原创 冒泡排序的简单实现

冒泡的意思就是一次循环中依次比较相邻位置的数,满足则交换。第一个for代表次数,第二个for来真正的两两比较。 冒泡的关键在于循环条件的次数确定,先看第一个for循环是length-1, 比如5个数 5 3 1 2 0,那么看第一次比较后变成3 1 2 0 5 第二次变成 1 20 3 5 第三次变成 1 0 2 3 5 第四次变成 0 1 2 3 5 最后一次不需要比较了,肯定最

2015-03-18 16:44:26 406

原创 二叉排序树的一些简单操作

二叉排序树就是左孩子比根节点小,右孩子比根节点大,左小右大的那种二叉树。从定义来看,二叉排序树是不可能有俩个数是相同的。二叉排序树是为了查找时更加有效率,查找的时候如果小,就往左边跑,一下子就去掉了整个右边。#include #include #include typedef float datatype;typedef struct BiTNode { datatype

2015-03-16 18:59:51 457

原创 二叉树的先中后序遍历的递归和非递归实现

二叉树的遍历真的很有意思,而且递归和非递归的实现的思想都很精妙。真心觉得创造出这种数据结构的人是多么炫酷。二叉树的遍历就是把所有节点都走一遍,通常有三种遍历方式,先序遍历:中左右;中序遍历:左中右;后序遍历:左右中这些原理当然没啥深究的,记住就行。#include #include #include //二叉树typedef struct ErNode { int data

2015-03-15 18:01:21 738

原创 二叉树的一些简单操作

二叉树的概念就不用多说了,根节点,左右孩子,blablabla。二叉树的定义就是一个递归的定义,所以很多二叉树问题我们都可以用递归来轻松的解决。递归有时候真的太神奇了。然后粘贴书上的一些二叉树的必要的知识点吧。二叉树分为完全二叉树(满二叉树的基础上节点从左往右有序排列),满二叉树(除了叶子节点,每个节点都有左右孩子);一般二叉树的重要性质:1 在二叉树的第i层上最多有2i-1个节点

2015-03-14 21:14:15 336

原创 循环队列的简单知识

队列其实也是链表,这里讲的是顺序表示。队列,顾名思义,就是排队的队形。按照专业一点就是FIFO(first in first out) 原则,从对列头出列,从对尾入列。因为循环队列最利用效率,也稍微增加了难度,所以要记住循环队列的表示方法。其实很多数据结构都有很多种写法,重要是理解其思想,代码完成只是让自己更加透彻的掌握,每一种实现方式都是按其思想一步一步完成的。先贴出结构体:

2015-03-06 19:37:45 780

原创 栈的一些简单操作

我觉得栈应该应用是很多的吧,不过现在说的栈只有基本的操作,知道她了解她。栈就是一个先进后出的链表,我说的是链式栈哈。我觉得顺序栈应该叫压箱子,链式栈该叫码砖。因为顺序栈代表有固定的深度,链式栈随便多长。入栈就是一个一个的压,每个节点指向刚刚她压住的那一个。我觉得就是初始化能够理解了,出入栈的操作很简单的。我觉着越简单的数据结构就要越理解深一点(完全理解不知道该是啥程度),因为以后很多东

2015-02-27 09:53:59 376

原创 线性表-双向链表的简单知识

前面先贴出我之前才学双向链表写的总结,也许更贴近我才接触的感受,虽然也没过去多久。贴出的代码则是我重新写的和之前写的还是有点不一样(写的要稍微好一点点点),前面这就作为代码思想的注释吧,而且我只列出当时重点怎么理解的部分。不过还是先贴出结构体:typedef struct Node {         int data;         structNode *prior;//

2015-02-09 18:31:20 461

原创 线性表--循环链表的简单知识

循环链表核心思想和单向链表其实一样,数据结构没变,就是她的尾节点又指向了头结点,饶了个圈,循环了一下。和双向链表不一样,循环其实就尾节点算有程序上的前驱后继而已。尾指针循环链表就是在原基础上又添加了尾指针指向尾节点,在合并的时候方便,知道了尾指针能得到尾节点和头结点。我只写了和单向链表不一样的部分,注释也只是注释了和单向链表不一样的地方。所以显得(反正单向里面都有了)#incl

2015-02-05 19:40:43 360

原创 线性表-链表的简单操作

链表和顺序表的简单区别在于链表是一个一个的节点相连接起来的,通过指针的作用,形成逻辑上的像链子一样的效果。其实对链表的操作和对数组的操作是差不多的,数组是直接操作数据,链表通过节点,间接操作数据。我感觉就像java的封装类一样,setItem(item)为节点赋值,getItem()指针得到节点的值。有点像哈。虽然我学java,但还是感觉用c写这些算法比较明白,也许当初老师就是用c教我们的吧,习惯

2015-02-04 16:55:29 395

原创 线性表-顺序表的简单知识

正在重新学数据结构,觉得算法和算法思想真的是很重要也是相融相通的。程序的具体完成只是时间给你的任务而已,理解了算法,然后根据你的算法思想一步一步的写出来,感觉很赞。记录下自己慢慢学习的过程,留着自己以后回来复习,也希望为那些和我一样一直很渣却迫切想要进步的人服务。顺序表的结构其实就是一个数组的组成。数组有固定的长度,里面存了一些数据。然后有一个灰常重要的头指针typedef struct

2015-02-02 15:47:11 518

空空如也

空空如也

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

TA关注的人

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