关于向量机的学习
作者 青鸟
最近在学习数图相关的知识,在数图中经常使用的机器学习方法是线性回归和支持向量机(SVM)。由于支持向量回归(SVR)在图像特征融合中使用的比较多,所以着重介绍关于SVR的芝士
什么是支持向量回归对于传统的回归模型直接基于模型输出f(x)与真实输出y之间的差别来调整系数,并且当且仅当f(x)和y完全相同时候,损失才为0.与之不同的是支持向量回归(Support Vector Regression 简称SVR)假设我们能容忍一个一个偏差值z,当前仅当f(x)与y之间的差值大于z才计算损失,这相当于以f(x)为中心,构建了一个宽度为2z的间隔带,若训练样本落入此间隔带,则认为预测正确。
这里需要解释的是为什么需要引入一个软间隔z。假如没有软间隔z,我们基于的假设是训练样本在样本空间或特征空间中是线性可分的,即存在一个超平面能将不同类的样本完全划分开。然而,我们其实很难判断我们找到的超平面是不是由于过拟合而造成的在特征空间中线性可分,因此我们引入软间隔来避免过拟合的这种情况。
支持向量回归的非线性拟合支持向量回归(SVR)可以处理非线性数据的原因在于其能够利用核函数来转换数据,使其 ...
详解HTTPS的安全传输
作者 青鸟
计算机网络中对应用层中的HTTP做了详细解释,而却对于现在广泛使用的HTTPS却一笔带过,因此专门也了一篇博客来做此学习
HTTPS简介HTTPS(Hypertext Transfer Protocol Secure)是一种用于在Web浏览器和Web服务器之间安全传输数据的协议。HTTPS的安全性基于SSL(Secure Sockets Layer)或其继任者TLS(Transport Layer Security)协议。以下是HTTPS中SSL/TLS的工作原理:
握手阶段(Handshake Phase):
客户端向服务器发送一个连接请求,并请求建立安全连接。
服务器会回复一个包含其公钥和数字证书的消息。数字证书通常是由可信的证书颁发机构(CA)签发的,用于验证服务器的身份。
客户端会验证服务器的数字证书。如果数字证书有效且由可信CA签发,客户端会生成一个随机的对称密钥,然后使用服务器的公钥加密这个密钥。
客户端将加密后的密钥发送回服务器,只有服务器可以解密它,因为它拥有相应的私钥。
服务器使用其私钥解密客户端发送的密钥,并将其存储在内存中。
数据传输 ...
列式存储与ClickHouse数据库
作者 青鸟
在字节青训营中专门花了一节课时间来介绍了列式存储,列式存储在大数据分析中具有相对于行存储具有绝对的优势,而ClickHouse则是列式存储数据库对代表
列式存储列式存储(Columnar Storage)是一种数据存储和管理方法,与传统的行式存储(Row-based Storage)相对立。在列式存储中,数据按列而不是按行进行存储和检索。这意味着将同一列的数据一起存储在一起,而不是将整个行的数据存储在一起。以下是列式存储的关键特点和优势:
按列存储:数据按列储存,每个列都有自己的存储区域。这与行式存储不同,行式存储将整个行的数据存储在一起。
高压缩率:由于相似的数据通常会在列中重复出现,列式存储非常适合数据压缩。这可以显著减小存储需求,降低存储成本。
高性能分析:列式存储非常适合用于分析性质的查询,如聚合、过滤和统计。因为查询通常只涉及少数列,所以只需要读取和处理必要的数据列,从而提高了查询性能。
减少I/O操作:由于数据按列存储,查询只需要访问所需的列,而不必读取整行数据。这降低了I/O操作的开销,提高了查询速度。
列存储索引:列式存储通常使 ...
在Go语言中优雅的使用消息队列
作者 青鸟
最近在项目中接触了消息队列,写一篇记录一下Go语言下的使用消息队列,调用的是这个库asynq(”github.com/hibiken/asynq”)这个的文档真的是读过这么多以来最清楚的一个了,很值得去拜读一下。这篇博客是对asynq的Wiki做了一个简单的翻译。
什么是消息队列消息队列(Message Queue)是一种在分布式系统中用于在不同组件或服务之间传递消息的通信模式。它是一种异步通信方式,用于解耦不同部分的系统,使它们能够以解耦和的方式协同工作,而无需直接相互通信。
在消息队列中,消息的发送者将消息放入队列中,而消息的接收者从队列中获取消息并进行处理。这使得发送者和接收者之间可以彼此独立地操作,无需即时相互通信。消息队列具有以下一些优点和特点:
解耦性: 消息队列允许系统的不同部分能够独立演化,而不会直接影响其他部分。这使得系统更加灵活和可维护。
异步通信: 发送者和接收者之间的通信是异步的,即发送者不需要等待接收者处理消息。这有助于提高系统的性能和响应性能。
缓冲能力: 消息队列可以作为一个缓冲区,帮助平衡发送者和接收者之间的处理速度 ...
使用tmux和systemed守护进程
作者 青鸟
会话与进程命令行的典型使用方式是,打开一个终端窗口,在里面输入命令。用户与计算机的这种临时的交互,称为一次”会话”(session) 。
会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完。
这就带来一个问题,当我们运行后端程序时,我们的程序进程是和我们的会话绑定的。当我们退出命令行的时候,程序进程就难以管理,这就不符合我们对于后端程序进程的管理需求。于是就有了进程守护这一概念。
Tmux什么是Tmuxtmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权。使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机。
tmux可以将会话与窗口”解绑”:窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话”绑定”其他窗口。
于是乎,tmux就可以起到守护进程的作用。
tmux守护进程新建会话第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以 ...
使用ssh连接云服务器
作者 青鸟
ssh连接的原理SSH连接指的是通过SSH(Secure Shell)协议建立的安全远程连接。SSH是一种加密的网络协议,用于在不安全的网络上安全地进行远程登录和执行命令。
通过SSH连接,你可以远程登录到远程计算机或服务器,并执行命令、传输文件等操作,而这些操作都会在加密通道中进行,确保数据传输的安全性。
SSH连接使用了非对称加密和对称加密两种加密方式。在建立连接时,客户端和服务器会协商加密算法,生成公钥和私钥,用于加密通信和身份验证。客户端使用服务器的公钥对通信数据进行加密,而服务器使用自己的私钥解密。
SSH连接的一个常见用途是远程管理服务器。管理员可以通过SSH连接到服务器,执行系统管理任务、安装软件、查看日志等操作,而不需要直接物理接触服务器。此外,SSH连接也常用于安全地传输文件,可以通过SCP(Secure Copy)或SFTP(SSH File Transfer Protocol)在本地计算机和远程服务器之间传输文件。
总结来说,SSH连接是一种安全的远程连接方式,通过加密和身份验证确保数据的安全传输,使得用户可以远程管理计算机或服务器。
ssh的配置使用 ...
算法汇总
作者 青鸟
之前写过好多算法的文章,但是现在主要学习开发,就把之前的做了一个汇总,挑了一些写的还可以的文章或代码,其余的就不展示到Blog上了。
最大流问题最大流问题一直是图论中的难点,这里给出Edmonds Karp增广路算法的模板
网络最大流
最大流的模板
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182//最大流问题//Edmonds Karp增广路算法#include<iostream>#include<queue>#include<algorithm>typedef long long ll;const int maxn = 520010;using namespace std;int n, m, s, t;//dis表示每个点的流量,pre用来记录bfs找到的增广路//vis用在b ...
C++中关于多态的一些问题
作者 青鸟
多态的原理原理虚函数是在面向对象编程中用于实现多态性的一种机制。它允许通过基类的指针或引用调用派生类中重写的函数,实现运行时的动态绑定。
虚函数的原理涉及以下几个关键概念:
虚函数表(Virtual Function Table):每个包含虚函数的类都会生成一个虚函数表,也称为 vtable。虚函数表是一个特殊的数据结构,它由编译器创建并存储在内存中。虚函数表中存储了指向每个虚函数的函数指针。
虚函数指针(Virtual Function Pointer):每个对象中都包含一个隐藏的指针,称为虚函数指针(vptr)。虚函数指针是一个指向虚函数表的指针。编译器在对象的内存布局中添加虚函数指针,它指向对象所属类的虚函数表。
虚函数的声明与重写:在基类中,将要在派生类中重写的函数声明为虚函数。这通过在函数声明前面加上 virtual 关键字来实现。派生类可以选择是否重写基类的虚函数,并使用 override 关键字进行标注。
动态绑定:当使用基类的指针或引用调用虚函数时,编译器会通过虚函数指针找到相应的虚函数表,并从中获取正确的函数指针来执行函数调用。这个过程称为动态绑定 ...
Go语言下的并发编程
作者 青鸟
go语言的高并发一直是go的特色之一。但是网上大部分文章侧重于如何使用,而对于其原理往往跳过。同时网上的大部分文章对于并发编程的一些概念往往存在很多错误,因此特地写一篇博客记录一下。
并发编程的概念深入理解进程和线程进程的概念:在百度百科中,进程给出的概念是操作系统中运行的程序。通俗的理解上,我们可以认为进程为操作系统中一个复杂的基本工作单位,是系统进行资源分配和调度的基本单位。每一个进程都有独立的堆栈空间,互相之间不影响,因此我们可以认为进程之间是隔离的。
进程的空间模型:
栈区:由编译器自动分配和释放,存放函数的参数值(形参)、局部变量(int a ;还有指针变量)等,其操作方式类似于数据结构中的栈,先进后出。
堆区:一般由程序员分配和释放,若程序员不释放,可能会造成内存泄漏,程序结束的时候可能由操作系统回收,注意它与数据结构中的堆是两回事,分配方式类似于链表。
全局区(静态区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域(.data),未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(.bss),程序结束后系统释放。
文字常量 ...
关于同源策略的讨论
作者 青鸟
之前在做前后端分离的项目的时候,前后端的鉴权方式选择了session,在这个过程中遇到了浏览器的同源策略的问题,也是在查阅了好多资料后,使用了跨域资源共享,完成了鉴权,因此写一篇博客来记录一下。
什么是同源策略同源策略(Same-Origin Policy)是一种安全性措施,用于Web浏览器中,以防止不同源(不同域、不同协议或不同端口)的网页之间在浏览器中的JavaScript代码之间进行未经授权的交互。同源策略的目标是保护用户的隐私和安全,防止恶意网站通过恶意脚本访问其他网站的数据或执行潜在的恶意操作。
同源策略的主要规则包括:
协议相同:网页必须使用相同的协议(通常是http://或https://)才能被认为是同源的。
域名相同:网页必须具有相同的主机名(域名),例如,www.example.com 和 sub.example.com 不被视为同源。
端口相同:网页必须在相同的端口上运行,否则会被视为不同源。例如,http://example.com:80 和 http://example.com:8080 是不同源的。
...