自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 资源 (1)
  • 收藏
  • 关注

原创 2024随想

时隔7年,重新捡起CSDN从开始写第一篇博客开始,一直不理解为啥要写博客。学习这些新知识都没时间去完全理解还要挤时间去写博客,从我的博客可以看出来就是断断续续的几篇,回过头去看有一整年的时间可能一片内容都没有发表,那时候可能都忘记写博客这件事了。主要原因是前几年的时间刚入行要学习的东西太多,甚至很多理解不了,一天忙的焦头烂额去完成任务,没时间没精力去沉淀一些东西。直到今天也是有时间了才去学习点新东西记录一下博客发表一下。会啥要写这篇文章,是因为我翻到了我初写第一篇博客的内容了。那时候懵懵懂懂,却表现的

2024-05-07 10:03:07 104

原创 Netty进阶-协议设计与解析

魔数(四个字节):用来在第一时间判定是否是无效数据包版本号(一个字节):可以支持协议的升级序列化算法(一个字节):消息正文到底采用哪种序列化反序列化方式,可以由此扩展,例如:json、protobuf、hessian、jdk指令类型(一个字节):是登录、注册、单聊、群聊... 跟业务相关请求序号(四个字节):为了双工通信,提供异步能力对齐填充(一个字节):除正文长度和消息正文凑满16个字节,也就是2的n次方正文长度(四个字节):正文的长度消息正文:正文内容(根据序列化算法进行序列化成字节)

2024-05-06 17:39:06 1016

原创 Netty入门

Netty入门一、 为什么要异步二、Netty黏包半包问题1、问题复现黏包复现半包复现2、解决方案①短链接(连接、停止作为边界)②定长解码器(指定字节长度解码)③行解码器(分割符解决)1)测试"_"分隔符2)测试"\n"分隔符④LTC解码器(基于长度字段的帧解码器,长度+内容组成)1)源码demo分析:2)实际案例一、 为什么要异步思考医生看病场景上述并不是异步的下面看看Netty是怎么做的1)首先对任务进行划分2)理解netty工作原理(提升的不是响应时间,提升的是吞吐量) 吞吐

2024-04-30 10:41:00 856

原创 神经网络算法

整个神经网络计算过程中就是围绕一个点:什么样的w参数能够适合于当前的这个任务。

2024-04-24 16:26:58 350

原创 Netty(NIO基础)

记录该段数据长度,以便于申请对应大小的缓冲区 将缓冲区的数据通过get()方法写入到target中调用compact方法切换模式,因为缓冲区中可能还有未读的数据。发送方在发送数据时,并不是一条一条地发送数据,而是将数据整合在一起,当数据达到一定的数量后再一起发送。接收方的缓冲区的大小是有限的,当接收方的缓冲区满了以后,就需要将信息截断,等缓冲区空了以后再继续放入数据。这就会发生一段完整的数据最后被截断的现象。读模式下才能读取到数据,如果是写模式得先切换到读模式,比如调用*.flip()方法。

2024-01-19 11:08:35 815

原创 网络多线程开发小项目--QQ登陆聊天功能(服务端推送新闻、离线留言和文件)

【代码】网络多线程开发小项目--QQ登陆聊天功能(服务端推送新闻、离线留言和文件)

2024-01-12 17:10:44 478

原创 网络多线程开发小项目--QQ登陆聊天功能(发文件)

【代码】网络多线程开发小项目--QQ登陆聊天功能(发文件)

2024-01-12 09:57:40 323

原创 网络多线程开发小项目--QQ登陆聊天功能(私聊群发)

【代码】网络多线程开发小项目--QQ登陆聊天功能(私聊群发)

2024-01-11 14:54:42 448

原创 网络多线程开发小项目--QQ登陆聊天功能(无异常退出)

【代码】网络多线程开发小项目--QQ登陆聊天功能(无异常退出)

2024-01-10 11:36:09 354

原创 网络多线程开发小项目--QQ登陆聊天功能(拉取在线用户列表功能)

