自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 shared_ptr

shared_ptr

2023-02-26 16:58:38 120

原创 scala函数式编程

scala函数式编程

2022-12-17 18:05:49 567

原创 numpy中的seed

参数:seed(n)中的参数n比喻成“堆”,seed(5)表示第5堆,n的数值基本可以随便设置。设置的seed(n)仅一次有效。(也有人比喻seed(n)里的n为一个盛有随机数的“聚宝盆”,一个数字代表一个“聚宝盆”,当我们设置相同的seed()时,“聚宝盆”就是一样的,所以每次取出的随机数就会相同。)注意:需要每次调用的时候都seed()一下,表示种子相同,从而生成的随机数相同。例1:只调用一次seed(),两次产生的随机数不同。

2022-10-21 15:03:39 1938

原创 K-means以及Faiss聚类

K-meansK-means 是我们最常用的基于欧式距离的聚类算法,其认为两个目标的距离越近,相似度越大。算法步骤:1.选择初始化的k个样本作为初始聚类中心 :a=a1,a2,...aka=a_1,a_2,...a_ka=a1​,a2​,...ak​;2.针对数据集中每个样本xix_ixi​,计算它到k个聚类中心的距离,并将其分到距离最小的聚类中心所对应的类中;3.针对每个类别aja_jaj​,重新计算它的聚类中心aj=1ci∑x∈cixa_j=\frac{1}{c_i}\sum_{x\in{c_

2022-04-07 16:01:24 3111

原创 TF

TF-IDF 特征权重计算Tf就是词频因子,也就是一个单词在文档中出现的次数。具体计算方法,最直接的就是利用词频数,也可以采用词频数取log值,还有增强型规范化tf,对长文档的一种抑制。用单词实际词频除以文档中最高的词频。IDF逆文档频率因子log (N/nk)N代表文档集合中总共有多少个文档,nk代表特征单词k在其中多少个文档中出现过。代表的是文档集合范围的一种全局因子。越多的文档包含某个单词,其IDF权值越小。BM25模型...

2021-07-09 07:02:11 192

原创 2021-04-26

导语explicit防止隐式转换拷贝构造 拷贝赋值

2021-04-26 06:10:07 564

原创 前缀和-leetcode

前缀和就是数组第0项到当前项的和。如果用一个数组preSum表示数组A的前缀和:preSum[i]=A[0]+A[1]+…+A[i];数组A中的某项,可以表示为相邻前缀和之差:A[i]=preSum[i]-preSum[i-1]多项叠加,等号右边加减相消,得到通式:A[i]+…+A[j]=preSum[j]−preSum[i−1]i 当然可以为 0,此时 i - 1 为 - 1,我们故意让 preSum[-1] 为 0,此时:A[0]+A[1]+…+A[j]=preSum[j]预置这种不存在

2021-03-14 16:48:23 156

原创 滑动窗口

//1208.尽可能使字符串相等/*给你两个长度相同的字符串,s 和 t。将 s 中的第 i 个字符变到 t 中的第 i 个字符需要 |s[i] - t[i]| 的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。用于变更字符串的最大预算是 maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。如果你可以将 s 的子字符串转化为它在 t 中对应的子字符串,则返回可以转化的最大长度。如果 s 中没有子字符串可以转化成 t 中对应的子

2021-03-11 22:22:44 821

原创 并查集

// 未改进版本class Djset {public: vector<int> f; // f记录每个人名的父辈是谁 int findRoot(int x) { while (x != f[x]) { x = f[x]; } return x; } void Union(int x, int y) { int x_root = findRoot(x);

2021-03-11 16:57:47 213

原创 std::function

std::functionstd::function<void()> func;类模板std::function是一种通用,多态的函数封装。std::function的实例可以对任何可以调用的目标实体进行存储,复制,和调用操作,这些目标实体包括普通函数,lambda表达式,函数指针,以及其他函数对象等。通常std::function是一个函数对象类,它包装其它任意的函数对象,被包装的函数对象具有类型为T1, …,TN的N个参数,并且返回一个可转换到R类型的值。std::function使

2021-02-07 11:52:06 95

原创 并查集

一般并查集:// 未改进版本class Djset {public: vector<int> parent; // 记录节点的根 Djset(int n): parent(vector<int>(n)) { for (int i = 0; i < n; i++) parent[i] = i; } int find(int x) { if (x != parent[x]) return find(paren

2021-01-26 20:03:15 68

原创 shell入门

Shell中的$0、$1、$2的含义简单来说 $0 就是你写的shell脚本本身的名字,$1 是你给你写的shell脚本传的第一个参数,$2 是你给你写的shell脚本传的第二个参数比如你新建了一个shell脚本 Test.sh, 内容如下#!/bin/shecho "shell脚本本身的名字: $0"echo "传给shell的第一个参数: $1"echo "传给shell的第二个参数: $2"保存退出后,你在Test.sh所在的目录下输入 bash Test.sh 1 2,结果为:sh

2021-01-26 11:41:44 67

原创 vector的坑,你踩过吗?

C++的容器真的是不好学啊最近用了resize这个方法,resize只会把新增的元素赋初值,之前的元素并不会修改!!例如:std::array<bool, 64> matched_{};//array的初始化可以直接用{},不用memset_s

2020-12-29 17:20:42 189

原创 单调栈和单调队列

/*496. 下一个更大元素 I输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]*/vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) { unordered_map<int, int> mp; stack<int> st; for (int i = nu

2020-12-25 10:05:25 99

转载 指针

摘自:https://www.jianshu.com/p/b5f68f5330beint p; //这是一个普通的整型变量int p; //首先从P 处开始,先与结合,所以说明P 是一个指针,然后再与int 结合,说明指针所指向的内容的类型为int 型.所以P是一个返回整型数据的指针int p[3]; //首先从P 处开始,先与[]结合,说明P 是一个数组,然后与int 结合,说明数组里的元素是整型的,所以P 是一个由整型数据组成的数组int p[3]; //首先从P 处开始,先与[]结合,因为其

2020-12-03 13:18:51 89

原创 GIT操作

Git1. 把暂存区的变更撤销掉,即git add 文件 的取消git reset HEAD filename 2. 回滚到以前的某个版本git reset HEAD HEAD 指向的版本为当前的版本,即最新最新的提交上一个版本为HEAD^上上一个版本为HEAD^^HEAD~15 往上15个版本3. 配置别名(全局,本电脑上的本用户的所有git仓库)git config --global alias.st status4. 配置loggit config --glob

2020-11-20 20:00:31 129

原创 C++11 R字符串原始字面量

原始字符串字面量的定义为:R “xxx(raw string)xxx”其中,原始字符串必须用括号()括起来,括号的前后可以加其他字符串,所加的字符串会被忽略,并且加的字符串必须在括号两边同时出现。#include <iostream>#include <string>int main(){ // 一个普通的字符串,'\n'被当作是转义字符,表示一个换行符。 std::string normal_str = "First line.\nSecond line

2020-11-06 09:43:11 4829

原创 ES

Restful:GET请求:GET index 查询索引信息GET index/type/doc_id 查询指定的文档信息POST请求:POST index/type 创建文档POST index/type/_search 查询文档POST index/type/_update 修改文档PUT请求:PUT index 创建索引PUT index/type/doc_id 创建文档PUT index/type/_mappings 创建索引时,指定索引文档存储的属性信息DELETE请求:

2020-09-23 10:09:02 115

原创 剑指offer2

/和为s的两个数字:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]/class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { int l = 0, r = nums.size

2020-09-14 11:54:31 77

原创 redis

1.String常用命令get: 查询对应键值set: 添加键值对append: 将给定的 追加到原值的末尾strlen:获得值的长度setnx: 只有在 key 不存在时设置 key 的值incr:将 key 中储存的数字值增1,只能对数字值操作,如果为空,新增值为1decr:将 key 中储存的数字值减1,只能对数字值操作,如果为空,新增值为-1incrby / decrby <步长>:将 key 中储存的数字值增减。自定义步长。mset …:同时设置一个或多个 key-v

2020-09-11 17:42:09 114

原创 剑指offer

/数组中出现次数超过一半的数字:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。投票法:初始cnt = 0, val = -1;若cnt == 0, 则将val设为当前值,cnt=1;往后遍历,若与val相等,则cnt++,否则cnt–/class Solution {public: int majorityElement(vector<int>& nums) { int cnt = 0, val = -1; for (a

2020-09-11 16:50:44 60

原创 原码,反码,补码

原码:是最简单的机器数表示法。用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。3: 0011-3: 1011反码:1.正数的反码还是等于原码2.负数的反码就是他的原码除符号位外,按位取反3: 0011-3: 1100补码:1.正数的补码等于他的原码2.负数的补码等于反码+1。...

2020-09-11 14:57:02 72

原创 回溯算法

回溯的步骤:①画出递归树,找到状态变量(回溯函数的参数),这一步非常重要※②根据题意,确立结束条件③找准选择列表(与函数参数相关),与第一步紧密关联※④判断是否需要剪枝⑤作出选择,递归调用,进入下一层⑥撤销选择类型:1.子集,组合: 子集,子集II,组合,组合总和2.全排列:全排列,全排列II,字符串的全排列,字母大小写全排列3.搜索:解数独,单词搜索,N皇后,分割回文串A、子集:leetcode71.给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说

2020-09-09 18:01:08 103

原创 修改hosts文件在本地使域名解析到指定IP

修改hosts文件在本地使域名解析到指定IP# Copyright (c) 1993-2009 Microsoft Corp.## This is a sample HOSTS file used by Microsoft TCP/IP for Windows.## This file contains the mappings of IP addresses to host names. Each# entry should be kept on an individual line. The

2020-09-04 12:01:21 1124

原创 HTTP

1.输入一个网址:(1)DNS将域名解析为IP地址(浏览器缓存->操作系统缓存->路由器缓存->ISP缓存->递归查询)(2)封装HTTP包(3)封装TCP报文,三次握手建立连接(4)发送请求消息给服务器(5)服务器回复响应(6)服务器四次挥手断开连接(7)客户端收到响应后解析报文,解析HTML,渲染。2.HTTPS:(1)首先建立SSL层连接,客户端将SSL版本号和加密组件发给服务器,服务器根据SSL版本号和加密组件进行匹配,同时将CA证书和公钥发送给客户端。(

2020-09-01 18:02:05 372

原创 TCP/IP

1.TCP三次握手:(1)服务端调用socket创建套接字,bind绑定端口,listen被动打开,再调用accpet阻塞,等待客户端连接。客户端调用socket创建套接字,connect主动打开发起连接。(2)客户端发送连接请求报文段给服务端,将SYN位置为1,sequence number为x,客户端进入SYN_SEND状态,等待服务端的确认;(3)服务端收到syn包后,需要对这个SYN报文段进行确认,设置ACK Num为x+1,同时自己还要发送SYN请求信息,将SYN位置1,sequence n

2020-09-01 16:35:21 114

原创 知识图谱

多关系图一般包含多种类型的节点和多种类型的边。 在知识图谱里,我们通常用“实体(Entity)”来表达图里的节点、用“关系(Relation)”来表达图里的“边”。知识图谱应用的前提是已经构建好了知识图谱,也可以把它认为是一个知识库。这也是为什么它可以用来回答一些搜索相关问题的原因,比如在Google搜索引擎里输入“Who is the wife of Bill Gates?”,我们直接可以得到答案-“Melinda Gates”。这是因为我们在系统层面上已经创建好了一个包含“Bill Gates”和“

2020-08-24 17:17:46 991

原创 搜索引擎

搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。搜索引擎的门槛主要是技术门槛,包括网页数据的快速采集、海量数据的索引和存储、搜索结果的相关性排序、搜索效率的毫秒级要求、分布式处理和负载均衡、自然语言的理解技术等等搜索引擎的实现原理,可以看作四步:从互联网上抓取网页→建立索引数据库→在索引数据库中搜索→对搜索结果进行处理和排序。 (1)爬行:搜索引擎是通过一种特定规律的软件跟踪网页的链接,从一个链接

2020-08-24 11:55:07 960

原创 线程池

为什么需要使用线程池?如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视了,就需要使用线程池。线程池的作用?1.提高效率,创建好一定数量的线程放在池中,等需要使用的时候就从池中拿一个,这要比需要的时候创建一个线程对象要快的多。2.方便管理,可以编写线程池管理代码对池中的线程同一进行管理,比如说启动时有该程序创建100个线程,每当有请求的时候,就分配一个线程去工作,如果刚好并发有101个请求,那多出的这一个请求可以排队等候,避免因无休止的创建线程导

2020-08-19 10:31:41 78

原创 创建多少个线程合适?

创建多少个线程合适?要区分 是 CPU 密集型程序 还是 I/O 密集型程序。CPU密集型程序:一个完整请求,I/O操作可以在很短时间内完成, CPU还有很多运算要处理,也就是说 CPU 计算的比例占很大一部分理论上 线程数量 = CPU 核数(逻辑) 就可以了,但是实际上,数量一般会设置为 CPU 核数(逻辑)+ 1,计算密(CPU)集型的线程恰好在某时因为发生一个页错误或者因其他原因而暂停,刚好有一个“额外”的线程,可以确保在这种情况下CPU周期不会中断工作。I/O密集型程序:一个完整请求,CP

2020-08-18 20:09:10 377

原创 搜索引擎

搜索引擎分类:全文搜索:1.从互联网上抓取网页,利用能够从互联网上自动收集网页的蜘蛛系统程序,自动访问互联网,并沿着任何网页中所有URL爬到其他网页,重复这个过程,并把爬过的素有网页收集回来。2.由分析索引系统程序对收集回来的网页进行分析,提取相关网页信息(包括网页所在URL,编码类型,页面内容包含的滚见此,关键词位置,生成时间,大小,与其他网页的连接关系等),并根据一定的相关度算法进行大量的复杂计算,得到每一个网页针对页面内容中及超链中每一个关键词的相关度(或重要性),然后利用这些相关信息建立网页索

2020-08-16 23:20:17 1217

原创 开发流程

需求澄清:1.SE组织需求澄清;2.开发详细设计,反串讲,评审方案是否有问题task分解:帮助梳理开发思路,短小,独立,可测试。(例如,根据不同场景:基础功能,异常场景,大用户场景等)代码编写:及时review。单元测试:一个小需求都化为几个短小独立可测试的部分,那么我们就可以用单元测试来进行测试。主要是白盒测试,保证分支都覆盖了beta测试:联合周边模块一起调测,包括不同服务之间消息交互,格式,大小端字节序等。输出测试报告转测试...

2020-08-12 11:03:27 157

原创 请问当用户反馈网站访问慢,你会如何处理?

请问当用户反馈网站访问慢,你会如何处理?有哪些方面的因素会导致网站网站访问慢?1、服务器出口带宽不够用本身服务器购买的出口带宽比较小。一旦并发量大的话,就会造成分给每个用户的出口带宽就小,访问速度自然就会慢。跨运营商网络导致带宽缩减。例如,公司网站放在电信的网络上,那么客户这边对接是长城宽带或联通,这也可能导致带宽的缩减。2、服务器负载过大,导致响应不过来可以从两个方面入手分析:分析系统负载,使用 w 命令或者 uptime 命令查看系统负载。如果负载很高,则使用 top 命令查看 CPU ,

2020-08-09 18:06:36 404

原创 drop、truncate和delete的区别

1,DELETE语句执行要进行事务提交,可以进行回滚操作2,TRUNCATE TABLE 则一次性地从表中删除所有的数据,删除行是不能恢复的。3,当表被TRUNCATE 后,会返还数据所占空间,DELETE操作不会返回数据占用的空间。drop语句将表所占用的空间全释放掉。4,TRUNCATE 和DELETE只删除数据, DROP则删除整个表(结构和数据)。5,delete语句为DML(data ManipulationLanguage),要commit6,truncate、drop是DLL(d

2020-08-06 20:10:04 424

原创 TCP 如何保证可靠性

1.校验和:校验范围包括TCP首部和数据部分。在发送方将整个报文段分为多个16位的段,然后将所有段进行反码相加,将结果存放在校验和字段中,接收方用相同的方法进行计算,若最终结果为校验字段所有位是全1则正确(UDP中为0是正确),否则出现错误。若校验出包有错,则丢弃报文段并且不给出响应,这时TCP发送数据端超时后会重发数据。2.确认应答与序列号:TCP将每个字节的数据都进行了编号,这就是序列号。序列号的作用是(1)保证可靠性(当接收到的数据总少了某个序号的数据时,能马上知道);(2)保证数据的按序

2020-08-06 14:35:15 364

原创 库函数的实现

库函数的实现:memcpy函数的实现void *memcpy(void *dest, const void *src, size_t count) { char *tmp = dest; const char *s = src; while (count--) *tmp++ = *s++; return dest;}Strcpy函数实现char *strcpy(char *dst,const char *src) { assert(dst != NULL &&

2020-08-05 20:03:59 122

原创 线程池

什么时候需要创建线程池呢?简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时也是线程池该出场的机会了。如果线程创建T1和销毁时间T3相比任务执行时间T2可以忽略不计,则没有必要使用线程池了。反之如果T1+T3>T2,那就很有必要使用线程池。#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/typ

2020-07-27 14:41:17 114

原创 mysql_c_API

1.连接数据库 :MYSQL mysql;mysql_init(&mysql);mysql_real_connect(&mysql, “localhost”, “root”, “6748355”, “spytest”, 0, NULL, 0);/*练习mysql数据库的连接*/ #include <stdio.h> #include <mysql.h> int main() { MYSQL mysql; int t,

2020-07-26 21:24:57 88

原创 多线程

一、创建线程多线程编程的第一步,创建线程。创建线程其实是增加了一个控制流程,使得同一进程中存在多个控制流程并发或者并行执行。pthread_create(&tid, NULL, (void *)func, NULL);//创建次线程pthread_join(tid, &retval);//阻塞等待次线程结束,结束后该函数回收次线程占用的资源(retval为返回值)pthread_detach(tid);//分离次线程,让次线程再结束时自动回收资源。pthread_cancel(t

2020-07-25 17:56:57 99

原创 同步、异步、阻塞、非阻塞IO总结

对于一个网络IO,会涉及到两个系统对象,一个时调用这个IO的进程,一个时系统内核。当一个read操作发生时,会经历两个阶段:(1)等待数据;(2)将数据从内核拷贝到进程中。阻塞I/O:当进程调用了recvfrom后,就会一直等到有数据到达并且被拷贝到进程中才会返回。非阻塞IO:当进程发出read操作时,如果数据还没准备好,不会阻塞用户进程,而是立即返回一个error。进程收到error后再次发起read操作。当内核中的数据准备好了,就会将数据拷贝到用户内存,然后返回。用户需要不断主动询问内核数据准备

2020-07-22 20:30:36 76

空空如也

空空如也

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

TA关注的人

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