自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 问答 (1)
  • 收藏
  • 关注

原创 java简单的实现生产者消费者模型

今日看到一篇以厨师和服务员为例的,生产者消费者模型的解释,想来就顺手实现一下。首先生产者不断地生产数据就好比多个厨师不断地做菜,消费者不断地消费数据就如同服务员不断地上菜。厨师将做好的菜放到窗口等待,就如同生产者将数据放进队列后等待一样。那么我们可以简单的建立以下模型:(1)Food模型public class Food { private static int counter...

2019-05-26 15:51:43 846

原创 日常练手--java多线程交替实现打印字母和数字

为了更加深刻的理解java多线程机制,先从最简单的demo入手实现数字和字母的交叉打印。实现思路是: 首先定义一个对象其中创建三个变量,flag用于控制应该打印字母还是数字,numberPrint输出打印数字,wordPrin用于计算输出的打印字母。然后分别定义一个打印数字的线程和打印字母的线程。最后在主函数中测试即可。(一)定义两个线程可以访问到的公共资源public c...

2019-05-26 15:41:01 3475 2

原创 布隆过滤器

(一)原理     布隆过滤器的原理实际上就是位图和哈希表的互补,位图省空间,哈希表省时间。这样便可以在位图中查询K(某字符串)的存在与否(二)代码实现如下BiMap.h#pragma once#include class BitMap{public: BitMap() :_size(0) {} BitMap(size_t size)//这里

2016-05-11 22:47:41 239

原创 BitMap位图的设计

(一)设计思路        2.给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 【腾讯】思路:如果内存够的话,40亿个整型使用位图存储需要500M左右的空间。        位图实际上就是数组,这个数组中的每个数据的每个二进制位表示一个数的存在与否,存在的话二进制位位1,否则为0.#pragma once

2016-05-11 16:07:39 572

原创 大数据的四则运算

(一)大数据的应用很多时候我们会面临计算机内置数据类型不够用的情况,比如说我们要统计全世界QQ用户的年访问量,这个数据将非常的庞大,VS开发平台最大的整型是long long 其范围是最大值9223372036854775807,最小值-9223372036854775808。16进制表示最大值0x7ffffffffffffff最小值为0x8000000000000000。(二)自定义类型

2016-05-11 09:26:31 932

原创 C++产生随机数的方法总结

产生一定范围随机数的通用表示公式要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。要取得a到b之间的随机整数,另一种表示

2016-05-09 13:48:36 683

原创 求2000以内的素数

方法一就是判断该数能否被2到data-1的数整除,如果可以则不为素数方法二:m不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~  之间的每一个整数去除就可以了。如果m不能被 2 ~ 间任一整数整除,m必定是素数。例如判别17是是否为素数,只需使17被2~4之间的每一个整数去除,由于都不能整除,可以判定17是素数。原因:因为如果m能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一

2016-05-09 12:34:43 4622

原创 C++中的关键字剖析(整理)

(一)volatilevolatile的作用是: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.简单地说就是防止编译器对代码进行优化.比如如下程序:1234XBYTE[2]=0x55;XBYTE[2]=0x56;XBYTE[2]=0x57;XB

2016-05-09 09:56:17 966

原创 文件压缩与解压缩(哈夫曼编码压缩方式)

本文采用哈夫曼编码的方式进行文件(文本文件)压缩和解压缩,首先介绍项目的整体思路:哈夫曼编码压缩文件实际就是统计出文件中各个字符出现的频率,然后为每个字符生成对应的编码,然后将每个字符用哈夫曼编码的形式按字节保存在压缩文件中。而文件的解压缩实际上就是将压缩文件翻译过来保存到解压缩文件中,需要使用压缩过程中生成的配置文件配合完成。下面将具体介绍文件的压缩和解压缩步骤: 1。统计文件中所有字符的出现次数。由于Ascall码字符一共255个,只有前128个字符可以显示,定义字符变量时一定要定义成无符号型变量u

2016-04-19 13:11:57 15336 3

原创 重学《从零开始学架构》

相比初次学习,这次阅读比较欢快,很多东西也能理解,因此只需要整理出关键知识脉络即可。如果你也想成为一名货真价实的架构师(而不是PPT架构师),那我们就一步一个脚印,将这些知识应用到工作场景中吧!时隔一年,许多知识点已经变得陌生,为了将零散的知识点加深印象,植根脑海,只有在理解的基础上不断地重复。可能是关心的事情更多了,也可能是目标太多了,又或许是工作太卷了竟然断更了一年多。但我从没有停止前进的步伐,争取每天都有一点收获吧。为了形成一个正向的反馈激励自己前行,胸肌们,我又要开始自我打鸡血和自我感动模式了!

2023-07-08 23:54:48 85

原创 《从 0 开始学架构》精华总结-高可用故障排除分析-FMEA(故障模式与影响分析)

声明:学习完李运华《从 0 开始学架构》,有一种醍醐灌顶,豁然开朗的感觉。为了能够对其概念有一个深入的理解,并且掌握其总结的方法论。特意对本课程做一个提炼,形成自己的知识体系。毕竟能给别人讲清楚了,才能说明自己真的掌握了。本文的引用仅限自我学习如有侵权,请联系作者删除。FMEA的理论类容是什么? FMEA 是一种在各行各业都有广泛应用的可用性分析方法,通过对系统范围内潜在的故障模式加以分析,并按照严重程度进行分类,以确定失效对于系统的最终影响。在架构设计领域,FMEA 的具体分析方法是...

2022-01-11 17:47:09 1309

原创 从 0 开始学架构》精华总结-CAP理论和CAP细节

CAP 定理(CAP theorem)又被称作布鲁尔定理(Brewer's theorem),对于设计分布式系统的架构师来说,CAP 是必须掌握的理论,内容翻译如下: 在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲。

2022-01-11 17:44:49 590

原创 《从 0 开始学架构》精华总结-单服务器高性能模式PPC与TPC、Reactor与Proactor

高性能架构设计的设计点在哪里?(1)尽量提升单服务器的性能,将单服务器的性能发挥到极致。(2)如果单服务器无法支撑性能,设计服务器集群方案。(3)具体的实现及编码,架构设计决定了系统性能的上限,实现细节决定了系统性能的下限。

2022-01-10 23:40:15 598

原创 《从 0 开始学架构》精华总结-高性能NoSQL

(1)K-V 存储:解决关系数据库无法存储数据结构的问题,以 Redis 为代表。(2)文档数据库:解决关系数据库强 schema 约束的问题,以 MongoDB 为代表。(3)列式数据库:解决关系数据库大数据场景下的 I/O 问题,以 HBase 为代表。(4)全文搜索引擎:解决关系数据库的全文搜索性能问题,以 Elasticsearch 为代表。

2022-01-07 17:33:24 110

原创 高性能数据库集群-读写分离和分库分表

读写分离适用单机并发无法支撑并且读的请求更多的情形。在单机数据库情况下,表上加索引一般对查询有优化作用却影响写入速度,读写分离后可以单独对读库进行优化,写库上减少索引,对读写的能力都有提升,且读的提升更多一些。不适用的情况:1、如果并发写入特别高,单机写入无法支撑,就不适合这种模式。2 、通过缓存技术或者程序优化能够满足要求。

2022-01-05 18:33:16 1331

原创 《从 0 开始学架构》精华总结-架构基础

软件架构指的是软件系统的顶层结构。软件设计过程中,模块、对象、组件本质上是对一定规模软件在不同粒度和层次上的“拆分”方法论,软件架构是一种对软件的“组织”方法论。一分一合,其目的是为了软件研发过程中的成本、进度、质量得到有效控制。但是,一个成功的软件设计是要适应并满足业务需求,同时不断“演化”的。设计需要根据业务的变化、技术的发展不断进行“演进”,这就决定了这是一个动态活动,出现新问题,解决新问题,没有所谓的“一招鲜”,但是“行业最佳实践”可以作为指路明灯。

2022-01-05 18:26:50 2832

原创 java虚拟机JVM的结构以及各模块的功能

JVM的机构分为如下图所示的几个模块,它们分别是类加载子系统,方法区,java堆直接内存,java栈,本地方法栈,垃圾回收系统,PC寄存器以及执行引擎。下面详细总结每个模块的功能及其作用:(1)类加载子系统 类加载子系统主要负责从文件系统或者网络中加载class信息到方法区。(2)方法区 除了类的信息外,方法区中可能还会存放运行时常量池信息,包括字符...

2020-04-12 10:59:54 1051

原创 专题1-3-java内存模型JMM

1概念介绍 JMM是java为了解决多线程通过对共享内存进行通信时存在的本地内存数据不一致问题(可见性问题)、编译器会对代码指令重排序(有序性问题)、处理器会对代码乱序执行(原子性问题)等问题的一种规范。java虚拟机(JVM)由硬件发展而来,JMM也是由计算内存模型发展而来的。2计算机内存模型2.1CPU直接读取阶段 最初阶段,CPU的处理速度和内...

2020-03-23 22:12:42 135

原创 专题1-2-java程序设计概述和设计环境

衔接上一个专题---专题1-1-java程序设计概述和设计环境(3)网络技能 能够便捷高效的处理像HTTP或者FTP之类的TCP/IP协议访问网络上的对象。(4)健壮性 Java没有指针却具有指针的能力,具有早期问题检测,后期动态监测的能力。无需像C++一样关心指针造成的内存分配错误。(5)安全性 Java可以构建防病毒,篡改的系统。...

2020-03-17 23:44:38 191

原创 专题1-1-java程序设计概述和设计环境

1 专题知识总览 本次专题主要从java的特性和java程序设计的环境来进行详细的总结,如下图所示,阅读过程中有任何问题欢迎留言区讨论:2java程序设计特点概述(1)简单性 简单性主要有两个方面一个是使用简单,相比C++来说java在设计上就去除了很多难以理解的特性。另一个方面是占用空间小,基本的解释器以及类支持大约仅为40KB。(2)面向对象...

2020-03-17 22:30:38 133

原创 java技术体系总结

本人从计算机相关专业向C++技术栈发展,然后在工作过程中又走向了javaWeb技术栈,也的确走过了一番艰辛的路程。现在作为整个身子扎根IT行业的软件开发工程师,深感互联网技术更新迭代太快,各种框架层出不穷,但是万变不离其宗,基础永远是安身立命之本。为了对抗遗忘,在需要的时候能够快速的想起来,特意开设java技术体系总结专题。对零散的知识点做一个由宏观到微观,由基础到深入的实践和总结。后阶段我将按...

2020-03-15 22:00:53 366 1

原创 git提交本地文件到码云远程仓库教程

本文是在本地安装了git并且注册了码云社区的前提下,教大家如何关联远程仓库,上传本地项目到开源社区。(1)本地创建好项目(2)远程仓库创建相同的仓库点击右上角新建仓库,输入仓库信息:如下所示远程仓库创建成功:(3)在本地项目下右键点Git Bash Here,执行git init初始化本地仓库。(4)接下来将本地仓库和远程仓库关联起来首先复制远程仓...

2020-03-15 14:21:29 1839

原创 单元测试技术分析及PowerMock技术实践

​1 主流的单元测试技术当前互联网主流的单元测试技术主要有Junit, JMock, Mockito ,PowerMock等框架。1.1 Junit单元测试框架 Junit是一套java编写的开源测试框架IDEA,Eclipse等开发工具均有集成。可以轻松的完成依赖关系少或者比较简单的单元测试,但是对于依赖关系多的场景又非常耗时。比如依赖数据库,依赖地图资源,或...

2020-03-15 14:17:12 1257

原创 javaWeb基础笔试题学习笔记

(1)对字符串str="welcome to china"进行下列操作处理,描述结果正确的是(B)A.str.substring(1,5)的返回值是"elcom"B.str.length的返回值16C.str.indexOf("come",4)的返回值为4D.str.toUpperCase( )的返回值是"Welcome To China"解析:A、str...

2020-02-29 00:14:05 3755

转载 本地git关联码云

一、clone工程有两种:1)HTTPS (pull和push的时候需要密码)2)SSH (不需要密码,但是需要创建公钥)创建公钥的目的:使用SSH公钥可以让你在你的电脑和码云通讯的时候使用安全连接(git的remote要使用SSH地址)步骤:1.打开终端(git)进入.ssh目录cd ~/.ssh 如果.ssh文件夹不存在,执行指令自动创建mkdir ...

