付威 付威的网络博客

TCP三次握手和四次挥手

三次握手–连接 在通信的过程中,Client与Server建立TCP连接需要三次握手,为什么需要三次握手呢?又是怎么握手的过程? TCP连接是可靠的通信方式,必须要保证两端都同时有效,且线路通畅。 如同两个人通话,但并不确定对方能不能听到,经历几次才能确保通信方式可靠呢? A: 请求连接,收到请回复密码1 B:可以连接,密码是1。你听到了吗?听到回复密码2 A:我听到了,密码2。 ...

一文彻底了解Mysql索引

在不借助DB引擎情况下,想完成数据的持久化存储,最简单的方法写一个文件存在本地,读取的时候加载文件到内存,然后进行筛选。 存储一个user在本地。 id|userName|userCode|sex|phoneNumber 1,xiaoming,001,m,126xxx 2,xiaohong,002,w,123xxx ... 上面满足了我们的需求,看到这种数据格式,查询的...

Mysql的索引实现机制

对于DB来说最重要的无非是增删改查性能,而构建一个好的索引是实现高效DB操作的前提。其实没一个DB的引擎,说到底都是文件系统的管理。 对于mysql,索引使用的是B+树的数据结构,B+树具有高度低,关键字存储多,更友好操作系统的IO的读写。 mysql有Mysam和InnerDB两个存储引擎,Mysam是数据和索引分开,InnerDb数据和索引是在一个文件。 Mysam mysam存...

B-Tree和B+树

B树和B+树是很多数据库索引采用的数据结构,为什么会使用B树,而不采用更常见的二叉树的呢? 举个例子,有这么几个数字:1,2,3,4,5,6,7,8,9,0,分别生成AVL树,B树 二叉树生出的树的度为4,而3阶B树高度只是3.如果B树的阶数再多的话,就可以获得更小的高度度。 (6阶的B树) 树的度带来更深入查询,会带来更多的IO读写。 除了二叉树的深度太深的原因,...

手写JDK动态代理

反射动态代理 为了能够更好实现AOP的思想,在Java中有了动态代理概念,与动态代理相对应的就是静态代理,首先看下面的代码。 public interface IWoker { String sayHello(String name,String code) ; } public class Worker implements IWoker{ @Override...

Unsage类的使用

Java是以安全著称,但在Java中有一个类是一个Bug级别的存在,那就是Unsafe. 前面已经说过Unsafe在java中的使用,此处我们直接说用法: 避免初始化 当你想跳过对象初始化的阶段,或者绕过构造函数的检查,去实例化没有任何公共构造函数的类,可以使用allocateInstance: class A { private long a; // not...

CAS的性能问题

昨天写了一个计数器的类,性能高于JDK,思考了很久,后来被同学点破。 public void increase() { long before = unsafe.getLongVolatile(this, offset); while (!unsafe.compareAndSwapLong(this, offset, before, before + 1)) { ...

写了一个性能比AtomicLong性能还高的计数器

今天在学习CAS的时候,想手写一个CAS的计数器,与JDK中的Atomic(AtomicLong,AtomicInteger等)系列的做个比较,本想性能应该能比JDK要差一丢丢,但却加了一个让线程让出时间片的代码,性能反而更高。 由于使用java中的Unsafe类,存在安全问题,直接使用会抛出SecurityException异常,所以Unsage无法直接在代码中调用,有两种方法可以解决这...

redis分布式锁的问题和解决

分布式锁 在分布式环境中,为了保证业务数据的正常访问,防止出现重复请求的问题,会使用分布式锁来阻拦后续请求。具体伪代码如下: public void doSomething(String userId){ User user=getUser(userId); if(user==null){ user.setUserName(...

树和二叉树简介

树的定义 为了保证数据的能够有效的查询,可以使用顺序结构。为了保证数据的插入效率,我们可以使用链型结构。但在某些场合,我们需要同时兼顾查询效率和插入的效率,应该怎么做? 树(Tree)型结构是一类常用的高效的非线性的数据结构,兼顾了顺序表的查询效率和链表的插入效率。例如我们电脑中的目录结构,采用的就是一种树形结构关系。 树的具体结构形状如下图: 关于树有以下几个定义: 度:每个节...

什么是协程

协程(Coroutine)又称为微线程,我们知道线程是CPU的执行的最小单位,线程执行的最小代码单位是方法。 比如在执行的时候,一个线程从程序的入口调用Main方法,Main调用A方法,A方法又调用B方法,整个函数的执行完成的顺序是B->A->Main。这个调用的顺序是明确的,是通过压栈和出栈的方式确定的。 而协程不同, Main调用B,在调用B的过程中可以中断,Main函数...

C10K的问题

什么是C10K问题 随着互联网的普及,web的访问呈几何倍数的增长,我们知道一个请求和响应的过程的背后是连接的互换数据,最初的服务器都是基于进程/线程模型的,新到来一个TCP连接,就需要分配1个进程(或者线程)。 而进程和线程又是系统昂贵的资源,一台机器创建的线程数量和进程数量是有限的,不可能无限制的创建。 C10K的核心问题就是即使在硬件资源都满足的情况先,系统也难以承载有10000...

手写简单tomcat服务器

使用socket通信原理实现简单的http协议,代码很简单(动态类访问和NIO晚点实现,有点懒。。): ServerSocket serverSocket; public Tomcat(int port) { try { serverSocket = new ServerSocket(port); System....

手写一个jdbc数据库连接池

在Java访问mysql的时候,需要用到jdbc驱动,传统连接方式为: try { Driver mysqlDriver = (Driver) Class.forName("com.mysql.jdbc.Driver").newInstance(); DriverManager.registerDriver(mysqlDriver); Connection con...

Maven私服的搭建

因为网络屏蔽的缘故,无法下载nexus包,所以这篇博客等以后有网络条件后再更新。。。

mysql安装和连接踩坑记录

原来一直使用mysql,没有自己真正的搭建,搭建也只是本地的连接,现在手上有两台电脑,想搭建一个主从的架构,在配置mysql的环节费了一点时间,其实都是很小的问题,今天记录下: mysql 安装和启动 mysql --install mysql --initialize net start mysql 安装完之后,发现忘了记密...

作者:付威

技术改变世界

推广信息

付威星球 知识星球
付威公众号 公众号

信息

推荐博客

如需添加到列表,请邮件到laofu_online@163.com

Other

Hosted by Coding Pages