搜索平台开发知识点整合
这是在开发搜索中台中涉及到的一些比较新颖的技术或者知识点或者设计思想,整合了一下思路和一些代码,方便日后的开发和复用
设计模式设计模式就是一种设计思想,重点在于怎么设计而不是代码,项目中包含三个设计模式:门面模式,适配器模式,注册器模式。
门面模式门面就是指一个统一的一个入口,也就是说前端只需要发送请求,不需要关心门面背后的具体细节。就好像用户去酒店订房间,酒店前台应该干的事情一样,比如用户需要同时定三个房间,这三个房间就直接让前台做好就行,不需要用户自己一间一间去完成。程序设计同理,假如前端需要三个方向的数据,比如同时请求了用户信息,文章信息和图片信息,可以抽象出一个接口,同时返回这三个信息,这样就不需要同时调用三个接口了。
适配器模式适配器模式指定制统一的数据源接入规范,比如:
什么类型的数据源允许接入?
接入数据源时需要满足的要求?
接入时需要做出什么调整?
只要数据源符合了规范,那么它就可以被接入系统当中,假如原有的数据源已经做好了搜索等接口,但是和规范的数据源搜索接口不一致,有参数上的区别,那么通过适配器模式可以将两个接口对接成新的统一的接口,就好像转接插头那样。
注册 ...
关于开发api开放平台过程中的知识
这是在开发api开放平台中用到的一些新知识,这些概念对于初学者来说确实比较陌生,因此这里写一篇详细的开发过程和涉及到的知识。
API签名认证在开发API开放平台的时候,需要管理API的调用,这里会涉及到一个问题,就是必须对api的发送作出限制,限制用户的调用,限制调用的次数,判定调用者的身份是否确实为该用户本身(中间人拦截再重复调用)。因此使用到了叫API签名认证的技术,本文对这个技术的学习过程作出一些总结。
具体实现方法签名认证本质上就是后端去校验前端传来的签名,具体实现的方法第一种是通过请求头 request header来实现,首先我们必须在用户的表上添加属性 assessKey和secretKey,这个是两个标识,至于为什么要两个属性可以参考一下登陆系统要用的用户名和密码。
当然这两个key肯定不能写死,这里为了先跑通整个流程,先写死了,最后应该是在注册的时候生成?这个还需要再思考一下。
接下来我们在调用接口的时候传入这两个key,打个断点调试一下,可以得到结果:
进入到这个判断,就说明校验key的逻辑完成了✅。
思考这种方法是一种方法,但是咱们来想一想,这样子做的话,前 ...
c#联合opencv&Halcon编程探索
N年没有写博客了2333,大三以后基本上都在开发一些项目,项目本身又不好写博客TT,所以好久好久没动过了,现在在做一个机器视觉方向的实习,刚好可以研究倒腾一下,然后给自己开个小坑,八月份看看能不能倒腾一下badusb。
图片格式转换以及彩色转黑白模块Halcon开发首先我们要在halcon上把整个处理逻辑跑通,halcon是一个工业领域的机器视觉软件库,他提供很多有关图像处理的算子来帮助处理图像,算子就类似于封装好的函数,可以在编写程序的时候提高效率,要实现图片彩色转黑白,我们首先第一步是读入图片并且获得到一些基本信息,包括图片展示,宽高。
read_image (Image, 'background/6355071687f84cfcb2cb002f9073f5a4.jpg')get_image_size (Image, Width, Height)originalWidth:=WidthoriginalHeight:=Heightif(Width>800 or Height>800) //预览图片时将图片等比缩小,避免图片太大占满窗口 Sca ...
计算机网络学习
关于网络的一些科普和笔记~
IPIP地址是统一的地址格式,表示互联网上每一台主机和网络的逻辑地址,IP地址由纯数字组成,分为IPv4和IPv6两种,前者是由四段十进制的数字,从0.0.0.0到255.255.255.255 。后者则是八组16进制表示
在Linux中指向ifconfig指令的时候得到的参数如下:
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.234.130 netmask 255.255.255.0 broadcast 192.168.234.255 inet6 fe80::c48b:6823:dd50:f808 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:71:88:4b txqueuelen 1000 (以太网) RX packets 1412 bytes 1463239 (1.4 MB) RX errors ...
js学习一些总结
这里记录一些在ubc暑期课程中学习js的一些难点,由于ubc讲课太快了,只能挑部分记录
声明变量关键字这是一个很折磨的地方,因为js中的声明变量可以像python一样不用定义类型,但是同时又可以使用var, let等关键字进行定义,所以需要区分清楚
num=3 //全局定义var num=3 //函数级定义let num=3 //块级定义const num=3 //块级常量定义
如果什么都不加,那么就是全局定义,可以在全局环境中被访问,这种定义方式及其不推荐,因为很容易出现命名冲突,污染等问题。var关键字定义的变量在函数级作用域中生效,所以所有函数都能访问到这个变量,因此容易出现数据意外覆盖的问题,因此也不推荐使用,let和const生效的区域是块级域,这意味着较难出现数据污染的问题。
回调在js中,万物皆是对象,因此函数也是对象,它可以被当作参数放入另一个函数中,而在该函数执行完逻辑后调用这个传入函数的步骤,就是回调。
function randInt(){ return Math.floor(Math.random() * 2000);}function ...
stable marriages(稳定婚姻) problem
稳定婚姻问题,from ubc-vsp23,感觉确实是一个有趣的问题。
问题问题本身:有n个男孩,n个女孩,每一个男孩有他对于所有女孩的排名,每一个女孩也有她对于所有男孩的排名,那么如何将他们配对呢?别tm说什么为什么一定要配对( 图示:
首先既然是稳定婚姻问题,我们得先定义出来什么是稳定,在婚姻问题中我们对稳定的定义是:不存在这样两队夫妻:她们彼此更喜欢另一对的另一半。emmm有点抽象,就是说男一和女一在一起,男二和女二在一起,如果男二和女一相互喜欢,那么这里的婚姻是不稳定的,不能出现这种情况。当然这样定义肯定会出现一个问题,这是第一个问题:每一个喜好列表的人都能找到稳定的配对吗?或者说,每一对情侣能找到一个保证稳定不分手的情况吗?这里有一个算法提出了一个解决方案:Gale-Shapley算法
Gale-Shapley算法算法步骤如下:
初始时,所有的男性和女性都被标记为”单身”状态。
从未与女性提出过求婚的男性中,选择一个男性。
对于这个男性,按照他对女性的偏好顺序,从未被求婚过的女性中选择一位女性。
如果这位女性是”单身”状态,则接受男性的求婚,两人形成婚姻配对。
如果这位 ...
关于爬虫的总结
最近在某著名985学子的压力下看了看了他们的python大作业,发现完全不会(,又是日常被薄纱的一天(,然后就有了这篇总结,记录一下这几天的历程。爬虫其实是属于我一直想学,一直没学的东西,正好趁这次机会迈出第一步。
request库+请求分析这是我尝试的第一种方式,但是失败了。思路是通过fiddler工具对浏览器进行抓包,通过模拟正常用户的行为来分析请求,再用request库来进行发送请求。大作业的内容是爬取知网上的文献,内容包括题名,作者。首先我们先抓包,这是刚进入网页的请求:
这里说明网页发送get请求得到初始界面,这个过程我在postman里模拟发送请求也实现了,但是问题是出现在后面的请求中。接下来就是检索关键词之后发送的post请求,拿到一个具有多个文献名称,作者等信息的检索页面,请求头和请求体如下:
这里我用postman构造请求头和请求体发送请求,但是得到的却是下面这种情况,不知道是什么原因,后来我也是放弃了这种方式。当然有知道原因的或者是知道这种方法怎么做的请cue我一下(
用selenium模拟浏览器操作selenium是一个自动化测试的工具,可以模拟浏览器的行 ...
2023ciscn初赛总结
2023ciscn初赛总结,赛后忘记交wp(
Crypto:国密报告发请求拿到唯一id,随后生成密钥对A
const sm2 = require('sm-crypto').sm2let keypair = sm2.generateKeyPairHex()publicKey = keypair.publicKey // 公钥privateKey = keypair.privateKey // 私钥console.log(publicKey)console.log(privateKey)//044aa510d65be737ac8f2e0a38457915abc65f30e153a66f43e21c4d6b6cf9cbdb99afae316c5e9e217acdd45695da2f39746d9532e799be6e590495130d5c5b82 公钥A// 824a5860308e9dc6c3bca8848c70ffa80b82a2d30948d8fb0ceb398636a6d84f 私钥A//1faa445b-2125-4f3c-aaec-d0d6ff9c56 ...