【代码】网络多线程开发小项目--QQ登陆聊天功能(拉取在线用户列表功能)

2024-01-09 18:08:10 376

原创 网络多线程开发小项目--QQ登陆聊天功能(用户登陆功能实现)

【代码】网络多线程开发小项目--QQ登陆聊天功能(用户登陆功能实现)

2024-01-09 14:15:56 348

原创 动态获取本机的ip地址和hostName

代码:运行结果

2022-06-07 09:30:01 414 1

转载 序列化与反序列化

序列化和反序列化作为Java里一个较为基础的知识点,大家心里也有那么几句要说的,但我相信很多小伙伴掌握的也就是那么几句而已,如果再深究问一下Java如何实现序列化和反序列化的,就可能不知所措了!遥记当年也被问了这一个问题,自信满满的说了一大堆,什么是序列化、什么是反序列化、什么场景的时候才会用到等,然后面试官说:那你能说一下序列化和反序列化底层是如何实现的吗?一脸懵逼,然后回家等通知!一、基...

2019-03-21 14:46:58 212

原创 什么是负载均衡

负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】。常见方案:...

2019-03-20 14:15:40 299

转载 mysql 缓存机制

mysql 缓存机制 命中条件缓存存在一个hash表中,通过查询SQL,查询数据库,客户端协议等作为key,在判断命中前,mysql不会解析SQL,而是使用SQL去查询缓存,SQL上的任何字符的不同,如空格,注释,都会导致缓存不命中。如果查询有不确定的数据like no...

2019-03-18 11:44:57 179

转载 数据库引擎学习

ISAM:ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,...

2019-03-18 11:00:02 124

转载 TCP三次握手-backlog队列问题

TCP三次握手-backlog队列问题.md概述之前有同事做压力测试时,发现无论如何都无法突破128并发的问题,经排查发现该服务器ACCEPT QUEUE队列都为128,限制了网络的并发。TCP三次握手Linux内核协议栈为一个TCP连接管理使用两个队列,一个是半链接队列SYN QUEUE(用来保存处于SYN_SENT和SYN_RECV状态的请求),一个是ACCE...

2019-03-14 17:12:27 218

原创 数据库类型字段总结

1.varchar 与 char 类型的区别varchar优点:1)建立自己的站点时,varchar类型字段要比char类型字段方便的多,使用varchar时不需要为使用过程中减掉多余的空格而担心;2)使用varchar字段比char字段相比占用更少的磁盘空间和内存,当数据库很大时,这种操作会起到很重要的作用;缺点:从整个系统的性能角度来看,char字段的处理速度会更快,有时甚至超出va...

2019-03-13 10:47:17 271

转载 数据库学习(四)

六、基本的数据库性能分析方式:explain+慢SQL分析使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是 如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。使用方式:Explain+SQL语句执行计划包含的信息:±—±------------±------±-----±--------------±-----±--------±-----±--...

2019-01-19 12:10:08 599

转载 数据库学习(三)

四、聚集索引、非聚集索引聚集索引:类似字典的拼音目录 数据本身就是按照聚集索引的顺序存储的,应该建在需要频繁修改的列上,因为聚集索引的每次改动都以为这表中数据的物理数据的一次重新排序 聚集索引适合建立在大数据量但是小数目不同值的列上 聚集索引的修改一定一定一定要谨慎,因为聚集索引涉及要数据的物理存放数据,不合理的聚集索引会十分严重的拖累数据库的性能 聚集索引值是允许重复的非聚集索引...

2019-01-19 11:32:14 140

转载 数据库相关知识学习(二)

二、数据库事务4个特性:ACID1.原子性(Atomicity):事务开始后的所有操作,要么全部做完,要么全部不做,不可以停滞在中间环节。事务执行过程中若出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。事务是一个不可分割的整体。2.一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏。3.隔离性(Isolation):同一时间,只允许一个事...

2019-01-16 17:41:15 145

原创 数据库相关知识学习(一)

