http://github.com/Hagb/docker-easyconnect
用途:
利用xshell7连接服务器
步骤:
服务器配置docker
yum命令输入后无效请自行搜索安装yum
安装docker
yum install -y docker
启动docker
systemctl start docker
docker开机自启动
systemctl enable docker
安装easyconnect命令版
参数解释
-p 0.0.0.0:1080:1080
-p 0.0.0.0:8888:8888
http代理端口 :0.0.0.0设置所有用户可以连接使用代理,第一个8888为docker对外暴露的端口(可更改,但要保证该端口未被占用),第二个8888不可更改
-e EC_VER=7.6.8
-d 58.246.161.76
-u username
-p password
-e SOCKS_USER="user"
-e SOCKS_PASSWD="123456"
自己根据需求进行更改参数,以下命令二选一输入。
学号和密码必须修改成自己的
代理连接需要验证
docker run --cap-add NET_ADMIN --device /dev/net/tun -ti -p 0.0.0.0:1080:1080 -p 0.0.0.0:8888:8888 -e EC_VER=7.6.8 -e CLI_OPTS="-d 58.246.161.76 -u username -p password" -e SOCKS_USER="user" -e SOCKS_PASSWD="123456" hagb/docker-easyconnect:cli
代理连接不用验证
docker run --cap-add NET_ADMIN --device /dev/net/tun -ti -p 0.0.0.0:1080:1080 -p 0.0.0.0:8888:8888 -e EC_VER=7.6.8 -e CLI_OPTS="-d 58.246.161.76 -u username -p password" hagb/docker-easyconnect:cli
输入命令后,出现如下即代表vpn登录成功
打开云服务器的防火墙端口1080和8888(或者自己更改的端口)
测试代理连接
打开电脑版腾讯qq,点开设置,选择代理类型(SOCKS5或者HTTP),填入自己云服务器IP,端口号(docker对外暴露的端口),设置了验证则输入用户名和密码,没有则不填
若命令中仅修改了学号和用户名,则socks5代理的端口为1080,http代理的端口为8888
若命令中设置了用户名和密码验证,则用户名为user,密码为123456
测试结果如下则表示代理设置成功,后续自己给浏览器安装扩展插件进行设置代理访问学校内网网站,就不再需要打开easyconnect了。
浏览器扩展推荐
Microsoft Edge: Proxy SwitchyOmega(HTTP)
Firefox: FoxyProxy
若一个K的V很大,则可能对Redis产生明显的性能影响。因为Redis是单线程模型,对于大K进行查询或删除,可能会导致Redis阻塞。 那我们开发时应该如何查询Redis中的大K,以及如何在设计上实现大K的拆分呢,即如何优化?单K存储的V很大需要整存整取的K将对象分拆成几个K.V,使用multiGet获取值。拆分旨在降低单次I/O操作的压力,将压力平摊到多个Redis实例,降低对单个redis的I/O影响。该对象每次只需要存取部分数据类似上一种方案,拆分成几个K.V;也可将这个大对象存储在一个hash,每个field代表一个具体属性hget、hmget获取部分Vhset,hmset更新部分属性集群存储了大量K若K过多,会带来更多内存空间占用:K本身的空间占用 每个K都会有一个前缀集群模式中,服务端需要建立一些slot2key的映射关系 这其中的指针占用在K多时,也是空间的巨大浪费如上方面在K达到上亿量级时消耗内存很严重。所以减少K的个数,即可减少内存消耗,可考虑转Hash结构存储,即原先是使用String存储的,现在改为将多个key存储在一个Hash。key本身具备强相关性比如多个K代
作者:lzg9527 https://juejin.cn/post/6914092198170460168最近收到测试人员的反馈说我们开发的页面偶现卡死,点击无反应的情况,特别是打开页面较久的时候发生概率较高。打开任务管理器,看到内存占有率已经很高了,初步判断可能存在内存泄漏的情况。下面排查内存泄漏的原因。系统进程不再用到的内存,没有及时释放,就叫做内存泄漏(memoryleak)。当内存占用越来越高,轻则影响系统性能,重则导致进程崩溃。Chrome限制了浏览器所能使用的内存极限(64位为1.4GB,32位为1.0GB)引起内存泄漏的原因意外的全局变量由于js对未声明变量的处理方式是在全局对象上创建该变量的引用。如果在浏览器中,全局对象就是window对象。变量在窗口关闭或重新刷新页面之前都不会被释放,如果未声明的变量缓存大量的数据,就会导致内存泄露。未声明变量functionfn(){ a='globalvariable' } fn() 复制使用this创建的变量(this的指向是window)。functionfn(){ this.a='globalv
1.前言无论2D相机还是3D相机,提到相机不可避免地涉及到机器视觉。机器视觉与计算机视觉并没有一个明显的定义去划分。但在实际应用中,应用于工业检测的时候更多地被称为机器视觉而非计算机视觉。这时候,机器视觉更多地偏向或者专指以图像传感器为采集软件,辅助以光源,PLC甚至机器人等外部设备,以实现特定的检测或定位等特定目的。如果你从事的是机器视觉行业则避免不了PCL,机器人,编码器,光栅尺,光源,镜头等这些图像之外的硬件设备打交道。另外还有一些领域,图像识别,物体检测和跟踪,自动文档分析,面部检测和识别,计算摄影,增强现实,3D重建以及医学图像处理等也会被称为机器视觉。这篇文章所讲述的内容更多地以工业检测领域的机器视觉的角度出发。2.2D视觉回顾在以往的机器视觉领域通常是指2D的视觉系统即通过摄像头拍到一个平面的照片然后通过图像分析或比对来识别物体,从而应用缺陷、瑕疵,位置、OCR,条形码等。以2D视觉检测为例,一个典型的基于2D相机的机器视觉检测系统通常如下组成:机器视觉系统组成其中,属于视觉部分的部件主要有:相机,镜头,光源,采集卡。在机器视觉领域,每一个部件都是一门学问,例如对光源的选
一、帧中继技术1.帧中继是什么帧中继协议是在第二层建立虚拟电路,它用帧方式来承载数据业务,因此第三层就被简化了。 2.特点(1)无流量控制它比HDLC(高级数据链路控制)简单,只做检错,不重传,没有滑动窗口式的流控,只有拥塞控制。 把复杂的检错丢给高层去处理。 (2)面向连接帧中继通过PVC和SVC向用户提供通讯服务,这是一种面向连接的服务。 (3)按需提供带宽、适应突发式业务帧在传输过程中要进行流量整形技术来实现端速率的匹配。 通过BECN-后向显示堵塞的通告、FECN-前向显示堵塞的通告、CIR-承诺传输率、BC-数据平均传输率这几个参数参数来实现流量整形。因此,可以实现按需提供带宽,也可以适用突发式的业务。 (4)帧长可变在帧中继中,其帧长可变,最大帧长可以达到1008Byte。 二、ATM技术1.ATM业务ATM网络中传送的信息分为下面几种类型: 恒定比特率(CBR,ConstantBitRate)可变比特率(VBR,VariableBitRate)有效比特率(ABR,BitRate)未指定比特率(UBR,UnspecifiedBitRate)保证帧速率(GFR,Guarant
以及为什么鸟类的声音检测对我们环境的未来如此重要介绍你听说过自动语音识别,你听说过音乐标签和生成,但是你听说过鸟的声音检测吗?大约在一年前,在我高二的时候,我第一次听到这种音频深度学习的用例。事实上,鸟音频检测是我做深度学习和计算机科学的第一个项目。我参与了一个研究项目,在北阿拉斯加的郊区用纯粹的声音来探测鸟类的存在。跳入其中,鸟的音频检测出现了这样一个利基(有利可图的形式),在本文中,我将向您展示如何在BirdVox-70k数据集上使用一个简单的卷积神经网络(CNN)来实现这一点。为什么鸟类的声音检测很重要呢?多年来,鸟类音频检测应用中深度学习模型的使用一直在不断发展进步,这也是一些人对此非常感兴趣的原因。首先,鸟类移动速度快,体型小,已经很难追踪。此外,不同种类的鸟都有自己独特的发声方式,这使得鸟类通过声音和听觉来检测比通过视觉来检测更加可取。最后,由于鸟类是生态系统的一部分,它们的存在和迁徙模式往往是任何特定地区环境健康的警示信号。那么,为什么不录制一段音频,然后发送给人类稍后再听呢?手动标记音频是昂贵的,乏味的,而且可能不接近实时。所以,这就是深度学习和cnn发挥作用的地方。如
目录1、习题8:打印,打印2、习题9:打印,打印,打印3、习题10:那是什么?3.1、转义序列:4、习题总结:1、习题8:打印,打印学习目标:继续学习%r的格式化输出。习题八中的练习代码是:#!-*-coding=utf-8-*- formatter="%r%r%r%r%r" printformatter%(1,"hello",[1,2,3],(1,2,3),{"name":"jack"}) printformatter%("one","two","three","four","five") printformatter%(True,False,True,False,False) printformatter%( "Ihadthisthing.", "Thatyoucouldtypeupright.", "Butitdidn'tsing.&
源码看之前的问题racecondition如何避免?工作流程是怎么样的?使用什么方式实现的?使用到的其他类说明和资料LockSupport简要说明在AbstractQueuedSynchronizer中使用LockSupport类来实现线程的挂起和唤醒,对应方法分别我park和unpark,内部实现原理是代理给了unsafe包的park和unpark为何使用park和unparkThread中提供了suspend和resume两个方法,不过这两个方法有很重大的缺陷,就是在suspend之前调用了resume,resume操作时没有任何作用的,线程会一直挂起再也得不到运行,目前这两个方法已经不建议使用。park会阻塞线程直到unpark调用,但unpark操作不依赖于park,在调用park之前调用了unpark对线程一样有效(park之前检查unpark状态应该是),而且多次调用unpark只对后面的一次park起作用。由于前面遗留的unpark操作影响,调用park后可能会立即返回。不过下一次park又会继续阻塞等待unpark。其次park还支持超时,获取锁时的超时策略就依赖于它。
由于微信小程序wx.navigateBack方法并不支持返回传值,导致页面在返回后,不能方便地即时更新数据。一.需求分析 此类需求大概意思是:A页面进入B页面,B页面返回并传值给A或在B页面触发事件时,A页面也有事件触发改变。业务分析普遍方法为: 第一种:利用微信的wx.setStorage,将数据缓存在小程序实例内。从B页面返回A页面时,B页面先将数据缓存;然后在A页面的onshow方法里,调用wx.getStorage读取缓存来实现。但为日后维护带来大量隐患。(用全局变量方法类似)第二种:获取前一个page实例的方法,也可以实现此功能。部分代码如下:varpages=getCurrentPages(); varcurrPage=pages[pages.length-1];//当前页面 varprevPage=pages[pages.length-2];//上一个页面 //直接调用上一个页面的setData()方法,把数据存到上一个页面中去 prevPage.setData({ mdata:1 })复制这种方法的弊端:因为进入B页面的入口可能是很多个。这样做,可能会导致获取到的页面
随着科技的发展,拥有高容量、高速度和多样性的大数据已经成为当今时代的主题词。数据科学领域中所采用的机器学习编程语言大相径庭。究竟哪种语言最适合机器学习成为争论不休的话题。近日,密西根州立大学的博士生SebastianRaschka再次发起了机器学习编程语言之争,分析了自己选择Python的原因。目前,机器学习牵涉的编程语言十分多样,包括了MATLAB、Julia、R、Perl、Python、Ruby等等。首先,Raschka定义了语言好坏的原则:一门好的语言应该使得编写、调试和执行代码的总时间最短。然后,他花大篇幅讲述了一个简单的道理——没有一门语言是对所有情况、所有人都十分适合的。RobertoWaltman:“在这种唯一正确的方式下,面向对象的Spaghetticode就是Lasagnacode。”针对具体的应用场景以及参与项目的人员,开发团队或个人要对任务需求进行评估,再结合人员对于各个语言的熟悉程度和语言生态环境的情况等等,作出选择。接下来,Raschka开始正式点评各个语言相对与Python在机器学习时的优缺点。 表现平平的MATLAB作为机器学习、模式识别等方面经常使用的
1//异常类 2packagest; 3publicclassexample_1 4{ 5publicstaticvoidmain(Stringargs[]) 6{ 7intn=0,m=0,t=1000; 8try 9{ 10m=Integer.parseInt("8888"); 11n=Integer.parseInt("ab89"); 12t=7777;//t没有机会被赋值 13} 14catch(NumberFormatExceptione) 15{ 16System.out.println("发生异常:"+e.getMessage()); 17} 18System.out.println("n="+n+",m="+m+",t="+t); 19try 20{ 21System.out.println("故意抛出I/O异常!"); 22thrownewjava.io.IOException("我是故意的");//故意抛出异常
作为葡萄城内训课程之一,由葡萄城内部IT支持系统项目经理Leo为我们带来的《整洁代码之道》将为大家详细讲述代码整洁对于软件质量的重要意义,同时会介绍一些方法,帮助大家识别代码坏味道,让我们的代码保持干净、整洁、易于维护。 该课程从坏代码的经典范例出发,为大家总结归纳了优化代码的流程与具体方法。 我们都说好的代码是“优质资产”,而坏代码则是“账户负债”。 在写代码的过程中,我们图一时轻松,用各种长长的if语句、与非嵌套、循环嵌套省脑省力。但一出问题,后期维护和修改,就会成为难题,正所谓“欠债一时爽,维护火葬场”。 各种代码维护的段子,也成为经典笑谈。如果我们将软件产品看做冰山,用户可以感知的部分可能只占整体的10%左右,而冰山之下作为支撑的部分,几乎占了90%,这不为人见的部分就是软件的内部质量。 对于程序员来说,写出并维护这90%部分的质量,重要性不言而喻。 而代码整洁就承担了这一重任。许多刚入门的编程新手,往往在刚开始会认为编程就是机械性的劳动,被“码农”二字所欺,殊不知“自我重复”就是踏上编程歪路的邪恶源头;或者是为了炫技,写出一些难懂的内容,成为当代编程版“有字天书”。为了保持良
如何在nRFConnectSDK(NCS)中实现蓝牙空中升级?MCUboot和B0两个Bootloader有什么区别?MCUboot升级使用的image格式是怎么样的?什么是SMP协议?CBOR编码如何解读?NCS可不可以进行单bank升级?可不可以把一个nRF5SDK应用升级到NCS应用?MCUboot拷贝操作中的swap和overwrite有什么区别?为什么说MCUboot升级永远都不可能变砖?本文将对以上问题进行阐述。 目录 1.概述 2.NCS中的Bootloader 2.1nRF5SDKBootloader 2.2MCUboot 2.3B0,亦称nRFSecureImmutableBootloader(NSIB) 3.DFU协议 3.1概述 3.2SMPDFU协议 3.2.1SMP包头和命令 3.2.2SMP包payload和CBOR编码 3.2.3SMP包详细解析示例 3.2.4SMPDFU流程 3.3nrfdfu协议 4.NCSDFU升级步骤说明 4.1SMPDFU升级步骤说明 4.2nrf_dfu升级步骤说
问题 IDEA打印太多的DEBUG日志,看起来很烦,有没有办法隐藏日志? 网上找了一圈,没有谁写的靠谱的,也是无语了。 网上的方案基本上只有两种: 1、添加log4j.properties 2、spring-boot项目使用【EditConfiguration】来修改配置 这两种都有很大的局限性。 那是否有一劳永逸的办法呢?答案是有的。 解决 现在玩IDEA的人,没有不装GrepConsole插件的吧,如果没装的话,建议你装一个。 GrepConsole本身并没有哪个按钮是可以直接禁止显示DEBUG日志的,但是它有更好的功能,那就是过滤器。 打开菜单:【File】-【Setting】-【OtherSettings】-【GrepConsole】 这个中间有一块设置【Filtering】,默认是没有勾选的,把它勾选上 然后修改正则表达式【Expression】,匹配DEBUG就行,.*DEBUG.* 动作【Action】选择 REMOVE或者REMOVE_UNLESS_PREVIOUSLY_MATCHED都可以 别的选项用默认值就
二进制的定义 初次接触二进制,你可能会觉得发明二进制的人思路轻奇:为什么要多此一举地用这种方式来表达数字呢?事实上计算机不像我们这样智能,CPU是一个包含上亿个精巧的晶体管的芯片集合,晶体管表达“感情”的方式很简单,就是通过高低电压(有电没电),低电压的时候表示0,高电压的时候表示1,因此最终能让计算机理解的就只有0和1而已。 接下来,我们来认识一下原码、反码、补码以及移码—— 基本概念 原码 原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。 比如如果是8位二进制:[+1]原=00000001[-1]原=10000001因为第一位是符号位,所以8位二进制数的取值范围就是:[11111111,01111111]转为十进制就是:[-127,127] 反码 反码的表示方法是:1>正数的反码是其本身2>负数的反码是在其原码的基础上,符号位不变,其余各个位取反. [+1]=[00000001]原=[00000001]反[-1]=[10000001]原=[11111110]反 补码 补码的表示方法是:1>正数的补码就是其本身2>负数的补码是在其原码的基
现在平时用的都是SVN,感觉还是挺好用的。就是有的时候解决冲突的时候有点麻烦。但这样也是不可避免的。 今天看来下GIT,同样是版本控制,GIT的原理,和SVN还是不一样的。我个人的理解,SVN是对每个文件的前后版本进行比较。而GIT是对整体进行比较。 SVN每次提交都检查文件是否发生变化,如果变化,如果不冲突,则合并。如果冲突,则需要用户解决冲突。需要注意到是,SVN管理的版本,都集中在服务器上。而客户端并不能保证一定是最新的。 。 GIT的则是分布式的版本控制工具。每次更新的时候,都会将服务器上的最新版本都COPY到本地。这样即使服务器挂掉,也可以保证本地版本是最新的。 另外GIT在提交的时候,显示提交到本地,如果需要提交到服务器,可以再提交到后台。 G
mysql官网下载慢,可以替换国内的yum源。 网易: Centos5:http://mirrors.163.com/.help/CentOS5-Base-163.repo Centos6:http://mirrors.163.com/.help/CentOS6-Base-163.repo Centos7:http://mirrors.163.com/.help/CentOS7-Base-163.repo 中科大的yum源: Centos5:https://lug.ustc.edu.cn/wiki/_export/code/mirrors/help/centos?codeblock=1 Centos6:https://lug.ustc.edu.cn/wiki/_export/code/mirrors/help/centos?codeblock=2 Centos7:https://lug.ustc.edu.cn/wiki/_export/code/mirrors/help/centos?codeblock=3 sohu的yum源: http://mirrors.sohu.com/he
介绍 这是很久之前的一个项目了,最近刚好有些时间,就来总结一下吧! 推荐初步熟悉项目后阅读本文:https://gitee.com/smalldyy/easy-msg-cpp 从何而来 这要从我从事Qt开发的那些日子说起了,项目说大不大,说小也不小,人倒是一茬又一茬,需求也换了又换,后来的事情大家都懂了,项目变成了一坨浓Shit,且不说其中的设计、构架、以及需求问题,单说说我对这个项目的直观感受,在我看来,整个程序仿佛一颗大树,从某点作为根然后一直向上延伸,在没有足够时间重构的情况下,它的层级越来越深,这时候问题来了,如果想让树木的两个不同分支的叶子节点发生关系,事情就马上会变得十分痛苦! 这两个想要联系的对象根本不再一个地方,我可能要将其中一个对象的指针在这颗大树的节点上倒退3层然后再前进2层才能让他们见面,然后暗戳戳的写下一个connect。 这时候我就想,如果有一个专门的通信组件负责传递各种消息,让两个对象中间产生一个媒介作为他们通信的桥梁,获取这件事情就会变得更加轻松了,我不用再费尽心思的将两个对象引用到同一个作用域,甚至还要考虑哪个作用域更加合理。 诚然,如果在前期就对项目的
#include<bits/stdc++.h> usingnamespacestd; #defineintlonglong constintMAXN=2e5+2333; intn,w[MAXN],d[MAXN]; intsum[MAXN],pre[MAXN],dis[MAXN]; intf[3][MAXN],g[3][MAXN]; inthead=1,tail=1,q[MAXN]; intread(){ intx=0,f=1;charch=getchar(); while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();} while(isdigit(ch))x=x*10+ch-48,ch=getchar(); returnx*f; } intslope(intj,intk){ return(g[1][j]-g[1][k])/(pre[j]-pre[k]); } signedmain(){ n=read(); for(inti=1;i<=n;i++){ w[i]=read(),d[i]=read(); dis[i+1]=d
HacksudoFOG 识别目标主机IP地址 ┌──(kali㉿kali)-[~/Vulnhub/Hacksudo_FOG] └─$sudonetdiscover-ieth1 Currentlyscanning:192.168.83.0/16|ScreenView:UniqueHosts 3CapturedARPReq/Reppackets,from3hosts.Totalsize:180 _____________________________________________________________________________ IPAtMACAddressCountLenMACVendor/Hostname ----------------------------------------------------------------------------- 192.168.56.10a:00:27:00:00:0a160Unknownvendor 192.168.56.10008:00:27:ec:15:1e160PCSSystemtechnikGmbH 192
1.首先安装JAVA环境 2.下载链接 wgethttps://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.2.deb wgethttps://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.2-amd64.deb dpkg -i elasticsearch-6.3.2.deb 安装完成后,打开/etc/elasticsearch/elasticsearch.yml并编辑此行: network.host: 0.0.0.0全部端口可以访问 修改config/jvm.options文件 说明:我们上一步修改了network.host,在Elasticsearch中有一个规则,如果network.host的值不是localhost或127.0.0.1的话就会认为这是正式环境,会对环境要求较高,我们测试环境不一定能满足,一般需要2处配置