Loading
首页
文章分类
技术教程
知识积累
新闻日报
知识分享
今日新闻
其他页面
网站统计
友情链接
高清壁纸
虎牙直播
关于轩灵
热门文章
VS2019避免全部安装至C盘
2023-04月17号更新v2
中兴F450光猫破解隐藏模式让路由器拨号
影子系统出现BAD_SYSTEM_CONFIG_INFO蓝屏问题
WPS专业版密钥经常提示过期解决方案
标签搜索
windows
linux
python
centos
centos7
网络技术
android
win11
windows 11
游戏
系统重装
Deepseek
ai
安卓
系统
Ubuntu
docker
windows server
vmware
esxi
发布
登录
注册
找到
116
篇与
分享
相关的结果
- 第 14 页
2018-09-20
【机械师】重装系统教程
一、 教程: 1. 机械师官方—搞机作战室提供: 详情参见:群文件 四、收货 优化 重装系统 3.机油宝典.word 复制以下链接,用迅雷、QQ旋风打开、下载: 1. win10 1709 ed2k://|file|cn_windows_10_multi-edition_vl_version_1709_updated_nov_2017_x64_dvd_100289920.iso|4866635776|5CE8ED3BDDB548C9AB82F56A9B796307|/ 2. win10 1803 ed2k://|file|cn_windows_10_business_editions_version_1803_updated_march_2018_x64_dvd_12063730.iso|4634574848|5674B3586C866EB2F47D7736A1FDE27A|/ PS:下载成功后,按机油宝典流程去做即可。 二、 感谢群里唯一最好的大可爱提供制作: 机械师笔记本电脑系统安装优化总目录文件 网址: 点此进入总目录 这里再次感谢大可爱 本文转自机械师俱乐部贴吧群
默认分类
分享
# windows
轩灵
2018-09-20
0
1,306
107
2018-08-14
【JVM】JAVA垃圾回收算法与垃圾回收器
Java中的垃圾回收一般是在Java堆中进行,因为堆中几乎存放了Java中所有的对象实例。谈到Java堆中的垃圾回收,自然要谈到引用。在JDK1.2之前,Java中的引用定义很很纯粹:如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。但在JDK1.2之后,Java对引用的概念进行了扩充,将其分为强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)四种,引用强度依次减弱。 强引用:如“Object obj = new Object()”,这类引用是Java程序中最普遍的。只要强引用还存在,垃圾收集器就永远不会回收掉被引用的对象。 软引用:它用来描述一些可能还有用,但并非必须的对象。在系统内存不够用时,这类引用关联的对象将被垃圾收集器回收。JDK1.2之后提供了SoftReference类来实现软引用。 弱引用:它也是用来描述非需对象的,但它的强度比软引用更弱些,被弱引用关联的对象只能生存岛下一次垃圾收集发生之前。当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。在JDK1.2之后,提供了WeakReference类来实现弱引用。 虚引用:最弱的一种引用关系,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例。为一个对象设置虚引用关联的唯一目的是希望能在这个对象被收集器回收时收到一个系统通知。JDK1.2之后提供了PhantomReference类来实现虚引用。垃圾对象的判定 Java堆中存放着几乎所有的对象实例,垃圾收集器对堆中的对象进行回收前,要先确定这些对象是否还有用,判定对象是否为垃圾对象有如下算法: 引用计数算法 给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1,当引用失效时,计数器值就减1,任何时刻计数器都为0的对象就是不可能再被使用的。 引用计数算法的实现简单,判定效率也很高,在大部分情况下它都是一个不错的选择,当Java语言并没有选择这种算法来进行垃圾回收,主要原因是它很难解决对象之间的相互循环引用问题。 根搜索算法 Java和C#中都是采用根搜索算法来判定对象是否存活的。这种算法的基本思路是通过一系列名为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,就证明此对象是不可用的。在Java语言里,可作为GC Roots的兑现包括下面几种: 虚拟机栈(栈帧中的本地变量表)中引用的对象。 方法区中的类静态属性引用的对象。 方法区中的常量引用的对象。 本地方法栈中JNI(Native方法)的引用对象。 实际上,在根搜索算法中,要真正宣告一个对象死亡,至少要经历两次标记过程:如果对象在进行根搜索后发现没有与GC Roots相连接的引用链,那它会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行finalize()方法。当对象没有覆盖finalize()方法,或finalize()方法已经被虚拟机调用过,虚拟机将这两种情况都视为没有必要执行。如果该对象被判定为有必要执行finalize()方法,那么这个对象将会被放置在一个名为F-Queue队列中,并在稍后由一条由虚拟机自动建立的、低优先级的Finalizer线程去执行finalize()方法。finalize()方法是对象逃脱死亡命运的最后一次机会(因为一个对象的finalize()方法最多只会被系统自动调用一次),稍后GC将对F-Queue中的对象进行第二次小规模的标记,如果要在finalize()方法中成功拯救自己,只要在finalize()方法中让该对象重引用链上的任何一个对象建立关联即可。而如果对象这时还没有关联到任何链上的引用,那它就会被回收掉。 垃圾收集算法 判定除了垃圾对象之后,便可以进行垃圾回收了。下面介绍一些垃圾收集算法,由于垃圾收集算法的实现涉及大量的程序细节,因此这里主要是阐明各算法的实现思想,而不去细论算法的具体实现。 标记—清除算法 标记—清除算法是最基础的收集算法,它分为“标记”和“清除”两个阶段:首先标记出所需回收的对象,在标记完成后统一回收掉所有被标记的对象,它的标记过程其实就是前面的根搜索算法中判定垃圾对象的标记过程。 该算法有如下缺点: 标记和清除过程的效率都不高。 标记清除后会产生大量不连续的内存碎片,空间碎片太多可能会导致,当程序在以后的运行过程中需要分配较大对象时无法找到足够的连续内存而不得不触发另一次垃圾收集动作。 复制算法 复制算法是针对标记—清除算法的缺点,在其基础上进行改进而得到的,它讲课用内存按容量分为大小相等的两块,每次只使用其中的一块,当这一块的内存用完了,就将还存活着的对象复制到另外一块内存上面,然后再把已使用过的内存空间一次清理掉。复制算法有如下优点: 每次只对一块内存进行回收,运行高效。 只需移动栈顶指针,按顺序分配内存即可,实现简单。 内存回收时不用考虑内存碎片的出现。 它的缺点是:可一次性分配的最大内存缩小了一半。 标记—整理算法 复制算法比较适合于新生代,在老年代中,对象存活率比较高,如果执行较多的复制操作,效率将会变低,所以老年代一般会选用其他算法,如标记—整理算法。该算法标记的过程与标记—清除算法中的标记过程一样,但对标记后出的垃圾对象的处理情况有所不同,它不是直接对可回收对象进行清理,而是让所有的对象都向一端移动,然后直接清理掉端边界以外的内存。 分代收集 当前商业虚拟机的垃圾收集 都采用分代收集,它根据对象的存活周期的不同将内存划分为几块,一般是把Java堆分为新生代和老年代。在新生代中,每次垃圾收集时都会发现有大量对象死去,只有少量存活,因此可选用复制算法来完成收集,而老年代中因为对象存活率高、没有额外空间对它进行分配担保,就必须使用标记—清除算法或标记—整理算法来进行回收。 垃圾收集器 垃圾收集器是内存回收算法的具体实现,Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同厂商、不同版本的虚拟机所提供的垃圾收集器都可能会有很大的差别。Sun HotSpot虚拟机1.6版包含了如下收集器:Serial、ParNew、Parallel Scavenge、CMS、Serial Old、Parallel Old。这些收集器以不同的组合形式配合工作来完成不同分代区的垃圾收集工作。 垃圾回收分析 在用代码分析之前,我们对内存的分配策略明确以下三点: 对象优先在Eden分配。 大对象直接进入老年代。 长期存活的对象将进入老年代。 对垃圾回收策略说明以下两点: 新生代GC(Minor GC):发生在新生代的垃圾收集动作,因为Java对象大多都具有朝生夕灭的特性,因此Minor GC非常频繁,一般回收速度也比较快。 老年代GC(Major GC/Full GC):发生在老年代的GC,出现了Major GC,经常会伴随至少一次Minor GC。由于老年代中的对象生命周期比较长,因此Major GC并不频繁,一般都是等待老年代满了后才进行Full GC,而且其速度一般会比Minor GC慢10倍以上。另外,如果分配了Direct Memory,在老年代中进行Full GC时,会顺便清理掉Direct Memory中的废弃对象。 下面我们来看如下代码: ```git public class SlotGc{ public static void main(String[] args){ byte[] holder = new byte[32*1024*1024]; System.gc(); } } ``` 代码很简单,就是向内存中填充了32MB的数据,然后通过虚拟机进行垃圾收集。在Javac编译后,我们执行如下指令:java -verbose:gc SlotGc来查看垃圾收集的结果,得到如下输出信息: ```git [GC 208K->134K(5056K), 0.0017306 secs] [Full GC 134K->134K(5056K), 0.0121194 secs] [Full GC 32902K->32902K(37828K), 0.0094149 sec ``` 注意第三行,“->”之前的数据表示垃圾回收前堆中存活对象所占用的内存大小,“->”之后的数据表示垃圾回收堆中存活对象所占用的内存大小,括号中的数据表示堆内存的总容量,0.0094149 sec 表示垃圾回收所用的时间。 从结果中可以看出,System.gc(()运行后并没有回收掉这32MB的内存,这应该是意料之中的结果,因为变量holder还处在作用域内,虚拟机自然不会回收掉holder引用的对象所占用的内存。 我们把代码修改如下: ```git public class SlotGc{ public static void main(String[] args){ { byte[] holder = new byte[32*1024*1024]; } System.gc(); } } ``` 加入花括号后,holder的作用域被限制在了花括号之内,因此,在执行System.gc()时,holder引用已经不能再被访问,逻辑上来讲,这次应该会回收掉holder引用的对象所占的内存。但查看垃圾回收情况时,输出信息如下: ```git [GC 208K->134K(5056K), 0.0017100 secs] [Full GC 134K->134K(5056K), 0.0125887 secs] [Full GC 32902K->32902K(37828K), 0.0089226 secs] ``` 很明显,这32MB的数据并没有被回收。下面我们再做如下修改: ```git public class SlotGc{ public static void main(String[] args){ { byte[] holder = new byte[32*1024*1024]; holder = null; } System.gc(); } } ``` 这次得到的垃圾回收信息如下: ```git [GC 208K->134K(5056K), 0.0017194 secs] [Full GC 134K->134K(5056K), 0.0124656 secs] [Full GC 32902K->134K(37828K), 0.0091637 secs] ``` 说明这次holder引用的对象所占的内存被回收了。我们慢慢来分析。 首先明确一点:holder能否被回收的根本原因是局部变量表中的Slot是否还存有关于holder数组对象的引用。 在第一次修改中,虽然在holder作用域之外进行回收,但是在此之后,没有对局部变量表的读写操作,holder所占用的Slot还没有被其他变量所复用(回忆Java内存区域与内存溢出一文中关于Slot的讲解),所以作为GC Roots一部分的局部变量表仍保持者对它的关联。这种关联没有被及时打断,因此GC收集器不会将holder引用的对象内存回收掉。 在第二次修改中,在GC收集器工作前,手动将holder设置为null值,就把holder所占用的局部变量表中的Slot清空了,因此,这次GC收集器工作时将holder之前引用的对象内存回收掉了。 当然,我们也可以用其他方法来将holder引用的对象内存回收掉,只要复用holder所占用的slot即可,比如在holder作用域之外执行一次读写操作。 为对象赋null值并不是控制变量回收的最好方法,以恰当的变量作用域来控制变量回收时间才是最优雅的解决办法。另外,赋null值的操作在经过虚拟机JIT编译器优化后会被消除掉,经过JIT编译后,System.gc()执行时就可以正确地回收掉内存,而无需赋null值。 性能调优 Java虚拟机的内存管理与垃圾收集是虚拟机结构体系中最重要的组成部分,对程序(尤其服务器端)的性能和稳定性有着非常重要的影响。性能调优需要具体情况具体分析,而且实际分析时可能需要考虑的方面很多,这里仅就一些简单常用的情况作简要介绍。 我们可以通过给Java虚拟机分配超大堆(前提是物理机的内存足够大)来提升服务器的响应速度,但分配超大堆的前提是有把握把应用程序的Full GC频率控制得足够低,因为一次Full GC的时间造成比较长时间的停顿。控制Full GC频率的关键是保证应用中绝大多数对象的生存周期不应太长,尤其不能产生批量的、生命周期长的大对象,这样才能保证老年代的稳定。 Direct Memory在堆内存外分配,而且二者均受限于物理机内存,且成负相关关系,因此分配超大堆时,如果用到了NIO机制分配使用了很多的Direct Memory,则有可能导致Direct Memory的OutOfMemoryError异常,这时可以通过-XX:MaxDirectMemorySize参数调整Direct Memory的大小。 除了Java堆和永久代以及直接内存外,还要注意下面这些区域也会占用较多的内存,这些内存的总和会受到操作系统进程最大内存的限制:1、线程堆栈:可通过-Xss调整大小,内存不足时抛出StackOverflowError(纵向无法分配,即无法分配新的栈帧)或OutOfMemoryError(横向无法分配,即无法建立新的线程)。 2、Socket缓冲区:每个Socket连接都有Receive和Send两个缓冲区,分别占用大约37KB和25KB的内存。如果无法分配,可能会抛出IOException:Too many open files异常。关于Socket缓冲区的详细介绍参见我的Java网络编程系列中深入剖析Socket的几篇文章。 3、JNI代码:如果代码中使用了JNI调用本地库,那本地库使用的内存也不在堆中。 4、虚拟机和GC:虚拟机和GC的代码执行也要消耗一定的内存。 原文出处:http://blog.csdn.net/ns_code/article/details/18076173
技术
分享
轩灵
2018-08-14
0
1,085
184
2018-07-06
浏览器播放视频绿屏解决方案
浏览器播放视频绿屏 一、此设置是针对浏览器的硬件加速导致的视频播放绿屏 图片1.png图片IE浏览器 打开ie浏览器右上角的设置(齿轮图标) 图片2.png图片 打开Internet选项 图片3.png图片 点击高级 图片4.png图片 在高级的选项中找到“加速的图形”,并将下方“使用软件呈现而不使用 gpu 呈现*” 图片5.png图片 勾选或取消“使用软件呈现而不使用GPU呈现”(默认不选状态是硬件加速的,选取后取消硬件加速)。设置完重启浏览器 图片6.png图片360安全浏览器 打开360安全浏览器,点开浏览器右上角的选项,然后选择打开“选项/设置” 图片7.png图片 在打开的“选项/设置”中选择实验室 图片8.png图片 在实验室中将“智能开启硬件加速 ”这个勾取消就是关掉硬件加速了 图片9.png图片 重启浏览器就可以了 二、其他播放视屏情况客户端的基本是关掉硬件加速就好了。其他浏览器或者客户端可以在百度上找到关闭教程。 三、部分浏览器或者客户端可以直接设置。下面两个可能是右键绿屏出现的选项: 右键点击绿屏的视频,在选择取消硬件加速。 点击设置,在Adobe Flash Player设置中,将本地存储调整为无限。
默认分类
技术
分享
知识积累
# windows
轩灵
2018-07-06
0
2,452
121
2018-05-10
sshd服务启动失败解决方案
博主最近在给客户操作系统时遇到此类情况。 重启系统后发现无法通过ssh连接,Ping服务器IP正常。 一开始怀疑是弱密码被扫了,系统文件被窜改。 于是通过物理终端进入排查时发现在启动服务时抛出以下错误信息 Starting sshd: Missing privilege separation: /var/empty/sshd [FAILED] 根据上述意思提示,检查/var/empty/sshd目录,发现该目录不存在。 于是手动mkdir创建该目录 ln -s /etc/localtime localtime 操作完成后再次尝试重启sshd服务 service sshd restart 发现sshd成功启动,ssh连接也恢复正常。 目前还不知道问题产生的原因,待后续补充~QAQ
默认分类
分享
# linux
轩灵
2018-05-10
0
1,481
129
2018-01-26
Brook - 一个跨平台(Linux/MacOS/Windows/Android/iOS)代理软件
What is Brook Brook is a cross-platform(Linux/MacOS/Windows/Android/iOS) proxy/vpn software. Brook's goal is to reduce the configuration steps. Keep it simple, stupid. Brook 是一款相当便捷的代理软件,多平台支持。 非常适合个人使用,与SS代理的区别则是新型加密更加避开GFW的追踪。 在最近的一个统计中,虽然brook的使用者比其他热门代理少,但是被Qiang的几率也小的多。 推荐个人或少部分团体使用,下面开始接受如何搭建以及推荐的一键搭建脚本。 搭建前准备:一台VPS服务器 以及一个聪明的大脑 如果搭建中提示 wget: command not found 的错误 这是你的系统精简的太干净了,wget都没有安装,所以需要安装wget。 CentOS系统: yum install –y wget Debian/Ubuntu系统: apt–get install –y wget 步骤一:下载brook 首先建立并进入文件夹(假设你当前目录是 /root ,那么 Brook的目录就是 /root/brook ): mkdir brook && cd brook 接下来获取brook的最新版本 brook_new_ver=`wget -qO- https://github.com/txthinking/brook/tags| grep "/txthinking/brook/releases/tag/"| head -n 1| awk -F 执行完后会输出获取的最新版本号,比如 v20180112 这样的日期格式,如果返回是空或者其他错误的内容,那么就代表获取失败。 如果输出失败,那就自己到 Github获取最新版本,才能继续以下步骤。手动获取到版本号 如v20180112,执行 brook_new_ver=v20180112(需要自己替换版本号)。 使用 uname -m 命令来判断VPS的位数,如果返回 x86_64 那就是64位,如果返回 i386或i686 那就是32位。 64位系统使用这个: wget –N —no–check–certificate “https://github.com/txthinking/brook/releases/download/${brook_new_ver}/brook” 32位系统使用这个: wget –N —no–check–certificate “https://github.com/txthinking/brook/releases/download/${brook_new_ver}/brook_linux_386” && mv brook_linux_386 brook 执行完上面的命令后,就已经把brook的文件下载到/root/brook文件夹中了,然后执行chmod +x brook 给予权限,然后执行mv brook /usr/bin即可。 步骤二:配置brook Run as a brook server (作为brook新版协议运行) 执行 brook server -l :9999 -p password (其中9999替换为你的端口 password替换为你的密码) Run as a brook stream server(作为brook旧版协议brook stream运行) 执行 brook streamserver -l :9999 -p password(其中9999替换为你的端口 password替换为你的密码) Run as multiple brook servers(作为多端口运行brook服务器) 执行以下代码 brook servers \ -l ":9999 password" \ -l ":8888 password" 其中8888,9999为端口号 password为密码 如果你也想作为Shadow-socks服务运行,可执行以下代码 Run as a shadow-socks server(单一端口运行) 执行brook ssserver -l :9999 -p password Run as multiple shadow-socks servers(多端口运行) brook ssservers \ -l ":9999 password" \ -l ":8888 password" 默认加密方式为aes-256-cfb 步骤三:配置防火墙 iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT iptables -I INPUT -m state --state NEW -m udp -p udp --dport 8888 -j ACCEPT 其中8888为端口号,多端口时需重复替换执行代码。 其他问题 想要加入开机自启,执行代码 cp /usr/bin/brook /etc/init.d/brook chmod +x /etc/init.d/brook chkconfig --add brook chkconfig brook on 相关客户端请从官方下载 https://github.com/txthinking/brook/releases 下面推荐个一键脚本吧,最开始我是准备自己写个。没想到在逗比那里看见了,就直接用他这个吧,很不错的哦,适合小白和懒人。原文地址:https://doub.bid/brook-jc3/ 执行下面的代码下载并运行脚本。 wget -N --no-check-certificate https://softs.fun/Bash/brook.sh && chmod +x brook.sh && bash brook.sh # 如果上面这个脚本无法下载,尝试使用备用下载: wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/brook.sh && chmod +x brook.sh && bash brook.sh 运行脚本后会出现脚本操作菜单,选择并输入 1 就会开始安装。 其他操作 启动:/etc/init.d/brook start 停止:/etc/init.d/brook stop 重启:/etc/init.d/brook restart 查看状态:/etc/init.d/brook status 安装目录:/usr/local/brook 配置文件:/usr/local/brook/brook.conf 日志文件:/usr/local/brook/brook.log(注意正常情况下,日志是不会记录使用信息的,只会记录报错)
默认分类
技术
分享
轩灵
2018-01-26
0
4,813
101
2018-01-18
宝塔安装ssrpanel前后端
记一次SSRPANEL安装方式 ssrpanel特性: 多节点账号管理面板 需配合SSR 3.4 Python版后端使用 强大的管理后台、美观的界面、简单易用的开关、支持移动端自适应 内含简单的购物、优惠券、流量兑换、邀请码、推广返利&提现、文章管理、工单等系统 节点可以分组,不同级别的用户可以看到不同级别分组的节点 SS配置转SSR配置,方便使用SS后端一键把账号转入到系统 流量日志、单机单节点日志分析功能,知道用户最近都看了哪些网站 定时任务、所有邮件投递都有记录 后台一键添加加密方式、混淆、协议 强大的后台配置功能 更多功能自己发掘 教程开始: 先搭建宝塔面板: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh进入后台安装:必须PHP7.1,其他根据自己机子决定。 1.png图片 环境搭建完成后,新建一个网站 2.png图片 3.png图片 建立完毕后 手动设置数据库 数据库名默认为ssrpanel 密码他会自己生成 可以自己设置 但是以后就不要轻易更改 接着把ssrpanel的数据库的权限设置为所有人 配置伪静态: location / { try_files $uri $uri/ /index.php$is_args$args; }4.png图片 然后到软件管理-PHP7.1-设置-禁用函数,将含有proc开头的函数都删除掉 5.png图片 安装扩展-fileinfo 6.png图片 然后重启PHP 下面就是用xshell操作 下载ssrpanel源码: cd /www/wwwroot/你添加的站点域名 git clone https://github.com/ssrpanel/ssrpanel.git tmp && mv tmp/.git . && rm -rf tmp && git reset --hard解下来就是导入数据 将db.sql导入到你设置的数据库 7.png图片 复制配置文件: cd /www/wwwroot/你添加的站点域名 cp .env.example .env修改.env中数据库相关配置 回到宝塔,设置目录 8.png图片 进入到ssrpanel目录: cd ssrpanel安装相关依赖: php composer.phar install如果出现报错信息: [ErrorException] putenv() has been disabled for security reasons 解决方案: 进入宝塔,打开当前PHP环境配置文件,寻找disable_functions字符串,将后面的putenv删除。然后修改PHP命令行版本为PHP7.1. 生成站点key: php artisan key:generate将storage目录设为www用户组 chown -R www:www storage/给storage目录设置777权限: chmod -R 777 storage/下面就是见证奇迹的时候了 默认管理账号admin密码123456 自己改 下面就是一些配置问题 添加计划任务[监控频率为1或2分钟 具体看机子情况] php /home/wwwroot/ssrpanel/artisan schedule:run >> /dev/null 2>&19.png图片 如果你需要配置发信相关的服务,就编辑站点根目录下的config/mail.php即可。支持smtp与sendmail发信~ 关于邮件配置: 修改/home/wwwroot/网站文件夹/.env文件 其他的smtp邮件服务也是一样,host、port、邮件发送地址、密码改成相应的就行了。 改完了以后别忘了在网站后台的设置→系统设置中修改网站地址为你的网站地址 接下来就讲解节点搭建: 先在后台管理添加节点详情,自己配置 10.png图片 现在回到Xshell中来安装后端程序,进入到root目录下: cd /root安装libsodium,让后端支持更多的加密方式(以下命令一个个输入): yum -y groupinstall "Development Tools" wget https://github.com/jedisct1/libsodium/releases/download/1.0.10/libsodium-1.0.10.tar.gz tar xf libsodium-1.0.10.tar.gz && cd libsodium-1.0.10 ./configure && make -j2 && make install echo /usr/local/lib > /etc/ld.so.conf.d/usr_local_lib.conf ldconfig再次回到root目录下: cd /root下载后端程序: git clone -b manyuser https://github.com/shadowsocksrr/shadowsocksr.git进入到shadowsocksr目录: cd shadowsocksr安装依赖: ./setup_cymysql.sh初始化配置文件: ./initcfg.sh修改userapiconfig.py的接口为glzjinmod vi userapiconfig.py11.png图片 修改user-config.json,将connect_verbose_info的值改为1,另外根据自己的需要修改相关的加密方式、混淆、协议等等。 vi user-config.json12.png图片 修改usermysql.json,将数据库信息改为你自己的,另外记得修改node_id的值为1: vi usermysql.json13.png图片 测试运行一下后端,看看是否正常: python server.py如图则正常: 14.png图片 按键盘组合键Ctrl+C退出,然后将后端放到后台运行: ./run.sh如果发现连接不了,就去宝塔把防火墙放行所有端口就可以了
技术
分享
# linux
轩灵
2018-01-18
0
3,236
129
2017-12-03
Linux系统下编辑文件的方法
博客停更几个月了,无心更博。 十二月了,又是新的一个月了。 前面有人反馈说那个手动搭建教程中的编辑文件的命令不会用,只会麻烦的下载到本地进行修改再上传回去。 所以今天来介绍Linux系统下的文件编辑器 1.第一种编辑模式:vi和vim编辑器 vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能。 vi编辑器支持编辑模式和命令模式,编辑模式下可以完成文本的编辑功能,命令模式下可以完成对文件的操作命令,要正确使用vi编辑器就必须熟练掌握着两种模式的切换。默认情况下,打开vi编辑器后自动进入命令模式。从编辑模式切换到命令模式使用“esc”键,从命令模式切换到编辑模式使用“A”、“a”、“O”、“o”、“I”、“i”键。 vi编辑器提供了丰富的内置命令,有些内置命令使用键盘组合键即可完成,有些内置命令则需要以冒号“:”开头输入。常用内置命令如下: Ctrl+u:向文件首翻半屏;Ctrl+d:向文件尾翻半屏; Ctrl+f:向文件尾翻一屏; Ctrl+b:向文件首翻一屏; Esc:从编辑模式切换到命令模式; ZZ:命令模式下保存当前文件所做的修改后退出vi; :行号:光标跳转到指定行的行首; :$:光标跳转到最后一行的行首; x或X:删除一个字符,x删除光标后的,而X删除光标前的; D:删除从当前光标到光标所在行尾的全部字符; dd:删除光标行正行内容; ndd:删除当前行及其后n-1行; nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字; p:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的下方; P:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的上方; /字符串:文本查找操作,用于从当前光标所在位置开始向文件尾部查找指定字符串的内容,查找的字符串会被加亮显示; ?name:文本查找操作,用于从当前光标所在位置开始向文件头部查找指定字符串的内容,查找的字符串会被加亮显示; a,bs/F/T:替换文本操作,用于在第a行到第b行之间,将F字符串换成T字符串。其中,“s/”表示进行替换操作; a:在当前字符后添加文本; A:在行末添加文本; i:在当前字符前插入文本; I:在行首插入文本; o:在当前行后面插入一空行; O:在当前行前面插入一空行; :wq:在命令模式下,执行存盘退出操作; :w:在命令模式下,执行存盘操作; :w!:在命令模式下,执行强制存盘操作; :q:在命令模式下,执行退出vi操作; :q!:在命令模式下,执行强制退出vi操作; :e文件名:在命令模式下,打开并编辑指定名称的文件; :n:在命令模式下,如果同时打开多个文件,则继续编辑下一个文件; :f:在命令模式下,用于显示当前的文件名、光标所在行的行号以及显示比例; :set number:在命令模式下,用于在最左端显示行号; :set nonumber:在命令模式下,用于在最左端不显示行号; -A --smarthome 启用智能 HOME 键 -B --backup 储存既有文件的备份 -C <目录> --backupdir=<目录> 用以储存独一备份文件的目录 -D --boldtext 用粗体替代颜色反转 -E --tabstospaces 将已输入的制表符转换为空白 -F --multibuffer 启用多重文件缓冲区功能 -H --historylog 记录与读取搜索/替换的历史字符串 -I --ignorercfiles 不要参考nanorc 文件 -K --rebindkeypad 修正数字键区按键混淆问题 -L --nonewlines 不要将换行加到文件末端 -N --noconvert 不要从 DOS/Mac 格式转换 -O --morespace 编辑时多使用一行 -Q <字符串> --quotestr=<字符串> 引用代表字符串 -R --restricted 限制模式 -S --smooth 按行滚动而不是半屏 -T <#列数> --tabsize=<#列数> 设定制表符宽度为 #列数 -U --quickblank 状态行快速闪动 -V --version 显示版本资讯并离开 -W --wordbounds 更正确地侦测单字边界 -Y <字符串> --syntax=<字符串> 用于加亮的语法定义 -c --const 持续显示游标位置 -d --rebinddelete 修正退格键/删除键混淆问题 -i --autoindent 自动缩进新行 -k --cut 从游标剪切至行尾 -l --nofollow 不要依照符号连结,而是覆盖 -m --mouse 启用鼠标功能 -o <目录> --operatingdir=<目录> 设定操作目录 -p --preserve 保留XON (^Q) 和XOFF (^S) 按键 -q --quiet 沉默忽略启动问题, 比如rc 文件错误 -r <#列数> --fill=<#列数> 设定折行宽度为 #列数 -s <程序> --speller=<程序> 启用替代的拼写检查程序 -t --tempfile 离开时自动储存,不要提示 -u --undo 允许通用撤销[试验性特性] -v --view 查看(只读)模式 -w --nowrap 不要自动换行 -x --nohelp 不要显示辅助区 -z --suspend 启用暂停功能 -$ --softwrap 启用软换行 -a, -b, -e, -f, -g, -j (忽略,为与pico 相容)
技术
分享
# linux
轩灵
2017-12-03
3
1,509
187
2017-08-29
99%的人都理解错了HTTP中GET与POST的区别
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。 当你在面试中被问到这个问题,你的内心充满了自信和喜悦。 你轻轻松松的给出了一个“标准答案”: GET在浏览器回退时是无害的,而POST会再次提交请求。 GET产生的URL地址可以被Bookmark,而POST不可以。 GET请求会被浏览器主动cache,而POST不会,除非手动设置。 GET请求只能进行url编码,而POST支持多种编码方式。 GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。 GET请求在URL中传送的参数是有长度限制的,而POST么有。 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。 GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。 GET参数通过URL传递,POST放在Request body中。 “很遗憾,这不是我们要的回答!” 请告诉我真相。。。 如果我告诉你GET和POST本质上没有区别你信吗? 让我们扒下GET和POST的外衣,坦诚相见吧! GET和POST是什么?HTTP协议中的两种发送请求的方法。 HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。 HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。 GET和POST能做的事情是一样一样的。 你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。 那么,“标准答案”里的那些区别是怎么回事? 在我大万维网世界中,TCP就像汽车,我们用TCP来运输数据,它很可靠,从来不会发生丢件少件的现象。 但是如果路上跑的全是看起来一模一样的汽车,那这个世界看起来是一团混乱,送急件的汽车可能被前面满载货物的汽车拦堵在路上,整个交通系统一定会瘫痪。为了避免这种情况发生,交通规则HTTP诞生了。 HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录。 如果是POST请求,就要在车上贴上POST的标签,并把货物放在车厢里。 当然,你也可以在GET的时候往车厢内偷偷藏点货物,但是这是很不光彩;也可以在POST的时候在车顶上也放一些数据,让人觉得傻乎乎的。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。 但是,我们只看到HTTP对GET和POST参数的传送渠道(url还是requrest body)提出了要求。“标准答案”里关于参数大小的限制又是从哪来的呢? 在我大万维网世界中,还有另一个重要的角色:运输公司。 不同的浏览器(发起http请求)和服务器(接受http请求)就是不同的运输公司。 虽然理论上,你可以在车顶上无限的堆货物(url中无限加参数)。但是运输公司可不傻,装货和卸货也是有很大成本的,他们会限制单次运输量来控制风险,数据量太大对浏览器和服务器都是很大负担。 业界不成文的规定是,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。 超过的部分,恕不处理。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略,所以,虽然GET可以带request body,也不能保证一定能被接收到哦。 好了,现在你知道,GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。 你以为本文就这么结束了? 我们的大BOSS还等着出场呢。。。 这位BOSS有多神秘?当你试图在网上找“GET和POST的区别”的时候,那些你会看到的搜索结果里,从没有提到他。他究竟是什么呢。。。 GET和POST还有一个重大区别,简单的说: GET产生一个TCP数据包;POST产生两个TCP数据包。 长的说: 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。 也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。 因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么? GET与POST都有自己的语义,不能随便混用。 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。 现在,当面试官再问你“GET与POST的区别”的时候,你的内心是不是这样的?
默认分类
技术
分享
轩灵
2017-08-29
0
782
178
上一页
1
...
13
14
15
下一页