正向代理和反向代理
正向代理和反向代理
一、代理
代理就相当于中间商,本来A和B是可以直接连接的,但是此时添加了一个C在中间,A跟B不直接连接,而是通过C作为中介进行连接。最常见的例子就是二手东,其实很多我们租房子时签约的人不是房子的真正房东,而是房东委托的中介,房东不想管事或者房子太多,只靠自己无法进行管理,所以才会通过中介(代理)进行处理,像蛋壳、自如这样的租房软件其实也是中介的一种,真正的房东是直接将房子委托给这样的第三方中介进行出租。
一个完整的请求是由: client(客户端) -> proxy(代理) -> server(服务端) 组成。
二、正向代理
正向代理: 顺着请求的方向进行的代理,即代理服务器它是由你配置为你服务,去请求目标服务器地址。
举例一: 如我们现在想要访问谷歌,但是由于某些原因,无法直接访问到谷歌,我们可以通过连接一台代理服务器,代理服务将我们的请求提交到谷歌,然后再将谷歌的响应反馈给我们,对于谷歌而言,它只知道有一个请求过来,但是它并不会知道我们是无法直接访问它的。
正向代理的作用:
访问原来无法访问的资源,如google
可以做缓存,加速访问资源
对 ...
快速幂
快速幂
说明:
快速幂(Exponentiation by squaring,平方求幂)是一种简单而有效的小算法,它可以以$$O(logn)$$的时间复杂度计算乘方。快速幂不仅本身非常常见,而且后续很多算法也都会用到快速幂。
让我们先来思考一个问题:7的10次方,怎样算比较快?
方法1:最朴素的想法,7*7=49,49*7=343,… 一步一步算,共进行了9次乘法。
这样算无疑太慢了,尤其对计算机的CPU而言,每次运算只乘上一个个位数,无疑太屈才了。这时我们想到,也许可以拆分问题。
方法2:先算7的5次方,即7*7*7*7*7,再算它的平方,共进行了5次乘法。
但这并不是最优解,因为对于“7的5次方”,我们仍然可以拆分问题。
方法3:先算7*7得49,则7的5次方为49*49*7,再算它的平方,共进行了4次乘法。
模仿这样的过程,我们得到一个在$$O(logn)$$时间内计算出幂的算法,也就是快速幂。
Java模板(迭代法)
12345678910static long qpow(long a,int n){ long sum =1; while(n!=0){ ...
排列组合
排列组合
Java模板
12345678910111213141516171819202122232425```## C++模板```c++int arrange(int m,int n){ if(m==n) return n; return m*arrange(m-1,n);}void dfs(int x){ if(x==n){ for(int i =1;i<=n;++i) printf("%d",a[i]); for(int i=1;i<=n;++i){ if(!mark[i]){ a[x]=i;++mark[i]; } dfs(x+1); mark[i]=0; //回溯 } }}
个人算法学习进度表
个人算法学习进度表
算法名称
是否已学
算法名称称
是否已学
算法名称
是否已学
算法名称称
是否已学
DFS
✅
BFS
✅
二分
✅
全排列
✅
差分
✅
前缀和
✅
二维差分
✅
二维前缀和
✅
树状数组
✅
并查集
✅
贪心
✅
线性筛
✅
杜教筛
✅
Dijkstra
✅
Kruskal
✅
Manacher
✅
逆元
✅
快速幂
✅
质因数分解
✅
Prim
✅
Segment Tree(线段树)
✅
背包DP
✅
线性DP
✅
状态压缩DP
✅
树形DP
✅
数位DP
✅
互质
✅
KMP
✅
链式向前星
✅
模拟退火
✅
ST表
✅
竞赛算法使用分析
竞赛算法使用分析
说明:
关于算法分析本人全凭经验之谈,具体还是要根据自身和题目情况而定
针对有序性数据(单调增、或者减)可以联想到二分或者双指针等算法
针对时序性数据可以联想使用优先队列。
带有状态绑定的可以联想DP
数字或者字符特征统计的可以尝试联想数位DP或者Manacher或者KMP
数据区间操作类可以联想差分、前缀和、树状数组、线段树
矩阵类可以试着联想纬度压缩后进行双指针,或者使用二分差分或者二维前缀和
关于线性平均类题型可以思考一下方差相关的数学定理和平均相关的数学定理
前缀和的问题开数组最好是从1开始比较好
Nginx学习
Nginx学习
常用指令:
停止
systemctl stop nginx
重启
systemctl restart nginx
关于nginx总是403问题:
说明:
如果使用的是Centos那么并且防火墙啥的都关了可能存在SELinux的问题,只需要把SELinux关了就行
centos关闭SELinux指令:
1sed -i s#SELINUX=enforcing#SELINUX=disabled# /etc/selinux/config
宝塔常用指令
查看面板入口(也可以通过该命令判断服务器是否安装了宝塔面板)
1/etc/init.d/bt default
使用 bt 命令 重置用户密码
重启面板
1bt restart
Hexo常用指令
Hexo常用指令
创建新文章
1$ hexo new "My New Post" #这里My New Post是文章名称
通过node运行当前博客
1$ hexo server #这里就是启动的意思
生成静态页面
1$hexo generate #这里就是生成静态页面的指令
打包静态页面并部署到github
1$ hexo g -d #这里g的意思就是打包成静态页面也就是指令generate,-d其实就是deploy,也就是部署的意思
GFW原理和封锁技术
GFW原理和封锁技术
一、简介
计算机的防火墙,和物理意义上的墙并不一样,物理上的墙建立以后,那就既进不来,也出不去了。而计算机的墙,则是可以对两个方向进行控制。
其实我们今天所说的计算机防火墙,大致有两种,一种是对内的,一种是对外的。
传统意义上的防火墙,一般是用来防止外部访问的,当然,你也可以设置禁止访问某些IP或者网站,禁止内部访问。
简而言之,GFW对网络内容的过滤和分析是双向的,GFW不仅针对国内读者访问中国境外的网站进行干扰,也干扰国外读者访问主机在中国大陆的网站。
我们使用计算机的时候,会开放很多端口,比如22,139,3389等等,而作为非开发者的用户,往往用不到这些端口。 再考虑到使用这些端口的程序有的时候是有漏洞的,开放了容易被攻击,所以干脆打开防火墙封闭了就好。 这就好比你日常宅在家,并不需要出门,就把锁孔都堵死来保证安全一样。
而我们今天讨论的主角,主要的功能不是阻止别人进来(入侵),而是阻止你出去的。 你访问不了Google/Youtube/Facebook/LINE/Twitter/。。。的根本原因: 防火长城,GreatFireWall,简称GFW。
...
一元积分
一元微分
常考题型
导数和微分的概念
微分法和导数的计算
切线问题
凹凸函数的性质与判断
求函数在定义域上的单调区间与极值点,凹凸区间与拐点
求渐进现金的问题。
求极限时,当分子抽象为函数,考虑用导数定义求解试试
导数的定义:设函数y=f(x)在x0的某临域有定义,若极限lim△x→0x0+△x△xy=f(x)在x_0 的某临域有定义,若极限\lim\limits_{△x \to 0}{x_0+△x \over △x}y=f(x)在x0的某临域有定义,若极限△x→0lim△xx0+△x
==注:== 这里三个△x必须都要一样
曲线上任意一点处的切线斜率等于该点的横坐标的平方,且曲线过坐标的原点,求曲线的方程
微分方程的定义:含有未知函数其导数或微分的方程,称之为微分方程
微分方程通过积分来求解
方程的阶:含有未知函数导数方程中其导数的最高阶数