- 博客(97)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 使用Socket进行文件的传输
客户端:import java.io.*;import java.net.Socket;/** * @author coderchem * @create 2019-09-27 21:49 */public class Client { public static void main(String[] args) throws IOException { ...
2019-09-27 22:24:25
1693
转载 桶排序
一、思想一句话总结:划分多个范围相同的区间,每个自区间自排序,最后合并。桶排序是计数排序的扩展版本,计数排序可以看成每个桶只存储相同元素,而桶排序每个桶存储一定范围的元素,通过映射函数,将待排序数组中的元素映射到各个对应的桶中,对每个桶中的元素进行排序,最后将非空桶中的元素逐个放入原序列中。桶排序需要尽量保证元素分散均匀,否则当所有数据集中在同一个桶中时,桶排序失效。二、图解过程...
2019-09-14 20:30:22
4207
原创 redis面试题总结
一、什么是redisRedis是一个开源的内存中的数据结构存储系统,可以作为数据库、中间件、缓存。二、redis的访问数量级是多少?Redis的访问数量级问10W+/s,链接数越多访问速度越慢。三、redis的数据结构和使用场景redis的数据结构https://blog.csdn.net/qq_37186247/article/details/83716627使用场...
2019-08-23 10:20:47
20525
3
转载 redis穿透和雪崩解决方案(先放着吧)
缓存雪崩缓存雪崩可能是因为数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机。解决思路:1,采用加锁计数,或者使用合理的队列数量来避免缓存失效时对数据库造成太大的压力。这种办法虽然能缓解数据库的压力,但是同时又降低了系统的吞吐量。2,分析用户行为,尽量让失效时间点均匀分布。避免缓存雪崩的出现。3,如果是因为某...
2019-08-20 15:54:35
405
原创 dubbo之二
为什么要使用dubbo 传统的ORM、MVC不能实现大量数据的访问需求,不利于项目模块的扩展。使用dubbo基于RPC(远程过程调用)可以实现模块与模块之间的分离,从而使得模块之间的耦合性降低,实现多模块的开发和维护,学习dubbo要学会它的思想。 RPC原理 1.1 什么是RPC RPC(Remote Procedure Call Protocol)——远程过程调...
2019-08-20 13:40:07
182
转载 BTree和B+Tree详解
B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B+树之前必须先了解二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree),B+树即由这些树逐步优化而来。二叉查找树二叉树具有以下性质:左子树的键值小于根的键值,右子树的键值大...
2019-08-18 23:10:56
521
原创 线程池的执行过程源码解析总结
在了解将任务提交给线程池到任务执行完毕整个过程之前,我们先来看一下ThreadPoolExecutor类中其他的一些比较重要成员变量:private final BlockingQueue<Runnable> workQueue; //任务缓存队列,用来存放等待执行的任务private final ReentrantLock mainLock = ne...
2019-08-18 12:34:52
365
1
转载 mybatis的缓存机制
前言MyBatis是常见的Java数据库访问层框架。在日常工作中,开发人员多数情况下是使用MyBatis的默认缓存配置,但是MyBatis缓存机制有一些不足之处,在使用中容易引起脏数据,形成一些潜在的隐患。个人在业务开发中也处理过一些由于MyBatis缓存引发的开发问题,带着个人的兴趣,希望从应用及源码的角度为读者梳理MyBatis缓存机制。本次分析中涉及到的代码和数据库表均放在GitHu...
2019-08-16 17:53:34
158
原创 mybatis源码之加载session创建过程
String xml ="spring-mybatis.xml"; Reader reader = Resources.getResourceAsReader(xml); SqlSessionFactory build = new SqlSessionFactoryBuilder().build(reader); SqlSession sqlSes...
2019-08-15 16:48:59
218
转载 mybatis深入浅出三
上篇文章《深入浅出Mybatis系列(二)---配置简介(mybatis源码篇)》我们通过对mybatis源码的简单分析,可看出,在mybatis配置文件中,在configuration根节点下面,可配置properties、typeAliases、plugins、objectFactory、objectWrapperFactory、settings、environments、databaseId...
2019-08-15 11:49:28
140
转载 mybatis深入浅出之二
上篇文章《深入浅出Mybatis系列(一)---Mybatis入门》, 写了一个Demo简单体现了一下Mybatis的流程。本次,将简单介绍一下Mybatis的配置文件:上次例子中,我们以SqlSessionFactoryBuilder 去创建 SqlSessionFactory, 那么,我们就先从SqlSessionFactoryBuilder入手, 咱们先看看源码是怎么实现的:Sq...
2019-08-15 11:44:29
141
转载 深入浅出mybatis之一
最近两年 springmvc + mybatis 的在这种搭配还是蛮火的,楼主我呢,也从来没真正去接触过mybatis, 趁近日得闲, 就去学习一下mybatis吧。 本次拟根据自己的学习进度,做一次关于mybatis 的一系列教程, 记录自己的学习历程, 同时也给还没接触过mybatis的朋友探一次道。本系列教程拟 由浅(使用)入深(分析mybatis源码实现),故可能需要好长几天才能更新完。...
2019-08-15 11:39:53
133
原创 ProccedingJoinPoint源码解析
ProccedingJoinPoint的继承关系ProceedingJoinPoint继承JoinPoint子接口,它新增了两个用于执行连接点方法的方法: java.lang.Object proceed() throws java.lang.Throwable:通过反射执行目标对象的连接点处的方法; java.lang.Object proceed(java.lang.Obj...
2019-08-15 09:52:00
1111
1
转载 Springmvc拦截器
Spring 的拦截器主要是实现了Interceptor接口,实现了preHandler、postHandle、aftercompletion这三个方法。package org.springframework.web.servlet; public interface HandlerInterceptor { boolean preHandle( ...
2019-08-13 14:05:23
143
转载 spring面试题
1、Spring是什么?Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,是目前很流行的框架之一。它主要有7个模块:core 、aop、context、dao 、orm、mvc、web这个七个。Spring Core:核心类库,提供IOC服务;Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任...
2019-08-12 18:51:52
275
转载 高并发之同步容器
一、采用传统的方法/** * 经典面试题:写一个固定容量的容器,拥有put和get方法,以及getCount方法 * 能够支持2个生产者线程以及10个消费者线程的阻塞调用 * * 点:生产者消费者模式 * * 如果调用 get方法时,容器为空,get方法就需要阻塞等待 * 如果调用 put方法时,容器满了,put方法就需要阻塞等待 * * 实现方式: * 1. w...
2019-07-29 16:23:53
210
转载 组合模式代码
package com.test.com.java;import java.util.ArrayList;import java.util.List;/** * @author coderchem * @create 2019-07-27 14:29 */public interface AbstractFile { //抽象构件(Component)角色 publ...
2019-07-27 15:01:36
313
转载 我们常说的 CAS 自旋锁是什么
我们常说的 CAS 自旋锁是什么CAS(Compare and swap),即比较并交换,也是实现我们平时所说的自旋锁或乐观锁的核心操作。它的实现很简单,就是用一个预期的值和内存值进行比较,如果两个值相等,就用预期的值替换内存值,并返回 true。否则,返回 false。保证原子操作任何技术的出现都是为了解决某些特定的问题, CAS 要解决的问题就是保证原子操作。原子操作是什么...
2019-07-24 19:43:55
613
原创 牛客上的JAVA错题集合
DBMS事务的四大特性数据库事务的四大特性分别是:原子性、一致性、隔离性和持久性。 特性 说明 实现 一致性 在一个事务执行之前和执行之后数据库都必须处于一致性状态。假如数据库的状态满足所有的完整性约束,也可以说数据库是一致的 DBMS的完整性子系统实现 原...
2019-07-24 14:31:17
324
原创 ReentrantLock代替synchronized
1、ReentrantLock是手工锁,锁住的是ReentrantLock对象,synchronized是自动锁,会自动释放锁,锁住的是堆内存中的对象。synchronized,在代码遇到异常的时候,JVM会自动释放锁。ReentrantLock则不会。/** * ReentrantLock替代synchronized */public class ReentrantLock2 {...
2019-07-22 01:46:42
438
原创 关于rabbitMQ的安装步骤
1.下载 rpm -Uvh http://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el7.centos.x86_64.rpm2. 下载 rpm -Uvh http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.6/rabbitmq-server-3.5.6-1.noarch...
2019-07-19 19:17:24
111
原创 Java高并发二
/** * 面试题(淘宝?) * 实现一个容器,提供两个方法,add,size * 写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数到达5时,线程2给出提示并结束 */public class MyContainer2 { private volatile List<Object> list = new ArrayList<>...
2019-07-19 19:10:40
140
原创 Java高并发
1、synchronized关键字:对某个对象加锁任何线程进入都需要拿到obj的对象锁,如果对象已经被锁定,那就只能等待。private Object obj = new Object();public void test(){ synchronized(obj){ //任何线程进入都需要拿到obj的对象锁,如果对象已经被锁定,那就只能等待。 count++...
2019-07-19 19:06:07
386
原创 NIO入门学习
什么是NIONIO的官方名称是NewIO,其实是它是一个非阻塞式的IO——Non Block IO阻塞与非阻塞阻塞(Block)和非租塞(NonBlock):阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种处理方式,当数据没有准备的时候阻塞:往往需要等待缓存冲区中的数据准备好过后才处理其他的事情,否則一直等待在那里。非阻塞:当我们的进程访问我们的数据缓冲区的时候,如...
2019-06-25 16:23:25
174
原创 linux基础知识
进程和作业的shell命令1.ps命令功能:静态显示系统进程信息格式:ps [参数]参数:-a:显示终端上的所有进程-u:显示进程所有者及其他的一些进程信息-e:显示所有进行-l:显示进程信息2.top 命令功能:动态显示进程信息格式: top [选项] 秒数选项:-d:指定每两次屏幕信息刷新之间的间隔-k PID:终止指定...
2019-05-24 00:33:03
121
原创 linux基础知识
管理RPM包的shell命令1.查询RPMrpm -q[其他选项] [详细选项] [软件包名称]其他选项如下:a:查询已经安装的所有软件包f 文件(全路程): 查询指定文件所属的软件包i 软件包名称 :查询已经安装软件包的详细信息l 软件包名称 ;查询已经安装的软件包所有的目录2.RPM包的安装rpm -ivh [详细选项] 软件...
2019-05-23 12:52:13
96
原创 linux基础知识
每个用户都用一个号来标示它,这个号叫做用户ID(UID),系统中每个用户至少属于一个用户组,每个组都有一个组号来标识它,叫做分组ID(GID)为什么要分组:不同的组之间的功能不同,使用的权限也就不同,就像学校里讲不同的专业分出来一样,这样方便管理存储用户账号的文件 /etc/passwd存储用户账号的文件放在 /etc/passwd 下,这个文件中包含有登录名、加密口...
2019-05-11 12:54:31
240
原创 linux基础知识
一、文本编辑器启动单个文件命令 说明 vi filename 打开或者新建文件,并将光标置于第一行首 vi +n filename 打开文件,将光标置于第n行首 vi + filename 打开光标,将光标置于最后一行首 vi +/pattern filename 打开文件,将光标置于第1个与pattern匹配的位置 ...
2019-05-09 21:03:25
129
原创 linux基础知识
性质:linux是一个多任务和多用户的操作系统特点:多用户多任务、兼容性好、可移植强、高稳定、丰富的用户界面。与windows的区别:GUI独立、主机之间访问、无需身份验证,系统文件化。发展简介:基础是MINIX操作系统,作者是linus,在1991年开发。linux的内核根据版本的不同,内核版本也不同。它的稳定版出现在2000年的2.2.10版本。linux的内核的源码是C语言,主要模块是存储管理、进程管理、文件系统管理、设备管理和驱动、网络通信调用等。
2019-05-09 17:55:53
255
原创 solr8的导入数据
前言只导入数据之前,我这里默认你现在有new_core这个文件了。第一步先将import的jar复制到new_core的lib下面(没有lib文件夹就创建一个),如图solr下的dist文件夹----->solrhome下的new_core下的lib,这里还需要一个mysql的驱动包也复制到lib下。第二步找到solrhome下的new_core下的con...
2019-04-24 23:18:41
1831
4
原创 tomcat8和Solr8配置
第一步先在本地盘符中创建一个文件,用来统一管理tomcat和solr。下面是我的目录结构,我在D盘下创建了tomcatSolr这个文件夹。第二步把一个全新的tomcat解压到创建的文件(TomcatSolr)中,再把solr文件也解压到其中,然创建一个solrhome作为本地仓库。第三步把solr安装包中的server→solr-webApp→webapp下的文件拷贝一份...
2019-04-24 00:06:55
1368
1
原创 进程的同步与通信
同步关系(直接制约):为了完成一个共同任务,相互协作的几个进程需要在某些确定点上协调他们的工作,等待来自其它进程的信息,以调整它们的推进速度,方可顺利执行完毕。互斥关系(间接制约):把并发进程间存在的因相互竞争使用独占资源(共享资源)而产生的制约关系。例如:打印机,共享内存;临界资源:一次仅允许一个进程使用的硬件或软件资源。注意:对于临界资源,必须互斥访问,否则会...
2019-04-13 20:53:35
284
原创 操作系统之中断异常
中断来自外部,异常来自内部。中断/异常:指系统发生某个异步/同步事件后,处理机暂停正在执行的程序,转去执行处理该事件程序的过程。中断引入:为了开发CPU和通道(或设备)之间的并发操作。异常引入:用于表示CPU执行指令时本身引发的事件。中断的分级分级原因:不同的中断可能在同一时间点发出请求。解决办法:将中断存起来。提供一个容器:中断寄存器——寄存中断事件的全部触发器。给级...
2019-04-13 16:17:16
1762
原创 进程的调度和执行
进程引入原因: 1)程序概念已刻划不清系统的并发特征,反映不了它们的活动规律和状 态变化。动态地研究操作系统的需要;进程的定义进程是一个具有一定独立功能的程序关于某个数据集合的一次可以并发执行的运行活动。进程与程序的关系:(了解)进程是动态的,程序是静态的。进程是暂时的,程序是永久的。进程的组成包括程序、数据和进程控制块。 进程能逼真地描述并发活动,而程序则不明显。进程...
2019-04-13 15:30:13
1612
转载 TCP的三次握手
TCP协议三次握手过程分析TCP(Transmission Control Protocol) 传输控制协议TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重...
2019-04-09 22:14:28
131
原创 二叉排序数和非递归遍历
package com.BinaryTree;import java.util.Stack;import javax.swing.tree.TreeNode;class NodeTree { int data; //根节点数据 NodeTree left; //左子树 NodeTree right; //右子树 public NodeTree() { super(...
2019-04-01 22:29:32
1128
原创 哈夫曼树
package com.huffman;import java.util.ArrayList;import java.util.Collections;import java.util.List;/** * @author 陈华 * */public class HahuffmanTree { public Node getHaffumanTree(int[] arr) ...
2019-04-01 22:19:21
203
原创 防止破解单例模式的几种方式
java中生成对象的方式有:1、使用new关键关键字生成对象2、clone生成对象3、instance反射生成对象4、序列化和反序列化生成生成对象。下面针对上面的几种对象生成方式来防止单例被破解序列化和反序列化只需要在单例的实体类添加一个方法即可package com.singleton;import java.io.Serializable;...
2019-03-24 11:37:04
3046
原创 单例模式(修正)
单例模式的几个特征:1、构造私有2、对象私有、静态。3、存在一个调用对象的公共静态方法。懒汉模式package com.singleton;public class SingletonLazy { private static SingletonLazy singletonLazy; private SingletonLazy() { }...
2019-03-24 10:16:36
107
指针数组和指针的区别。
2017-06-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人