学习内容:1、数据库4个隔离级别(线上环境是Read Committed)2、数据库事务4个特性:ACID3、nnodb、myisam区别4、聚集索引、非聚集索引5、B树(B-Tree)、B+树(B+Tree)6、基本的数据库性能分析方式:explain、慢查询日志7、掌握基本的sql语法一、数据库4个隔离级别(Read Committed)1. 关于脏读、不可重复读、幻读的理...

2019-01-16 16:32:41 145

原创 Huffman文件压缩小项目

一、基础知识铺垫:本质:1、Hffman树:Huffman树,又称为最优二叉树,是加权路径长度最短的二叉树。2、采用算法:贪心算法 应用:3、分类:4、本文主要实现一下无损压缩:无损?压缩?(思考清楚)Huffman压缩:出现次数差异越大越容易压缩5、 三叉链: void GenerateHuffmanCode(N...

2018-08-21 12:52:19 168

原创 IO多路转接select、poll、epoll模型

I/o多路转接之select:一、select:1、特点:负责等 2、可以等待多个fd(read负责读取) 系统提供select函数来实现多路复用输入/输出模型 输入:用户想告诉操作系统哪个是你应该关心的读事件 输出:操作系统告诉用户你所关心的文件描述符上的事件哪些是fd已经就绪二、select函数原型:#include<sys/select.h>in...

2018-07-27 22:53:57 206

原创 网络基础(一)

复习:1、进程处理信号必须在合适的时候,即从内核态切换到用户态。2、对信号的处理方式:3种1)缺省;2)忽略;3)自定。3、信号产生——-信号被判定———-信号在合适的时候被处理——–信号的处理过程——–信号有哪些处理方式。操作系统向前台进程组或前台作业发送信号。4、守护进程:1命名以D结尾 2特点: 1)不...

2018-06-26 10:17:23 185

原创 文件描述符

一、文件常见的几种打开与读写方式:FILE *fopen(const char *path, const char *mode);//它是库函数 打开文件size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);//读入数据 size_t fwrite(const void *ptr, size_t size, si...

2018-06-05 09:28:52 3594

原创 c++异常

先来个面试题:设计一个算法实现1+2+…+n不能使用+、-运算符 且时间复杂度为o(n)解决方案:#define _CRT_SECURE_NO_WARNINGS 0;#include<iostream>#include<stdlib.h>#include<stdio.h>#include<time.h>#include<win...

2018-05-27 22:42:37 341

原创 模板的分类编译

一、模板为什么不能分离编译?普通函数template.h:#pragma once#include<iostream>using namespace std;void Func();template.cpp:#include"template.h"void Func(){ cout << "普通函数" << endl;}...

2018-05-27 08:31:04 447

原创 STL模板

学习内容:1、泛型编程2、模板函数&类模板3、非类型模板参数&模板的模板参数4、模板的特化5、模板的分离编译一、泛型编程模板:模板是泛型编程的基础。所谓泛型编程就是编写与类型无关的逻辑代码,是一种复用方式。分类:模板函数和模板类。二、模板函数1)- 模板函数 假设现在要实现一个比较两个数是否相等的重载函

2018-05-23 16:29:13 1163

原创 线程

1、线程是在进程内部运行的一个执行分支 2、线程的创建成本比较小,删除进程成本也比较小,只需要创建一个PCB,指向那块内存地址空间就行。3、线程是在进程内部运行,本质上是在同一块地址空间上运行。怎么理解一个进程中间会有多个执行流的?一个执行流被一个线程表示,一个进程里面可以有多个线程,所以一个进程里面会有多个执行流。 4、站在cpu的角度不需要区分进程与线程,因为cpu所做的工...

2018-05-21 22:03:57 239

原创 模板类--Vector