2020-02-22 21:48:15 274

原创 ActiveMq点对点、发布订阅、虚拟主题特性研究

1、研究背景JMS规范定义了Java中访问消息中间件的接口,但没有给予实现,具体实现交给消息中间件,比如:ActiveMQ就是一个JMS Provider。一般情况下ActiveMQ支持两种消息传送模型:点对点消息通信模型(queue)和发布订阅模型(topic)。点对点模式下,Queue中的消息只被消费一次,其他的消费者就不能再消费消息了。发布订阅模式下所有的消费者都可以订阅到消息。...

2020-02-22 17:45:00 679

原创 java初探

(一)java语言的核心API指的是什么     在JDK核心API中指的是类似这种命名方式的包    java.lang java.util java.io java.math java.sql java.awt java.swing ,包含语言核心包,异常处理包,常用工具包,集合框架。、       集合框架(360解释):集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任

2016-11-30 21:17:54 382

原创 htttp服务器及完整注释

#include "httpd.h"void usage(const char *proc){ printf("Usage : %s [PORT]\n", proc);}static void not_found(int client){}void print_debug(const char * msg){#ifdef _DEBUG_ printf("%s\n", ms

2016-08-30 18:11:55 1230

转载 学习网络编程很好的网站

http://vcsos.com/article/pageSource/150117/20150117134024_4.shtml

