自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 如何实现浮点数立方根?

给一个浮点数num, 如何求其立方根ans?首先 0 < |ans| < num,对于浮点数区间的海量数据,若采用加法枚举判断,那绝对把CPU能累死。计算精度越高,时间复杂度越高。上述方法,只是简单的加法性线性探测。如果采用对数级别线程探测,就可以短时间求出结果。二分查找法(0,num) 区间数,顺序递增,刚好符合二分法条件。 public static double cubeRoot(double num) { double left = 0; do

2021-04-28 22:49:29 570

原创 高效素数判断

素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。那么,对于任意数N,判断其是否是素数,就需要从[2,N) 一一枚举整除判断,若都不能整除,则N为素数。 public static boolean isprime(int num) { if (num < 2) { return false; } for (int i = 2; i < num; ++i) {

2021-04-28 22:20:13 181

原创 如何提高服务器性能?

影响服务器性能的首要因素就是系统的硬件资源,比如CPU的个数、速度、内存大小等。不过由于硬件技术的飞速发展,现代服务器都不缺硬件资源。因此,从软件层面提升服务器的性能。服务器的“软环境”,一方面是指系统的软件资源,比如操作系统允许用户打开的最大文件描述符数量;另一方指的就是服务器程序本身,如何从编程的角度确保服务器性能。1、池既然服务器的硬件资源“充裕”,那么提高服务器性能的一个直接的方法就是,以空间换时间,即“浪费”服务器的硬件资源,以换取其运行效率。这就是池的概念。池是一种资源的集合,这组资源在服务

2021-04-19 18:40:51 583

原创 I/O模型

1、Reactor模式Reactor模式:它要求主线程只负责监听文件是否有事件发生,有的话就立即将该事件通知工作线程,。除此之外,主线程不做任何其他实质性的工作。读写数据,接收新的连接,以及处理客户端请求均在工作线程中完成。使用同步I/O模型是线程Reactor模式的工作工作流程:主线程往epoll内核事件表中注册socket上的读就绪事件主线程调用epoll_wait等待socket可读当socket上有数据可读时,epoll_wait通知主线程,主线程则将socket可读事件放入请求队列中。

2021-04-19 18:04:33 96

原创 CSFreamwork

CSFreamwork 是一个简单的网络通信框架。主要功能:服务端和客户端之间交互,完成客户端资源请求/响应,客户端相互通信。该框架可再次开发,完成网络应用开发,例如:聊天室,棋牌室等。CSFreamwork 是应用层开发,抽象出来的核心代码,开发者不必关心客户端与服务器之间如何进行通信?如何进行网络编程?只关心业务功能的开发。该框架进一步简化了网络应用的开发。1. 三层结构通信层:与对端建立/中断socket通信,支持数据读取,数据发送,完成端对端信息交互。会话层:框架核心层,完成消息处理与响应

2021-04-13 23:11:02 233 2

原创 简述网络参考模型

1. OSI 七层模型应用层该层协议定义了应用进程之间的交互规则,通过不同的应用层协议为不同的网络应用提供服务。例如域名系统 DNS,支持万维网应用的 HTTP 协议,电子邮件系统采用的 SMTP 协议等。表示层表示层的作用是使通信的应用程序能够解释交换数据的含义。该层提供的服务主要包括数据压缩,数据加密以及数据描述。这使得应用程序不必担心在各台计算机中表示和存储的内部格式差异。会话层会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层提供了数据交换的定界和同步功能,包括了.

2021-04-13 18:00:17 502

原创 简述进程

简单来说,进程是一次程序的运行过程。它包含CPU、内存、磁盘、文件等各种硬件资源。所以说进程也是资源分配的基本单位。程序只是指令和数据的描述,而进程是才是真正的运行实例。1.进程组成部分数据段:用来存放程序中已初始化的全局变量或静态变量的一块内存区域。代码段:程序代码。PCB(进程控制块:用来描述进程的当前状态)2.PCB进程控制块进程的信息存放在PCB里。主要包括:标示符: 描述本进程的唯一标示符,用来区别其他进程。进程状态:运行、就绪、阻塞,表示进程现的运行情况程序计数器: 程

2021-04-12 16:18:00 308

原创 HTTP简述

HTTP(超文本传输协议):是用于从Web服务器传输超文本到本地浏览器的传送协议。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。HTTP 在TCP协议之上。包含有SSL/TLS协议,即HTTPS(文本加密传输)。HTTP 默认端口号:80。HTTPS默认端口号:443。HTTP 是无状态协议。请求报文一次HTTP操作称为一个事务,其工作过程可分为四步:1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始

2021-04-11 11:49:54 225

原创 【Java框架】RMI:底层通信

本篇主要完成服务端,字节流接收与发送,请求解析,响应参数编码。1.请求解析public class NetMessage { private int action; private String param; public NetMessage(String request) { String[] split = request.split("&&"); this.action = Integer.parseInt(split[0

2021-01-21 13:34:04 114

原创 【Java框架】RMI:代理机制

本篇针对完成服务端提供接口服务,实现代理,完成客户端方法调用的第一步。代码实现这里应用JDK代理,拦截的到方法,具体实现交由RMI客户端实现。代理获取,只需要传递接口。public class JDKProxy { private RMIClient rmi; public JDKProxy(RMIClient rmi) { this.rmi = rmi; } Object getproxy(Class<?> klass) {

2021-01-21 13:33:47 141

原创 【Java框架】RMI:请求映射

本篇完成构建请求与方法的映射关系1.方法表public class MethodDefination { private Method method; private Object object; public Method getMethod() { return method; } public void setMethod(Method method) { this.method = method; }

2021-01-21 13:33:32 144

原创 【Java框架】RMI:请求处理

当服务端接收到消息,底层将解析后数据,发送到该类中。请求处理@Overrideprotected void dealRequest(NetMessage netMessage) { try { MethodDefination methodDefination = MethodFactory.getMethod(netMessage.getAction()); Object object = methodDefination.getObject(); M

2021-01-21 13:33:10 196

原创 【Java框架】RMI:客户端

本篇主要完成客户端与服务器通信,请求发送,响应处理。当客户端调用的方法,被连接后,就体处理由该类完成。1.服务请求public Object inovker(Method method, Object[] args) { try { socket = new Socket(ip,port); DataInputStream dataInputStream = new DataInputStream(socket.getInputStream()); Dat

2021-01-21 13:32:55 213

原创 【Java框架】RMI

前言RMI(Remote Method Invocation,远程方法调用)。即为本地机方法调用远端方法。RMI是开发网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。百度百科1.RMI原理服务端提供服务接口供客户端参照。客户端在实现接口,是基于代理模式。客户端每次调用,会被拦截,与服务端建立通信,并将请求方法和请求参数,

2021-01-21 13:32:40 130

原创 【Java设计模式】代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。意图:为其他对象提供一种代理以控制对这个对象的访问。主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层,即增加

2021-01-06 23:00:52 107

原创 【Java框架】CSFreamwork:网络节点

该类用于存储网络主机地址ip及port,将其抽象成一个节点。package edu.xupt.cs.core;public class NetNode { private String ip; private int port; public NetNode(String ip, int port) { this.ip = ip; this.port = port; } public String getIp() {

2020-12-28 15:04:15 110

原创 LeetCode:三数之和

1.三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。解题思路:a + b + c = 0 => a + b = -c; 那么此问题转换成 两数之和问题!对C我们可以在数组中一 一枚举。在数组的其他部分中找到符合条件的a,b组。在无序数组中,由于无法确定a、b位置,所以a和b只能遍历一 一枚举,直至满足条件。这种做法,嵌套三重循环。时间复杂度为O(n^3).属于暴力解

2020-12-28 08:38:31 273

原创 【Java 框架】CSFramework:底层通信

CSFrameWork底层通信建立这层仅负责来对消息的发送和接收,不负责对任何消息和通信异常进行处理。具体的处理流程由基于该层Conversation的层负责。一、通信信道的开启与关闭通过Socket类的输入流和输出流建立数据输入流和输出流public abstract class Communicate { public Socket socket; private DataInputStream dis; private DataOutputStream dos;

2020-12-28 08:37:09 144

原创 【Java框架】CSFreamwork:会话层

会话层基本通信层,负责对消息的具体处理。1.会话层主要功能1.1 服务端客户端验证客户消息单发客户消息群发客户请求响应客户上下线连接异常处理1.2 客户端请求上下线服务消息处理服务响应处理消息群发与单发2. 通信协议package edu.xupt.cs.core;public enum ECammand { //服务端 WHO_ARE_YOU, //询问客户端身份 ONLINE_PASS,//上线客户端通过 FORCE_DOWN, //强制客户

2020-12-28 08:31:36 196

原创 【Java框架】CSFreamwork:通信协议

服务器与客户端通信方式。package edu.xupt.cs.core;public enum ECammand { //服务端 WHO_ARE_YOU, //询问客户端身份 ONLINE_PASS,//上线客户端通过 FORCE_DOWN, //强制客户端显现 RESPONSE //响应 //客户端 OFFLINE, //客户端下线 OUT_OF_ROOM, I_AM, //客户端身份回复 TO_ONE, //消息单发

2020-12-28 08:31:16 145

原创 【Java框架】CSFramework:消息装箱与拆箱处理

以服务器为例,服务器接收到客户端消息:可以分为三类。1.服务器与客户端基本互动服务器接收到客户端,要理解对方消息前,必须约定通信方式,即信息必须加上双方理解的通信标记ECammand。2.客户端调远程用服务器方法。在理解客户端消息基础上,就可实现客户端远程调用。那么就需要标记具体调用方法action。3.客户端对客户端消息转发转发消息前提,需要知道目标地址,所以加入地址标记。4.NetMessageNetMessage 实现1、2、需求。public class NetMessage {

2020-12-27 16:07:15 111

原创 【Java框架】CSFramework:网络配置

网络连接配置Ip及Port。总共有三中方法。1.接口配置package edu.xupt.cs.core;public interface INetConfigure { String ip = "192.168.1.214"; int port = 8806;}2.配置文件将配置信息写入Properties文件,解析并手动set。2.1配置文件serverIp:192.168.1.214port:88062.2 配置接口需要配置类,实现该接口package

2020-12-27 16:07:05 133

原创 【Java框架】CSFreamwork:观察者模式

前言什么是观察者模式?当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。设计目的监控服务器状态,当服务器运行异常时,以便对其做相应的调整。1.服务器监听向监听端汇报服务器状态。1.2服务器发布端package edu.xupt.cs.core;public interface IListener { void processMessage(String message);}1.2 侦听端package edu.xupt.cs.core;publ

2020-12-27 16:06:54 91

原创 【Java框架】CSFreamwork:客户端池

前言1.临时客户端池用于存放未经过身份验证的客户端。package edu.xupt.cs.core;import java.util.LinkedList;import java.util.List;public class TempClientPool { private List<ServerConversation> clients; { clients = new LinkedList<>(); } pub

2020-12-27 16:06:40 198 1

原创 【Java框架】CSFreamwork:客户端

客户端功能:基本功能,业务功能。1. 基本功能客户端配置连接服务器客户端下线消息发送资源请求1.1客户端配置通过配置文件配置,连接的ip和portpublic void loadConfigure() { PropertiesParse pp = new PropertiesParse(); pp.loadProperties("config/NetConfigure.properties"); setPort(Integer.parseInt(pp.value

2020-12-27 16:06:27 345

原创 【Java框架】CSFreamwork: 服务器

服务器主要功能服务器启动服务器关闭消息转发客户端请求响应接收客户端观察者模式1.0启动服务器建立Socket,开启侦听线程。public void openServer() { try { serverSocket = new ServerSocket(INetConfigure.port); publishMessage("服务器启动成功!"); publishMessage("等待客户端连接..

2020-12-27 16:06:15 105

原创 【Java框架】CSFreamwork:分发器@构建映射关系@注解

该篇通过注解构建映射关系,主要有三种:获取类信息获取方法信息获取参数名1.注解1.1 类注解package edu.xupt.cs.factory.anno;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.Target;import static java.lang.annotation.RetentionPolicy.

2020-12-27 16:06:01 112

原创 【Java框架】CSFreamwork:分发器

什么是分发器?服务器接收到客户端资源请求。框架层根本无法处理,需要向上传递消息。分发器就是负责将请求消息分发到上层具体处理方法中,返回请求结果。1.方法表分发器如何调用上层处理方法。需要建立一张表,记录一个类中方法,提供依据调用。在执行方法时,还需要具体对象。package edu.xupt.cs.action.abstract_;import java.lang.reflect.Method;import java.lang.reflect.Parameter;public abstr

2020-12-27 16:05:39 409

原创 【Java框架】CSFreamwork:分发器@构建映射关系@XML

1.方法表getValues方法中的argumentMaker封装了Gson,解析参数字符串。package edu.xupt.cs.factory.xml;import edu.xupt.cs.action.abstract_.BeanDefination;import edu.xupt.cs.factory.ArgumentMaker;import java.lang.reflect.Parameter;import java.util.ArrayList;import java.ut

2020-12-27 16:05:20 98

原创 【Java框架】CSFreamwork:参数序列化

客户端请求资源,如何发送参数?数据发送,可以是字符串或者字节数据,那么如何发送整型、浮点型、对象等数据。有一种方式是将数据格式化,转换成字符串或字节类型发送,对端接收后,将其还原成源数据。什么是序列化?序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。Gson工具Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象。ArgumentMaker 小工具

2020-12-27 16:04:34 356

原创 JavaScript:函数

JavaScript函数1. 定义函数方式一fuction fun1(x) { ...}如果没有执行return,函数执行完也会返回结果就是undefined方式二var fun2 = function(x) { ...}定义匿名函数调用函数fun1(1)fun2(1,2)JavaScript可以传递任意个参数,也可以不传参数argumentsarguments是一个关键字,代表传入所有参数组成的数组。如果想使用多余的参数进行附加操作呢?

2020-12-18 23:28:50 135 3

原创 JavaScript:基本语法

JavaScript基本语法1. 基本语法1.1、变量声明letvar1.2、 控制台输出console.log(...)1.3、 浏览器调试元素面板调试js打断点抓包查看网站cookie2. 数据类型数值、文本、图片、音频、视频2.1 numberjs 不区分小数和整数123 //整数123.1 //浮点数1.123e3 //科学计数数NaN //not a numberInfinity //表示无限大2.3 字符串字符串使用单引号或双引号

2020-12-18 19:20:38 78

原创 Mybatis_Spring_SpringMVC整合

1.创建Maven工程2.配置环境2.1 jar包依赖配置<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> &lt

2020-12-18 08:34:16 208

原创 【Java项目】多文件传输

1. 前言为了实现一个C/S框架应用,客户端向服务器请求资源。采用传统的BIO模式传输。问题:但当客户端数量增加,传输效率下降。尤其是多个客户端请求1G文件时,传输大概有十多分钟。问题分析:客户端所需要的资源都是通过服务器单独发送,当请求增加时,会引起下载速度的急剧下降;对于同一个文件,如果有多个客户端下载,该视频文件被多次在网上传输。解决方式:目前形势,服务器一对多,能否实现多服务器对单客户端传输,这样就可以提高资源传输效率。有的多个客户端请求重复资源,能否将重复的资源请求,指派给已发送

2020-12-18 08:20:57 659 1

原创 【Java项目】多文件传输:资源请求者

1、资源请求者职责向注册中心,请求服务。向服务器,请求资源。2. 与注册中心建立通信建立RMI通信 //代理对象,与注册中心进行沟通 private IResourceRegistryCenterAction center;/** * 配置服务器 ip和端口号 * @param configPath configPath 配置文件 * @throws IOException */public ResourceReceiver(St

2020-12-18 08:20:25 134

原创 【Java项目】多文件传输:资源拥有者

发送端向接收端发送资源,前提是,必须知道接收端地址,以及请求资源片段。ServerClient 只是仅负责资源发送。那么发送之前还需与接收端进行沟通。1. 资源拥有者资源拥有者有三个职责:向资源注册中心,注册资源,作为RMI客户端。与接收端进行会话,作为RMI服务器。向接收端发送资源,作为RMI客户端。1.1 会话服务器与发送端沟通获取接收端地址与资源请求。 private RMIServer rourecerHolderServer; private Node me; pub

2020-12-18 08:19:53 135

原创 【Java项目】多文件传输:资源发送客户端

资源发送者负责发送接收端指定的资源片段。1.资源发送端应该采取什么模式发送资源?两种发送模式:单发送端对单接收端多发送端对单接收端模式2效率明显较高。一对多模式,采用C/S网络通信。客户端:发送端。服务器:接收端。2.资源发送者资源发送端发送资源的前提:本地资源列表。发送端ip和port。发送端请求的资源片段信息。 public Sender(Socket socket, ResourceInfo resourceInfo, Li

2020-12-18 08:16:32 158

原创 【Java项目】多文件传输:资源接收服务器

该篇主要完成资源接收。1、资源接收端通信模式资源接收端根据文件长度接收资源片段。每接收一个文件,关闭通信。资源接收端需要准备,未接收片段池和文件对象池。接收端可能有多个发送端。接收端建立C/S服务器端。2、接收片段内容处理判断发送端是否发送完毕;发送完毕,关闭通信。获取片段内容将内容写入文件填充未接收片段若未接收片段未空,关闭文件资源。 class SectionProcesser implements ISectionProcesser { private

2020-12-17 20:29:34 247

原创 【Java项目】多文件传输:资源注册中心@资源拥有者池

该篇主要完成,资源节点添加、删除、获取资源节点地址列表。1、设计目的注册中心存储资源节点信息,以便向发送端提供服务地址列表。2、主要功能资源拥有者,向注册中心注册资源。发送端向注册中心报告健康值状况。注册中心,向接收端提供服务地址列表。3、资源拥有者池服务地址列表 private static final Map<Integer, List<Node>> ownerPool;key:资源idvalue:服务地址列表。接收端注册 private

2020-12-17 20:29:20 89 1

原创 【Java项目】多文件传输:资源注册中心@资源网络节点

资源网络节点是针对拥有资源拥有者,资源拥有者将自己id、port、连接情况和资源列表信息提供给注册中心。注册中心以便选取最佳的接收端。一、资源网络节点基本信息package man.kuke.registry;/** * @author: kuke * @date: 2020/12/5 - 19:06 * @description: */public interface INodeAddress { INodeAddress setIp(String ip); INodeA

2020-12-17 20:29:09 144 1

空空如也

空空如也

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

TA关注的人

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