首先铺垫一些扩展性知识:1、模板不支持分离编译,why?分离编译不会模板实例化2、怎样解决?1)显示实例化,最好指定模板类型(因为有的模板必须指定类型)。 2)最好的方式是把声明和定义放一个头文件里(类里面定义太大了)。扩容:template<class T>void Vector<int>:: Expand(size

2018-05-14 08:06:04 613

原创 linux进程替换(下)

1、替换原理: 用fork创建子进程后执行的是和父进程相同的程序,子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。 2、替换函数: #include<unistd.h>1、int execl(co...

2018-05-09 15:09:54 257

原创 LINUX进程控制(上)

重点:进程创建,fork/vfork进程等待进程替换,微型shell,重新认识shell运行原理进程终止,认识$一、进程创建: fork函数: 从已存在进程中创建一个新进程。新进程为子进程,原进程为父进程。2、 进程调用fork,当控制到内核中的fork代码后,内核做:分配新的内存块和内核数据结构给子进程将父进程部分数据结构内容拷贝至子进程添加子进程...

2018-05-06 16:25:46 316

原创 探索c++多态对象模型

一、探索虚函数表 虚函数表是通过一块连续内存来存储虚函数的地址。这张表解决了继承、虚函数(重写)的问题。在有虚函数的对象实例中都存在一张虚函 数表,虚函数表就像一张地图,指明了实际应该调用的虚函数函数。测试代码:class Base{public : void func1() { cout<<"Base::func1" <&l...

2018-05-04 08:23:59 167

原创 Linux进程概念

一、认识冯诺依曼系统:常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。 截至目前,我们所认识的计算机,都是有一个个的硬件组成 输入单元:键盘,鼠标,扫描仪,写板等 中央处理器:含运算器和控制器所有的外设都只能和存储器打交道。cpu也只能和存储器打交道。所以内存起着很重要的作用。为什么要有存储器?输入设备和输出设备不与cpu直接连接?cpu运行速度极快,输

2018-05-02 06:54:13 821

原创 LINUX环境开发基础工具使用

vim记忆方式:打开,关闭,查看,查询,插入,删除,替换,撤销,复制等等操作一、vim 中的三模式及关系: 1)要查看你的所有模式:打开vim,底行模式直接输入: help vim-modes 2)退出vim及保存文件,在[正常模式]下,按一下[:]冒号键进入[last line mode],例如: :w(保存当前文件) :wq (存盘并退出vim) :q!(不存盘强制退出v...

2018-04-29 16:28:54 794 1

原创 c++中的动态内存管理

、1、内存: 说到内存管理,大多人都不了解什么是内存管理,下面我来简单介绍一下: 一般把内存理解为四部分:栈 、堆、静态区(数据段)、常量区(代码段) 存储内容: 栈:存放局部变量,栈上的内容只在函数作用域范围内有效,出了作用域会自动销毁,其存储特点是效率高但存储空间有限。堆:由使用者动态开辟出来的空间存在堆上,如malloc、new,其生命周期由free和delete来决定,其特点是...

2018-04-28 07:54:11 218

原创 linux开发工具

本篇博客主要解决以下几个问题: 1. vim自行查找资料, 自行配置插件. 2. 自行查找资料, 调研除了vim, 还有哪些常用的牛逼的编辑器, 并能够横向对比编辑器之间的区别和优缺点. 3. 自行查找资料, 调研除了gcc, 还有哪些常用的牛逼的编译器(不限制编程语言, 不限制平台). 4. 为什么调试的时候需要编译选项中添加 -g. 同学们自行调研readelf命令. 5. ...

2018-04-28 07:53:30 2651

原创 C++中的多态

先来几个常见的面试题: 1、如何实现不能被继承的类? 需要的知识点: 私有继承以后不可见,构造函数合成 解决方法: class AA{public: void func1() {} static AA* Getvariable1()//static 是为了没有对象也能调//无this指针就要加static { retu...

2018-04-22 14:47:03 176

原创 c++单继承与多继承(包含虚函数与虚继承的对比)

先来个概念分析题:class Person{public: void Show() { cout<<"Person::"<<_name<<endl; }protected: int _id; string _name;};struct Student : public Person{pu...

2018-04-18 22:29:53 2393

排序面试题代码

直接插入排序,希尔排序等排序完整代码,内含完整代码,可直接运行

2018-03-12

空空如也

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

TA关注的人

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