4 Wyman蚊子

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 8w+

【设计模式】单例模式

设计模式之单例模式顾名思义,单例模式就是用来保证一个类只能构建一个对象的设计模式。初级版本一个初始版本的单例模式实现如下:构建方法是私有的,只能由类内部调用;单例对象只能通过 getInstance 方法获取,不能直接访问。public class Singleton { private static Singleton instance = null; // 单例对象 private Singleton() {} // 私有构造函数 // 静态工厂方法

2020-08-07 17:19:49

【设计模式】观察者模式

观察者模式观察者模式是一种基于事件和响应的设计模式,常常用于传统的窗体应用程序以及游戏开发领域。一个典型的场景是,在游戏操作界面中,存在游戏角色、陷阱、怪物、宝物等,当游戏角色移动到陷阱、怪物、宝物的位置时,如何让这个移动事件能够被感知到,并作出正确响应呢?传统的思路是,陷阱、怪物、宝物周期性地对自己的有效范围进行检测,当检测到主角时则作出响应。这种是“拉取”的思想,但存在明显的弊端,如果事件没有发生,那么程序就会一直“空转”,浪费资源;而且,即便事件有发生,如果检测周期太长,也无法得到实时的响应。如

2020-08-07 17:18:07

【网络编程基础】Socket 通信

Socket 通信本地的进程间通信方式有很多种,不同进程之间可以通过进程号来区分不同的进程。那在网络中通信的进程又是如何唯一标识一个进程呢?根据 TCP/ IP 协议簇的定义,网络层的 IP 地址可以唯一标识网络中的主机,传输层的协议+端口可以唯一标识主机中的应用程序(进程),因此利用三元组(IP 地址,协议,端口)就可以标识网络中的进程了,而网络中的进程通信就可以利用这个标志实现进程间交互。使用 TCP / IP 协议的应用程序通常采用应用编程接口来实现网络进程间的通信,目前几乎所有的应用程序都是采

2020-07-29 23:13:12

【编程基础】堆空间与栈空间

在 C 语言中,内存分布的部分情况如下图所示:有些部分并没有在图中表示出来,实际上内存分布的功能划分从高地址到低地址依次是:内核空间:应用程序不允许访问的部分,只能由内核进行操作,操作系统的内核程序映射到这个区域。栈空间:保存局部变量。文件映射区:进程打开文件后,将文件内容从硬盘读到进程的文件映射区,以后就直接在内存中操作这个文件,读写完成后保存时,再将内存中的文件写入硬盘中。堆空间:运行时使用,常用 malloc( ) / free( ) 或者 new( ) / delete( )。全局的

2020-07-20 21:25:52

【编程基础】进程、线程与协程

进程、线程、协程并行与并发并行:真正意义上的同时进行多个任务。这只能在多核 CPU 上实现。并发:从宏观上看,并发就是同时进行多个事件。但实际上,这些事件并不是在同时进行,而是交替进行的。由于 CPU 的运算速度非常快,给我们造成了一种在同一时间内进行多个事件的错觉。进程进程是具有一定独立功能的程序,它是系统进行资源分配和调度的一个独立单位。在出现线程前,进程是拥有资源和独立调度的基本单位。程序运行时,系统会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它时就会为它分配

2020-07-13 16:31:09

【编程基础】进程间通信(IPC)

进程间通信进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或者交换信息的过程。常见的方式有:管道(无名管道)、FIFO(命名管道)、消息队列、信号量、共享内存、Socket、Streams 等。其中 Socket 和 Streams 支持不同主机上两个进程之间的通信。管道管道通常指无名管道,是 UNIX 系统最古老的 IPC 形式。它具有以下特点:半双工:数据只能在一个方向流动,有固定的读端和写端。亲缘通信:只能用于具有亲缘关系的进程之间的通信,也

2020-07-13 16:28:40

【编程基础】锁机制与死锁

Linux 锁机制Linux 的内核锁主要是自旋锁和信号量。互斥锁 Mutex Lock互斥锁(Mutual-Exclude Lock)是最容易理解、使用最广泛的一种同步机制。使用互斥锁保护的临界区只允许一个线程进入,其他线程如果没有获取锁权限,就只能等候。int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr); int pthread_mutex_destr

2020-07-13 16:26:44

【计算机网络】Web 访问中的 cookie, seesion, token

Web 访问中的 cookie, seesion, tokencookieHTTP cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。cookie 通常保存在客户端浏览器上,有时候也会保存在服务端。单个 cookie 保存的数据一般小于 4 KB,一个站点最多保存 20 个 cookie。它只能保管 ASCII 字符串,需要通过编码的方式存取 Unicode 字符或者二进制数

2020-07-07 11:02:35

【计算机网络】HTTP 的 Methods

GET 与 POSTGET 是指完整请求一个资源,POST 是指提交表单。GET 直观上是把参数包含在 url 内,请求获取一个 html 页面、图片、css、js 等资源,浏览器可能会将 GET 请求的 url 地址加入缓存,以便下次访问。POST 通过 request body 传递参数,提交一个 form 表单, 并得到一个显示提交结果的网页。从表面上看,两者的区别在于:GET 使用 url 或者 cookie 传参,而 POST 将数据放在 request body 中。GET 方式提

2020-07-07 00:07:21