2016-08-29 12:28:49 528

转载 sockaddr_in结构体详解

sockaddr_in(在netinet/in.h中定义):struct sockaddr_in {short int sin_family;                      /* Address family */unsigned short int sin_port;       /* Port number */struct in_addr sin_addr;   

2016-08-29 11:52:42 18897 2

转载 setsocket函数详解

功能描述:        获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。用法:

2016-08-29 11:41:58 6478

转载 C++ 智能指针详解

C++ 智能指针详解 一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_p

2016-08-27 11:50:50 427

转载 为什么C++编译器不能支持对模板的分离式编译

为什么C++编译器不能支持对模板的分离式编译 刘未鹏(pongba)C++的罗浮宫(http://blog.csdn.net/pongba) 首先,一个编译单元(translation unit)是指一个.cpp文件以及它所#include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件(假定我们的平台是win3

2016-08-27 10:50:11 364

原创 关于TCP ,select,epoll服务器的区别与联系

(一)TCP服务器server.c# include# include# include# include# define _PORT_ 999# define BACKLOG_ 10int main (){ int sock=socket(AF_INET,SOCK_STREAM,0); if(sock<0) { printf("crea

2016-07-30 23:20:48 954

转载 UDP网络编程

UDP套接口是无连接的、不可靠的数据报协议;既然他不可靠为什么还要用呢?其一:当应用程序使用广播或多播时只能使用UDP协议;其二:由于他是无连接的,所以速度快。因为UDP套接口是无连接的,如果一方的数据报丢失,那另一方将无限等待,解决办法是设置一个超时。建立UDP套接口时socket函数的第二个参数应该是SOCK_DGRAM,说明是建立一个UDP套接口;由于UDP是无连接的,所

2016-07-27 17:43:38 355 1

原创 关于四次挥手的TIME_WAIT状态

如图能够很好的说明这个问题:       当客户端最后一次发送消息时并没有直接进入close状态而是进入TIME_WAIT状态,这是因为TCP是面向连接的协议每一次发送都需要确认对方是否收到消息。客户端最后一次发送消息时可能会由于网络等其他原因导致服务器收不到消息,服务器就会选择从新给客户端发送一个FIN的包,如果客户端处于关闭状态将永远也收不到服务器发给它的消息了。至于这个时间要等多久才

2016-07-27 16:37:53 2783 1

原创 socket网络编程

(一)socket()函数创建套接字      “IP地址+TCP或UDP端口号”可以唯一标识网络中的一个进程,我们把这个组合称为套接字socket。根据linux一切皆文件的思想,socket是一个文件,可以用“打开open –> 读写write/read –> 关闭close”模式来操作,使用socke()函数来获取该套接字文件描述符。domain:type:s

2016-07-26 21:48:51 880

原创 TCP的三次握手和四次挥手

(一)三次握手的过程        如图所示TCP建立连接的过程形象的称为三次握手,客户端和服务器就像在进行如下的对话:        客户端:“可以连接你吗”        服务器:“可以呀,什么时候”        客户端:“就现在呀”        第一次握手时:SYN表示连接请求,序号是1000表示用作网络通讯的临时地址。这个序号每发送一字节数据,序号就

2016-07-24 12:34:37 383

原创 NAT技术的原理

(一)为什么要有NAT          NAT的出现是为了缓解IP地址的不足问题。当然它还有一些其他的功能,如:隐藏并保护网络内部的计算机。对于一个企业来说只需要一个合法的IP地址就可以用NAT的方法实现内部所有的计算机和Internet的通信。(二)NAT原理          当内部的计算机试图向外部发送一个数据包时,NAT可以对报头先前的源IP地址修改成合法的公有IP地址。这样

2016-07-24 11:17:36 1563

原创 IP分片三位标志以及路由表的建立算法

(一)IP分片原理IPv4:1.分片原因     其中3位标志和13位片偏移用于IP分片,通常要传输的IP报文的大小超过最大传输单位MTU(MaximumTransmission Unit)时就会产生IP分片情况。IP分片通常发生在网络环境中。比如说,在以太网(Ethernet)环境中可传输最大IP报文大小(MTU)为1500字节。而传输的报文大小要比150

2016-07-22 12:55:13 2616

空空如也

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

TA关注的人

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