【计算机网络】浏览器中的 http 请求响应过程

客户端输入 url 后的相应过程http 的工作过程通常包括请求和相应两个环节,属于标准的客户端服务器模型( C/S 模型)。客户端发起 http 协议请求,服务器接收到请求后,返回对应的相应。具体过程包括:url 地址解析:域名解析系统(DNS)解析域名得到访问网站所在主机的 IP 地址。完整的 url 通常包括模式协议(https)、域名、访问端口、 虚拟目录、文件名部分、参数部分、锚点部分等。进行 DNS 解析前,会先从浏览器 DNS 缓存查找,一旦找到就完成了解析工程。如果没有找到,

2020-07-06 23:58:38

【LeetCode】63. 不同路径 II

问题描述一个机器人位于一个 m x n 网格的左上角 (起始点在标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用1和0来表示。说明:m和n的值均不超过 100。示例1:输入:[ [0,0,0], [0,1,0], [0,0,0]]输出: 2解释:3x3 网格的正中间有一个障碍物。...

2020-07-06 20:49:51

【LeetCode】108. 将有序数组转换为二叉搜索树

问题描述将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5Java 实现既然数组是有序的,构建平衡二叉树时利用二分思想就很好实现了。树的构建.

2020-07-03 22:40:02

【计算机网络】TCP 与 UDP

TCP 与 UDPTCP/IP 协议是一个协议簇。里面包括很多协议的,UDP 只是其中的一个。TCP (Transmission Control Protocol)TCP/IP 协议集包括应用层,传输层,网络层,网络访问层。TCP 是面向连接的单播协议。在收发数据前,必须和对方建立可靠的连接。它是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。三次握手一个

2020-07-02 15:48:41

【计算机网络】HTTP 与 HTTPS

HTTP 与 HTTPSHTTP (HyperText Transfer Protocol)协议为超文本传输协议,常用在 Web 浏览器和网站服务器之间的通信,http 协议以明文发送内容,并不会提供任何加密功能。如果攻击者截取了http 传输报文,就可以获取到其中的信息,甚至恶意修改内容。因此,http 协议不适用于传输一些敏感信息,如密码、信用卡号等支付信息。为了解决 http 协议的这个缺陷,在实际应用中常常使用 HTTPS (HyperText Transfer Protocol Secure)

2020-07-01 22:06:14

【数据结构】数据结构三要素

数据结构三要素数据结构的三要素包括数据逻辑结构、数据存储结构和数据的运算。数据逻辑结构数据的逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上描述数据。它与数据的具体存储形式无关,是独立于计算机的。数据逻辑结构通常分为线性结构和非线性结构。典型的数据结构与其逻辑结构的对应关系如下:对于线性表、集合、树、图这四种典型的数据结构,他们分别有以下特点:集合结构:数据元素之间只存在 “同属于一个集合”的关系。线性结构:数据元素之间只存在“一对一”的关系。树形结构:数据元素之间存在“一对多”的关系。

2020-07-01 13:45:24

【数据结构】块状链表(块状数组)

块状链表(块状数组)数组与链表在讨论块状链表(或者称块状数组)之前,我们先回顾一下数组和链表的特点:操作数组 (通常考虑有序)链表存储结构地址连续的存储单元,物理位置相邻地址不连续,物理位置不相邻定位O (1)O (N)插入O (N)O (1)删除O (N)O (1)数组定位的效率很高,直接通过下标索引就能获取元素的定位,由于长度通常是固定的,因此不适合插入和删除等操作。当数组为有序时,使用二分查找法效率较高,时间复杂度为 O (logN)

2020-06-30 21:56:03

【LeetCode】860. 柠檬水找零

问题描述在柠檬水摊上,每一杯柠檬水的售价为5美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意:一开始你手头没有任何零钱。如果你能给每位顾客正确找零,返回true,否则返回 false。 0 <= bills.length <= 10000 bills[i]不是5就是10或是20示例...

2020-06-30 21:14:51

【剑指 Offer】09. 用两个栈实现队列

问题描述用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )。其中:1 <= values <= 10000 最多会对appendTail、deleteHead 进行10000次调用示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][...

2020-06-30 20:47:48

【网络编程基础】I/O 多路复用(select,poll,epoll)

网络编程基础I/O 多路复用I/O 多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲 I/O 数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作。为了解决单个应用进程能同时处理多个网络连接的问题,通常采用 select、poll、epoll 作为解决方案。它们的区别主要体现在以下三个方面:系统如何知道进程需要监控哪些连接和事件(也就是fd)。系统知道进程需要监控的连接和事件后,采用什么方式去对fd进行状态的监

2020-06-22 15:37:00

模型常用评估指标

模型常用评估指标L0 范数、L1 范数、L2 范数、余弦距离向量的范数可以简单形象理解为向量的长度,或者向量到零点的距离,亦或是相应两个点之间的距离。因此范数通常会对应一个距离概念。L0 范数L0 范数表示向量中非零元素的个数:∣∣x∣∣0=#(i) with xi≠0||x||_0 = \#(i) \text{ with } x_i \ne 0∣∣x∣∣0​=#(i) with xi​​=0 。使用 L0 范数的目的就是希望向量的大部分元素都是 0 ,即

2020-06-17 23:50:27

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。