linux查看nginx运行状态,如何查看nginx运行状态及相关属性说明

如何查看nginx运行状态及相关属性说明。 需要查看nginx是否已经加载了 http_stub_status_module模块 /usr/sbin/nginx -V 查看nginx的安装状态 nginx.conf中加入: location /status { stub_status on; access_log off; } 访问地址:http://yours/status 会看到如下信息: Active connections: 557 server accepts handled requests 36573075 36573075 43806112 Reading: 3 Writing: 16 Waiting: 538 其中: Active connections -- 对后端发起的活动连接数。 server accepts handled requests -- nginx总共处理了36573075个连接, 成功创建36573075次握手 (相等表示中间没有失败的), 总共处理了43806112个请求 (平均每次握手处理了1.2个数据请求)。 Reading -- nginx读取到客户端的Header信息数。 Writing -- nginx返回给客户端的Header信息数。 Waiting -- 开启keep-alive的情况下,这个值等于active - (reading + writing),意思就是Nginx说已经处理完正在等候下一次请求指令的驻留连接。

张适时千元级的手机测评笔记

因为看了张适时的手机测评而入手了手机没踩雷的我前来报道(哈哈哈,自我介绍有点儿长,见谅!)张适时作为专业的手机测评up主,还是挺负责的,而且他很出名啊,经常被品牌方请去发布会,看了张适时的千元级手机测评,被种草了real me的手机,价格便宜,给家里老人买了两款,方便他们平时看看电视啥的。 我买的是real me真我V13,有一说一,我真香了,具备5G双卡双待、5000mAh超大电池、4800万像素主摄等亮点配置,到手才1600不到,要啥自行车啊! 而且我同事也是看了张适时的手机测评买了真我的手机,我同事其实对手机性能的要求不是很高,聊聊微信、追追剧而已,他也不打游戏,手机拿到手和张适时测评内容别无二致,我算是他的新粉吧,不过以后会成为铁粉的,因为张适时的测评还真的很专业的!

pymol安装教程linux,PyMOL | Pymol绘图教程(一)

PyMOL PyMOL软件以Py+MOL命名:“Py”表示它是由一种计算机语言Python所衍生出来的,“MOL”表示它是用于显示分子(英文为molecule)结构的软件。为什么选择Pymol,因为它是强大的分子可视化软件,具有诸多优点: 高质量科学论文发表图形 动画制作 文档文件和会话文件并存 鼠标操作与命令行操作 免费的开放源码 缺点: 缺乏足够的文件资料 没有UNDO功能 功能不完善 PyMOL适用于创作高品质的小分子或是生物大分子(特别是蛋白质)的三维结构图像。软件的作者宣称,在所有正式发表的科学文献中的蛋白质结构图像中,有四分之一是使用PyMOL来制作。 PyMOL官网 PyMOL维基 Pymol基本操作 命令行操作 Pymol是区分大小写的,不过目前为止Pymol还是只用小写。 Pymol的命令都是由关键词(keyword)加上一些变量(argument)组成,格式如下: Pymol> keyword argument 其中关键词(keyword) 如load、 zoom、 color、 set等等, 是必须的, ; 而变量则不是必须的,比如退出命令quit就不需要附加变量: Pymol> quit 通常情况下需要加变量,当不加任何变量时, Pymol会默认一个变量all。 在Internal GUI中,我们经常要用鼠标对界面中的结构进行操作,所以我们一定要熟悉,All指所有的对象,(sele)是选择的对象按钮 A:代表对这个对象的各种action, S:显示这个对象的某种样式, H:隐藏某种样式, L:显示某种label, C:显示的颜色 对象选择 Pymol> load name.pdb, name # 载入pdb文件,并命名 Pymol> fetch object # 直接从网上下载,不用加后缀 #如果打开了多个PDB文件,想暂时关闭/打开某个对象,可以这样: Pymol> disable object-name Pymol> enable object-name #删除选定的目标或者整个对象: Pymol> delete selection-name Pymol> delete object-name 对象显示 Pymol> show representation #以不同方式显示蛋白质结构

pymol安装教程linux,Pymol安装与问题解决

Pymol是一个开放源码,由使用者赞助的分子三维结构显示软件,由Warren Lyford DeLano编写,并且由DeLano Scientific LLC负责商业发行。 Pymol被用来创作高品质的分子(特别是生物大分子如蛋白质)三维结构。据软件作者宣称,在所有正式发表的科学论文中的蛋白质结构图像中,有四分之一是使用Pymol来制作的。 Pymol名字的来源:“Py”表示该软件基于python这个计算机语言,“Mol”则是英文分子(molucule)的缩写,表示该软件用来显示分子结构。 安装方法: 1sudo apt-get install pymol 我们通过pymol命令运行,看似安装成功,但是我们打开时会终端出现: Segmentation fault 深度截图20151203010035 出现这个问题主要是栈溢出造成的,因为默认ubuntu只有8MB,所以我们需要增加栈桥大小 百度上给予了这些方法: 在/etc/profile 的最后面添加ulimit -s unlimited 保存,source /etc/profile使修改文件生效 linux查看修改线程默认栈空间大小 :ulimit -s 1、通过命令 ulimit -s 查看linux的默认栈空间大小,默认情况下 为10240 即10M 2、通过命令 ulimit -s 设置大小值 临时改变栈空间大小:ulimit -s 102400, 即修改为100M 3、可以在/etc/rc.local 内 加入 ulimit -s 102400 则可以开机就设置栈空间大小 4、在/etc/security/limits.conf 中也可以改变栈空间大小: # soft stack 102400 重新登录,执行ulimit -s 即可看到改为102400 即100M 深度截图20151203010949 最好我的方法是: 1sudo gedit /etc/profile 在最后一行增加: 1 2 3 4# add ulimit

python自然语言处理入门-词典分词

自然语言处理入门-词典分词 摘要 中文分词指的是将一段文本拆分为一系列单词的过程,这些单词顺序拼接后等于原文本。 词典分词是最简单、最常见的分词算法,仅需一部词典和一套查词典的规则即可。 给定一部词典,词典分词就是一个确定的查词与输出的规则系统。 1. 什么是词 1.1 词的定义 语言学定义:具备独立意义的最小单位。 基于词典的中文分词中的定义:词典中的字符串就是词。 1.2 词的性质——齐夫定律 齐夫定律:哈弗大学语言学家乔治 . 金斯利 . 齐夫于 1949 年发表,一个单词的词频与它的词频排名成反比。 实验:基于 MSR 语料库(微软亚洲研究院语料库)上的统计结果验证 “齐夫定律”。 [(',', 173173), ('的', 128146), ('。', 81757), ('、', 40695), ('在', 28445), ('了', 27103), ('和', 24398), ('是', 18068), ('”', 16867), ('“', 16686), ('一', 11503), ('有', 9905), ('对', 9654), ('为', 9516), ('中', 9444), ('上', 8408), ('不', 7222), ('这', 7198), ('与', 7197), ('他', 7062), ('就', 6485), ('人', 6338), ('到', 6316), ('等', 6008), (':', 5988), ('发展', 5976), ('说', 5973), ('也', 5801), ('要', 5660), ('将', 5651)]

泰坦尼克号 xgboost自定义损失 python

from sklearn.ensemble import AdaBoostClassifier, GradientBoostingRegressor, GradientBoostingClassifier, RandomForestRegressor from sklearn.metrics import recall_score, precision_score, accuracy_score, f1_score, mean_squared_error from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.tree import DecisionTreeClassifier from xgboost import XGBClassifier import xgboost as xgb import numpy as np import pandas as pd import warnings import matplotlib.pyplot as plt import matplotlib as mpl def sigmoid(x): return 1 / (1 + np.exp(-x)) # 定义f: theta * x def log_reg(y_hat, y): # 自定义损失函数,logistics回归的一阶导与二阶导 p = 1.

页面设计思路

页面设计 首先,做一个页面以及整个网站一个好的设计布局和明确的思路是很重要的,不然思路不清晰、布局不合理做出来的网站体现不出所要表达的核心内容,别人也不会选择进你这个网站浏览。我觉得一个页面的设计可以分为几点来考虑: (1)整体设计:根据所需要设计页面的效果图,对页面进行区域划分,对每个区域所占比例的计算和调整,让页面做好呈现的效果更协调,整个页面要简洁易懂,我们需要的简易而不简单,并不是胡乱加一堆花里胡哨的东西。 (2)布局设计:对页面内每块不同区域采用合适的布局方式,以此来达到页面所需要的效果。 (3)图片设计:每个人的电脑分辨率都不可能是一样的,所以对于所给图片分辨率不合适时应该对图片进行修改,让图片放进页面里所占比例及位置能恰到好处。 (4)内容设计:对于页面中所需要的文字内容进行一些修饰,让页面呈现出来的效果更能让人赏心悦目,看上去更舒适。 (5)代码设计:对于在写代码时,取名字也是很重要的一部分,因为一个网站在应用后多多少少会存在一些问题,所以就需要进行后期的维护,所以在写代码时应该更明确的对代码分区,以便后期维护时更直接的解决问题所在。

虚拟机中的ubuntu16.04如何连接网络?

刚装完ubuntu,接下来就是解决联网问题,然后在解决的过程中误入歧途,把vim和vi给卸载了,后来联网的时候需要使用vi或者vim编辑器打开/etc/network/interfaces文件编辑,此时就傻眼了,因为使用apt-get install vim 时发现没网啊,装个毛线。解决方法:重装虚拟机吧hhh。 言归正传,在有vim或者vi的条件下如何给虚拟机联网: 一、在VMware的左侧那个栏中自己当前的虚拟机上右击,你会惊奇的发现展开的列表中有一个叫设置的东西,那么打开它吧。 图1: 图2: 二、然后,在MVware中的菜单栏有一个编辑,点击一下它会展开,里边有一个虚拟网络编辑器,你应该打开它。这个进去之后先选VWnet8那个,如果选完之后你的下边的这些个选项和我的一样,那就关闭就行;多半不一样吧,这个时候,你的先点下边的 更改设置(你点完之后这个对话框突然没了,一会又回来了,如果不见弹出,不会发现win10下边的任务栏里有它,你给点一下它就又弹出来了。),然后下边的灰色会变成可选。这个时候按照我这里对应的选择完 点应用,点确认即可。 图3: 三、这个时候得改ubuntu里边的一个文件,打开终端,输入: sudo vi /etc/network/interfaces 将原来的内容改为如下: 注:vi命令,打开之后按i,就会进入编辑状态,但是这个时候你键盘的上下键不好使了,年它会疯狂的显示字母,然后你用backspace删除的时候你发现也不好使,我的天整个键盘好像不听使唤了一样,胡乱输入。 别慌,这个时候 先按一下键盘上的Esc(左上角那个,然后就会推出当前vi编辑器的编辑状态),然后按一下shift + : ,就会在编辑窗口下方出现一个冒号,这个时候键盘已经回归正常思维了,你在哪个冒号后边输入q! 这个东西,然后以回车,就回到ubuntu终端了,关于vi的第一次尝试完成了,但是文件改没改好呢。那就再试一次呗。 按键盘那个上箭头,你会发现那条命令又回来了,回车一下又进去了,你会看到里边的内容没有被改动: 1.首先按键盘的上下左右键把光标调整到要修改的位置,然后按一下i,这个时候vi进入到可编辑状态,写需要编辑的内容,写错了删除时用Delete那个键,如果要删除某一行你就双击一下键盘上那个D键,就删除了。 2.当一个位置写完之后,要去另一个地方,你先按一下Esc,这个时候退出vi编辑状态,你就可以使用上下左右键跳到你要编辑的下一个地方。 3.当编辑完成后,还是按一下Esc退出当前vi的编辑状态,然后Shift + :,这个时候在:后边写wq! 这个东东,然后回车就好了。 图4: 四、这个时候可能还没法联网,我们来到物理机,就是我们自己的这个win10系统中做如下操作: 第一步: 第二步: 第三步: 第四步: 这个时候按道理,已经能连上网里,不信你打开虚拟机试试。但是也有连不上的时候,比如我就是。哪里出问题了呢?这个不同的人遇到的问题可能不同,我只能带你走到这里了。我的是开启了两个服务就好使了,步骤如下: 在本地的命令提示符中输入services.msc打开服务,开启VMware NAT Service 和VMware DHCP Service 即可。

精读VueCli《1》

我们知道,vue-cli的入口文件位置是 @vue/cli/bin/vue.js,相信你已经打开了该文件,并看到了熟悉的create命令: NODE版本检查 在文件的开始处,有这么一段代码: const requiredVersion = require('../package.json').engines.node function checkNodeVersion (wanted, id) { if (!semver.satisfies(process.version, wanted, { includePrerelease: true })) { console.log(chalk.red( 'You are using Node ' + process.version + ', but this version of ' + id + ' requires Node ' + wanted + '.\nPlease upgrade your Node version.' )) process.exit(1) } } checkNodeVersion(requiredVersion, '@vue/cli') 我们不难发现,这个函数用于检查node版本是否符合要求,需要注意的是requiredVersion(node版本号要求): 该字段取自 package.json中的engines对象 engines属性是键/值对的json对象,用于表示指定应用程序应在其上运行的库和运行的版本 创建 在源码中,创建命令中引用了一个方法: require('../lib/create')(name, options) 进入create.js, 就是本章的核心了: path.relative - from 到 to 的相对路径

linux忽略写入的报错信息,linux – sort:写入失败|破管

晚上好, 以下是我在脚本中使用的一段代码.从SSH sesssion启动工作正常,但是,当它通过cron运行时,它会在屏幕上显示损坏的管道错误. 我不能通过SSH重现它. 码: IP=$(sort --random-sort /root/ips.csv | head -n 1); nc -zv -w 2 $IP 443 2>&1 | grep succeeded >> outfile 屏幕错误: sort: write failed: standard output; Broken pipe sort: write error 任何提示/指针? 谢谢! 解决方法: 当头部在处理完第一条线后完成时,它会退出,关闭管道的另一端. sort可能仍在尝试编写更多内容,写入已关闭的管道或套接字会返回EPIPE错误.但它也会引发SIGPIPE信号,从而导致进程无效,除非忽略或处理信号.忽略信号后,sort会看到错误,抱怨和退出.但是如果信号没有被忽略,它就会死掉,而不会留下错误信息. 忽略信号会继承到子进程,因此我们可以从shell控制它: $ trap - PIPE # set default action for signal $sort bigfile | head -1 > /dev/null # no error message $trap "" PIPE # ignore the signal

综合型RSA题目

[De1CTF2019]babyrsa 源码如下解题首先看到第一种再看第二种再看第三种终于来到了最后一步了 赶紧冲几道密码题,希望比赛的时候不会爆0,记录一下一道比较综合的rsa密码题目 源码如下 import binascii from data import e1,e2,p,q1p,q1q,hint,flag n = [20129615352491765499340112943188317180548761597861300847305827141510465619670536844634558246439230371658836928103063432870245707180355907194284861510906071265352409579441048101084995923962148527097370705452070577098780246282820065573711015664291991372085157016901209114191068574208680397710042842835940428451949500607613634682684113208766694028789275748528254287705759528498986306494267817198340658241873024800336013946294891687591013414935237821291805123285905335762719823771647853378892868896078424572232934360940672962436849523915563328779942134504499568866135266628078485232098208237036724121481835035731201383423L, 31221650155627849964466413749414700613823841060149524451234901677160009099014018926581094879840097248543411980533066831976617023676225625067854003317018794041723612556008471579060428898117790587991055681380408263382761841625714415879087478072771968160384909919958010983669368360788505288855946124159513118847747998656422521414980295212646675850690937883764000571667574381419144372824211798018586804674824564606122592483286575800685232128273820087791811663878057827386379787882962763290066072231248814920468264741654086011072638211075445447843691049847262485759393290853117072868406861840793895816215956869523289231421L, 29944537515397953361520922774124192605524711306753835303703478890414163510777460559798334313021216389356251874917792007638299225821018849648520673813786772452822809546571129816310207232883239771324122884804993418958309460009406342872173189008449237959577469114158991202433476710581356243815713762802478454390273808377430685157110095496727966308001254107517967559384019734279861840997239176254236069001453544559786063915970071130087811123912044312219535513880663913831358790376650439083660611831156205113873793106880255882114422025746986403355066996567909581710647746463994280444700922867397754748628425967488232530303L, 25703437855600135215185778453583925446912731661604054184163883272265503323016295700357253105301146726667897497435532579974951478354570415554221401778536104737296154316056314039449116386494323668483749833147800557403368489542273169489080222009368903993658498263905567516798684211462607069796613434661148186901892016282065916190920443378756167250809872483501712225782004396969996983057423942607174314132598421269169722518224478248836881076484639837343079324636997145199835034833367743079935361276149990997875905313642775214486046381368619638551892292787783137622261433528915269333426768947358552919740901860982679180791L] c = [19131432661217908470262338421299691998526157790583544156741981238822158563988520225986915234570037383888112724408392918113942721994125505014727545946133307329781747600302829588248042922635714391033431930411180545085316438084317927348705241927570432757892985091396044950085462429575440060652967253845041398399648442340042970814415571904057667028157512971079384601724816308078631844480110201787343583073815186771790477712040051157180318804422120472007636722063989315320863580631330647116993819777750684150950416298085261478841177681677867236865666207391847046483954029213495373613490690687473081930148461830425717614569L, 15341898433226638235160072029875733826956799982958107910250055958334922460202554924743144122170018355117452459472017133614642242411479849369061482860570279863692425621526056862808425135267608544855833358314071200687340442512856575278712986641573012456729402660597339609443771145347181268285050728925993518704899005416187250003304581230701444705157412790787027926810710998646191467130550713600765898234392350153965811595060656753711278308005193370936296124790772689433773414703645703910742193898471800081321469055211709339846392500706523670145259024267858368216902176489814789679472227343363035428541915118378163012031L, 18715065071648040017967211297231106538139985087685358555650567057715550586464814763683688299037897182845007578571401359061213777645114414642903077003568155508465819628553747173244235936586812445440095450755154357646737087071605811984163416590278352605433362327949048243722556262979909488202442530307505819371594747936223835233586945423522256938701002370646382097846105014981763307729234675737702252155130837154876831885888669150418885088089324534892506199724486783446267336789872782137895552509353583305880144947714110009893134162185382309992604435664777436197587312317224862723813510974493087450281755452428746194446L, 2282284561224858293138480447463319262474918847630148770112472703128549032592187797289965592615199709857879008271766433462032328498580340968871260189669707518557157836592424973257334362931639831072584824103123486522582531666152363874396482744561758133655406410364442174983227005501860927820871260711861008830120617056883514525798709601744088135999465598338635794275123149165498933580159945032363880613524921913023341209439657145962332213468573402863796920571812418200814817086234262280338221161622789516829363805084715652121739036183264026120868756523770196284142271849879003202190966150390061195469351716819539183797L] f=lambda m,e,n,c:pow(m,e,n)==c assert(sum(map(f,[p]*4,[4]*4,n,c))==4) ee1 = 42 ee2 = 3 ce1 = 45722651786340123946960815003059322528810481841378247280642868553607692149509126962872583037142461398806689489141741494974836882341505234255325683219092163052843461632338442529011502378931140356111756932712822516814023166068902569458299933391973504078898958921809723346229893913662577294963528318424676803942288386430172430880307619748186863890050113934573820505570928109017842647598266634344447182347849367714564686341871007505886728393751147033556889217604647355628557502208364412269944908011305064122941446516990168924709684092200183860653173856272384 ce2 = 13908468332333567158469136439932325992349696889129103935400760239319454409539725389747059213835238373047899198211128689374049729578146875309231962936554403287882999967840346216695208424582739777034261079550395918048421086843927009452479936045850799096750074359160775182238980989229190157551197830879877097703347301072427149474991803868325769967332356950863518504965486565464059770451458557744949735282131727956056279292800694203866167270268988437389945703117070604488999247750139568614939965885211276821987586882908159585863514561191905040244967655444219603287214405014887994238259270716355378069726760953320025828158 tmp = 864078778078609835167779565982540757684070450697854309005171742813414963447462554999012718960925081621571487444725528982424037419052194840720949809891134854871222612682162490991065015935449289960707882463387 n = 15911581555796798614711625288508309704791837516232122410440958830726078821069050404012820896260071751380436992710638364294658173571101596931605797509712839622479368850251206419748090059752427303611760004621378226431226983665746837779056271530181865648115862947527212787824629516204832313026456390047768174765687040950636530480549014401279054346098030395100387004111574278813749630986724706263655166289586230453975953773791945408589484679371854113457758157492241225180907090235116325034822993748409011554673180494306003272836905082473475046277554085737627846557240367696214081276345071055578169299060706794192776825039 assert(pow(e1,ee1,n)==ce1) assert(pow(e2+tmp,ee2,n)==ce2) e = 46531 n = 16278524034278364842964386062476113517067911891699789991355982121084973951738324063305190630865511554888330215827724887964565979607808294168282995825864982603759381323048907814961279012375346497781046417204954101076457350988751188332353062731641153547102721113593787978587135707313755661153376485647168543680503160420091693269984008764444291289486805840439906620313162344057956594836197521501755378387944609246120662335790110901623740990451586621846212047950084207251595169141015645449217847180683357626383565631317253913942886396494396189837432429078251573229378917400841832190737518763297323901586866664595327850603 c = 14992132140996160330967307558503117255626925777426611978518339050671013041490724616892634911030918360867974894371539160853827180596100892180735770688723270765387697604426715670445270819626709364566478781273676115921657967761494619448095207169386364541164659123273236874649888236433399127407801843412677293516986398190165291102109310458304626261648346825196743539220198199366711858135271877662410355585767124059539217274691606825103355310348607611233052725805236763220343249873849646219850954945346791015858261715967952461021650307307454434510851869862964236227932964442289459508441345652423088404453536608812799355469 hint=int(binascii.hexlify(hint),16) assert(q1p*q1q==n) assert(q1p<q1q) assert(c==pow(hint,e,n)) flag=int(binascii.hexlify(flag),16) q1=q1p q2 = 114401188227479584680884046151299704656920536168767132916589182357583461053336386996123783294932566567773695426689447410311969456458574731187512974868297092638677515283584994416382872450167046416573472658841627690987228528798356894803559278308702635288537653192098514966089168123710854679638671424978221959513 c1 = 262739975753930281690942784321252339035906196846340713237510382364557685379543498765074448825799342194332681181129770046075018122033421983227887719610112028230603166527303021036386350781414447347150383783816869784006598225583375458609586450854602862569022571672049158809874763812834044257419199631217527367046624888837755311215081173386523806086783266198390289097231168172692326653657393522561741947951887577156666663584249108899327053951891486355179939770150550995812478327735917006194574412518819299303783243886962455399783601229227718787081785391010424030509937403600351414176138124705168002288620664809270046124 c2 = 7395591129228876649030819616685821899204832684995757724924450812977470787822266387122334722132760470911599176362617225218345404468270014548817267727669872896838106451520392806497466576907063295603746660003188440170919490157250829308173310715318925771643105064882620746171266499859049038016902162599261409050907140823352990750298239508355767238575709803167676810456559665476121149766947851911064706646506705397091626648713684511780456955453552020460909638016134124590438425738826828694773960514221910109473941451471431637903182205738738109429736425025621308300895473186381826756650667842656050416299166317372707709596 assert(c1==pow(flag,e1,p*q1)) assert(c2==pow(flag,e2,p*q2)) 解题 总体上看是四种方法综合起来考察

基于JavaWeb的学籍管理系统

基于JavaWeb的学籍管理系统 采用java、sqlserver/mysql、及html、javascript做的管理系统。 有源码,数据库sql文件,及PPT详细文档,可研究使用,仅供参考。 链接:https://download.csdn.net/download/qq_38391602/18463443,0积分下载。

【人脸】人脸矫正相关知识

目录 人脸矫正相关知识 一、人脸矫正的简要流程 二、Python代码中人脸矫正实现方式 三、C++代码中人脸矫正实现方式 人脸矫正相关知识 一、人脸矫正的简要流程 Step1、使用人脸检测结果的5个特征点和人脸标准的5个参考特征点坐标求出仿射变换矩阵。 Step2、通过上一步求得的放射变换矩阵对人脸进行旋转平移矫正,得到矫正好的人脸。 补充1.人脸标准的5个参考特征点坐标如下(人脸尺寸为112 * 112): src = np.array([ [30.2946+8.0, 51.6963], [65.5318+8.0, 51.5014], [48.0252+8.0, 71.7366], [33.5493+8.0, 92.3655], [62.7299+8.0, 92.2041] ], dtype=np.float32 ) #该特征点坐标是基于112*112尺寸人脸的 二、Python代码中人脸矫正实现方式 备注:该方法使用skimage库的transform.SimilarityTransform(),先计算仿射变换矩阵,再使用opencv中的warpAffine()函数矫正人脸图片。 src = np.array([ [30.2946, 51.6963], [65.5318, 51.5014], [48.0252, 71.7366], [33.5493, 92.3655], [62.7299, 92.2041] ], dtype=np.float32 ) if image_size[1]==112: src[:,0] += 8.0 #每一行的第0个数据 dst = landmark.astype(np.float32) #astype:数据类型转换 # step1.计算仿射变换举证 tform = trans.SimilarityTransform() #创建一个相似变换对象(这是用到python的skimage库) tform.estimate(dst, src) # estimate():通过一组对应点估计出变换矩阵 M = tform.

xp系统中提示文件WINDOWS\SYSTEM32\CONFIG\SYSTEM缺失问题的解决方法

1、首先有一个pe启动的u盘 2、进入到pe系统中,找到系统引导修复,然后打开它 3、如果可以修复,就不用往下看了,重启电脑正常进入电脑桌面。 4、如果不可以修复的话,在原系统盘中创建一个a.txt文件,打开编辑,输入 chkdsk/f y pause 保存,然后更改文件后缀名为.bat 即a.bat 5、如图 6、完成后重启电脑,就可以了。 注:这个只是解决方法之一,如果实在不行就重装系统吧!如果是win7,win10的系统也可以试一下。

[python] 文件夹拷贝copy

Python-文件夹的拷贝操作 参考:https://www.cnblogs.com/wangzhilong/p/11986994.html 在Python中,想要实现文件夹的拷贝,需使用shutil包,其中文件复制的内置函数为shutil.copy 这里介绍两种拷贝方式: 第一种为文件夹整体拷贝: import os import shutil source_path = os.path.abspath(r'E:\Projects\source_dir') target_path = os.path.abspath(r'E:\Projects\new folder\target_dir') #if not os.path.exists(target_path): # 如果目标路径不存在原文件夹的话就创建 # os.makedirs(target_path) #if os.path.exists(source_path): # 如果目标路径存在原文件夹的话就先删除 # shutil.rmtree(target_path) shutil.copytree(source_path, target_path) print('copy dir finished!') 第二种为文件夹下的所有文件(包括子目录文件)拷贝到目标文件夹下: import os import shutil source_path = os.path.abspath(r'E:\Projects\source_dir') target_path = os.path.abspath(r'E:\Projects\target_dir') if not os.path.exists(target_path): os.makedirs(target_path) if os.path.exists(source_path): # root 所指的是当前正在遍历的这个文件夹的本身的地址 # dirs 是一个 list,内容是该文件夹中所有的目录的名字(不包括子目录) # files 同样是 list, 内容是该文件夹中所有的文件(不包括子目录) for root, dirs, files in os.walk(source_path): for file in files: src_file = os.

扒网站工具 linux,wget 递归下载整个网站(网站扒皮必备)

wget 递归下载整个网站(网站扒皮必备) 有时间看到别人网站的页面比较漂亮,就想给扒皮下来,学习学习。分享一个我常用网站扒皮命令wget 这个命令可以以递归的方式下载整站,并可以将下载的页面中的链接转换为本地链接。 wget加上参数之后,即可成为相当强大的下载工具。 wget命令详解 wget -r -p -np -k http://xxx.com/xxx -r, --recursive(递归) specify recursive download.(指定递归下载) -k, --convert-links(转换链接) make links in downloaded HTML point to local files.(将下载的HTML页面中的链接转换为相对链接即本地链接) -p, --page-requisites(页面必需元素) get all images, etc. needed to display HTML page.(下载所有的图片等页面显示所需的内容) -np, --no-parent(不追溯至父级) don't ascend to the parent directory. 另外断点续传用-nc参数 日志 用-o参数 拿我自己的网站扒皮试一下吧 执行 wget -r -p -np -k http://www.phpernote.com/ 命令 等网站递归下载完毕,你会发现你当前目录会有一个 www.phpernote.com/ 的目录 进入这个目录看一下 熟练掌握wget命令,可以帮助你扒皮网站。 http://www.dengb.com/Linuxjc/1293538.htmlwww.dengb.comtruehttp://www.dengb.com/Linuxjc/1293538.htmlTechArticlewget 递归下载整个网站(网站扒皮必备) 有时间看到别人网站的页面比较漂亮,就想给扒皮下来,学习学习。分享一个我常用网站扒皮命令w...

Dreamweaver正则表达式与示例

正则表达式是以文本描述字符组合的模式。在代码搜索中使用它们有助于描述一些概念,例如,以“var”开始的行以及包含数字的属性值。 下表列出了在正则表达式中使用的特殊字符、其含义和用法示例。若要搜索包含该表中某一特殊字符的文本,请在特殊字符前面附加一个反斜杠,令其转义。例如,若要在 some conditions apply* 短语中搜索实际的星号,您的搜索模式应类似于:apply\*。如果您没有令星号转义,您将找到“apply”的所有匹配项(以及“appl”、“applyy”和“applyyy”的所有匹配项),而不只是后面跟有星号的那些匹配项。 字符 匹配 示例 ^ 输入或行的起始部分。 ^T 与“This good earth”中的“T”匹配,但是与“Uncle Tom’s Cabin”无匹配内容 $ 输入或行的结尾部分。 h$ 与“teach”中的“h”匹配,但是与“teacher”无匹配内容 * 0 个或多个前置字符。 um* 与“rum”中的“um”、“yummy”中的“umm”和“huge”中的“u”匹配 + 1 个或多个前置字符。 um+ 与“rum”中的“um”和“yummy”中的“umm”匹配,但是和“huge”无匹配内容 ? 前置字符最多出现一次(即,指示前置字符是可选的)。 st?on 与“Johnson”中的“son”和“Johnston”中的“ston”匹配,但是与“Appleton”或“tension”无匹配内容 . 除换行符外的任何单字符。 .an 与“bran muffins can be tasty”短语中的“ran”和“can”匹配 x|y x 或 y。 FF0000|0000FF 与bgcolor="#FF0000" 中的“FF0000”和 font color="#0000FF" 中的“0000FF”匹配 {n} 恰好 n 个前置字符。 o{2} 与“loom”中的“oo”和“mooooo”中的前两个字母 o 匹配,但是与“money”无匹配内容 {n,m} 至少 n 个、至多 m 个前置字符。 F{2,4} 与“#FF0000”中的“FF”和“#FFFFFF”中的前四个字母 F 匹配

qnap 备份linux文件夹,如何将 Qsync 文件夹中的文件备份至其他的 QNAP NAS?

Qsync可以协助企业提升生产、协同任务、文件集中与归档的效率。因此,如何将Qsync文件夹内的文件及数据进行备份也就日趋重要。本教学文件将会介绍如何通过QTS内的Backup Station来备份Qsync文件夹中的文件。 登录目的端NAS: 登录目地端NAS并选择[备份管理中心]。 接着将此NAS设为备份服务器,并且根据不同需求选择备份方式,本文选择以home作为范例。 勾选[允许远程主机备份至本机]及[允许远程Rsync兼容服务器主机备份至本机],并输入此Rsync服务器的账号及密码。 点击[应用]与[确定]。 登录来源端NAS: 登录来源端NAS,同样点击[备份管理中心]。 点击[异地备份]>[Rsync(文件备份)]>[创建异地备份任务]。 给此备份任务命名。 在[设置]中,输入需备份端的IP地址以及Rsync备份服务器的账号及密码后,点击[应用]。 随后,设置来源与目的端NAS的homes文件夹,并点击[加入]来执行备份任务,管理者亦可选择任务的执行频率以及其他设置。 备份任务将会开始执行。 完成后,至目的端NAS,开启File Station,并检查文件是否已备份成功 。 注: 备份管理中心仅管理员可使用。 每位用户的家目录皆会存在于管理者的homes目录。因此在备份每个用户家目录中的Qsync文件夹时,管理者可以直接针对homes进行来源端以及目的端NAS的备份。 若有共享文件夹设置为[启用共享文件夹可同步化功能],则您须对该文件夹进行备份以确保数据完整性。 用户名单以及配置文件备份的功能会于以后的版本提供。

线程执行顺序

代码: /** * @author cheyuhang on 2021/5/6 */ public class Test1 { public static void main(String[] args) { new Thread(()-> { try { TimeUnit.SECONDS.sleep(3L); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("子线程执行"); },"A").start(); System.out.println("cheyuhang"); try { TimeUnit.SECONDS.sleep(10L); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("sadffffffffffffffffffffffffffffffff"); } } 执行结果: cheyuhang 子线程执行 sadffffffffffffffffffffffffffffffff 执行过程解释: 首先程序的执行顺序是自上而下的,先执行A线程,因为A线程睡了3秒,所以会继续执行往下执行main线程,会输出"cheyuhang",然后继续执行主线程的睡10s的操作,后续操作就停止了,此时A线程睡的时间已经到了,就会输出"子线程执行", 此时主线程睡10s时间到了,继续执行后续的操作,那么就会输出"sadffffffffffffffffffffffffffffffff"

块设备、字符设备、裸设备和文件系统个人总结

1、块设备:系统中可以随机访问(不需要按顺序)访问固定大小数据片(chunks)的设备称为块设备,这些数据片就称作块。硬盘是最常见的块设备,除此以外,还有软盘驱动器、CD-ROM驱动器和闪存等。这里要注意:它们都是以安装文件系统的方式使用的(这也是块设备的一般访问方式)。 2、字符设备:字符设备是按照字节流的方式被有序访问的,像串口和键盘就属于字符设备。 说明:块设备通过系统缓存进行读取,不是直接和物理磁盘读取。字符设备可以直接物理磁盘读取,不经过系统缓存。 3、裸设备:什么是裸设备(RAW DEVICE) 简单来说未格式化的存储设备,它是指未创建文件系统的磁盘分区(raw partition)或逻辑卷(raw logical volume)。 如果数据库不用走文件系统,直接读写裸设备,效率会更高。这是由于对裸设备的操作不通过UNIX的缓冲区,数据在ORACLE的数据缓冲区(BUFFER CACHE)和磁盘之间直接传递,所以使用裸设备在一定程度上能够提高I/O性能,适合I/O量大的系统。 裸设备 ->文件系统 -> 数据库 ->ORACLE 裸设备 -> 数据库 -> ORACLE 另外在FreeBSD系统中,所有的块设备实际都是裸设备。为了简化缓存的管理以及增强可测量性和性能,FreeBSD 4.0中停止了对非裸设备的支持。 备注:裸设备有下列缺点: a、裸设备的空间大小管理不灵活。在放置裸设备的时候,需要预 先规划好裸设备上的空间使用。还应当保留一部分裸设备以应付突发情况。但这也造成了空间浪费。 b、裸设备的创建、更改权限、扩展大小等 都需要使用root用户完成 4、文件系统:文件系统是管理磁盘的软件系统,它简化了用户对磁盘空间的使用方法,并降低了磁盘空间的使用难度,通过更加形象的方式将磁盘中的数据展示给用户,文件系统是为方便查找和管理计算机中的文件而设立的。它是操作系统为了存储和管理文件,在存储器(包括软硬盘和光盘等)上建立的一些文件组织和结构。一般来说,文件系统主要包括文件目录和文件本身,主要完成三项功能:跟踪记录存储器中被耗用的空间和自由空间,维护目录名和文件名,跟踪记录每一个文件的物理存储位置。 通过文件系统的方式来组织磁盘存储和数据管理。有以下几个方面的好处: (1)数据的读取、管理操作变得简单; 文件系统给用户提供了一个简单的操作界面,用户可以通过对文件系统的简单操作,实现对磁盘的管理。 (2)磁盘分区管理灵活; 在文件系统下提供了很多的磁盘分区管理工具,例如 LVM 等。 (3)支持数据容错机制,数据安全能得到保障; 一个好的文件系统提供了对于数据读取和写入的各种容错和保护机制,很好地保障了数据的安全,而裸设备没有这种灵活的管理机制,对于数据安全只能通过手工的备份方式来实现。 文件系统是操作系统和磁盘之间的一个桥梁,因此对磁盘的任何写操作,都要经过文件系统,然后才到磁盘。 备注:文件系统的缺点:性能比不上裸设备 文件系统的优点:可随时修改;不需要知道实际地址即可顺序读取;

牛逼!Java 从入门到精通,超全汇总版

文章目录 Java 基础Head First JavaJava 核心技术卷一Java 编程思想 设计模式Head First 设计模式图解设计模式设计模式重学 Java 设计模式 Java 进阶Java 并发编程实战Java 并发编程艺术Java 并发编程之美图解Java多线程设计模式 JVM深入理解 Java 虚拟机Java 虚拟机规范HotSpot 实战自己动手写 Java 虚拟机 MySQLMySQL 基础教程SQL 基础教程深入浅出 MySQLMySQL 必知必会SQL 必知必会高性能 MySQLMySQL 是怎样运行的数据库索引与优化MySQL 技术内幕:InnoDB存储引擎MySQL技术内幕MySQL 内核 MavenMyBatisMyBatis 从入门到精通MyBatis 技术内幕 SpringSpring 揭秘Spring 源码深度解析Spring 技术内幕 HTTPTomcat深入剖析 TomcatTomcat 架构解析 Servlet/JSP 技术Head First Servlet/JSPServlet & JSP 核心编程 Spring MVCSpringMVC 学习指南看透 SpringMVC SpringBoot从设计理念谈起Spring Boot 的 Starter 机制Spring Boot 的豪华开发团队有个好干爹 Spring CloudDubboRedisRedis 实战Redis 设计与实现Redis 开发与运维Redis 深度历险:核心原理与应用实践 KafkaKafka 权威指南Apache Kafka实战深入理解Kafka:核心设计与实践原理 ZooKeeperZooKeeper 介绍设计目标从 Paxos 到 ZookeeperZooKeeper : 分布式过程协同技术详解 NginxNginx 基础知识Nginx 正向代理与反向代理Nginx 基本配置Nginx 负载均衡Nginx常用命令深入理解 Nginx NettyNetty 实战 ESElasticsearch 实战Elasticsearch 源码解析与优化实战 GitGit 是分布式的,SVN 是集中式的 Git是分布式的,SVN是集中式的Git 复杂概念多,SVN 简单易上手Git 分支廉价,SVN 分支昂贵Pro GitGit 版本控制管理 计算机基础计算机组成原理操作系统计算机网络数据结构和算法关于学习的意见和建议,可以参考 (文末有惊喜哦!!!) 其实学习 Java 学到什么程度算是精通,这个其实没有盖棺定论的,也不是说你拿个年薪几十万的 offer 就可以自诩精通了。另外,每当面试的时候简历上填个精通 offer 的家伙我就觉得很搞笑,没有几个熬得过开出门左拐的命运。但是我认为,如果市面上这些资料、书籍你都啃的差不多,你能在所有的 Java 程序员中跻身前 0.

Mysql中find_in_set()函数与in()函数的用法

背景 今天同事让帮忙写个sql,大致是一张表的两个字段都关联另外一张表的主键,这个完全可以把两个表当作三个表来写,大概是这种: SELECT t1.name, t1.id, t2.reason, t3.result FROM test1_copy1 AS t1 INNER JOIN test1 AS t2 ON t1.id = t2.reason INNER JOIN test1 AS t3 ON t1.id = t3.result 这种是可以实现的,但是我看到数据里的另一个点,那就是t2.reason字段,存放的是用逗号隔开的字符串,如下所示,kg_rules表的reason和result对应kg_facts表的id,查询kg_rules表的每一条记录对应的名字(name)和含义(mean) 第一步:先使用find_in_set解决范围查找 SELECT a.id, b.name FROM kg_rules a LEFT JOIN kg_facts b ON FIND_IN_SET(b.id, a.reason) 结果为: 这里会看到根据表kg_rules的reason,找到了三条记录。达到了我想要的结果,来分享记录一下Mysql这个方法吧。 1.认识find_in_set()函数 Mysql官方文档手册,如下图: 2.find_in_set()基本操作 select find_in_set (‘b’, ‘a,b,c,d,w’); 结果为2,因为b字符串在strlist集合中,在第二个位置,起始数是从1开始的 select find_in_set(‘6’,‘1,2’); 结果为0,因为第一个字符串6,并不在第二个参数中 对于上面写的sql语句,使用find_in_set()进行数据查询的时候,一次可以返回多条记录的情况 上面的语句类似于in()如下的操作: select id,name from kg_facts where id in(1,2,3) 3.find_in_set()与in()的应用场景区别 刚刚上面的情况也看到了 select * from kg_facts where find_in_set(id,‘1,2,3’)

java判断当前excel文档是否为空

POM依赖: 我这里使用的是4.1.X版本的依赖 <!-- poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency> <!-- poi-ooxml --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>4.1.1</version> </dependency> 我在resources下放置了一个内容为空的aa.xlsx的excel文件。 通过查阅底层代码,发现XSSF下的sheetAt.getLastRowNum()方法里有 是否为空的方法。如果为空,则返回0 //这里可以看到,这里判断是否为空,为空返回0 public int getLastRowNum() { return this._rows.isEmpty() ? 0 : (Integer)this._rows.lastKey(); } demo测试代码: public static void main(String[] args) { Workbook workbook = null; FileInputStream fis = null; try { //这里需要注意写的是绝对路径!!! fis = new FileInputStream("D:\\dev\\project\\keji_demo\\src\\main\\resources\\aa.xlsx"); workbook = new XSSFWorkbook(fis); Sheet sheetAt = workbook.getSheetAt(0); int lastRowNum = sheetAt.

AI上推荐 之 xDeepFM模型(显隐性高阶特征交互的组合策略)

1. 写在前面 这篇文章整理模型,不再使用华丽的前言外表, 也跳出了王喆老师书上的推荐模型, 从前面的各个模型的基础上开始尝试推荐系统领域各个方面的一些新探索和成果了, 后面的这个系列打算采用“小步快跑”的方式,每次研究一个模型,主要是基于原论文和一些不错的博客,然后通过一篇文章把细节进行梳理,这样既兼顾论文总结,也能保持短期更新,逼迫自己快速学习和输出。 但是为了整理清楚每篇论文里面的细节和完成知识的串联,篇幅上可能依然不会减太少,当然,也是视情况而定, 重要的模型多整理(理论和代码), 不太重要的简单总结啦。下面开始😉 今天介绍的这个模型,叫做xDeepFM(eXtreme DeepFM),这是2018年中科大联合微软在KDD上提出的一个模型,在DeepFM的前面加了一个eXtreme,看这个名字,貌似是DeepFM的加强版,但当我仔细的读完原文之后才发现,如果论血缘关系,这个模型应该离着DCN更近一些,这个模型的改进出发点依然是如何更好的学习特征之间的高阶交互作用,从而挖掘更多的交互信息。而基于这样的动机,作者提出了又一个更powerful的网络来完成特征间的高阶显性交互(DCN的话是一个交叉网络), 这个网络叫做CIN(Compressed Interaction Network),这个网络也是xDeepFM的亮点或者核心创新点了(牛x的地方), 有了这个网络才使得这里的"Deep"变得名副其实。而xDeepFM的模型架构依然是w&D结构,更好的理解方式就是用这个CIN网络代替了DCN里面的Cross Network, 这样使得该网络同时能够显性和隐性的学习特征的高阶交互(显性由CIN完成,隐性由DNN完成)。 那么为啥需要同时学习特征的显性和隐性高阶交互呢? 为啥会用CIN代替Cross Network呢? CIN到底有什么更加强大之处呢? xDeepFM与之前的DeepFM以及FM的关系是怎样的呢? 这些问题都会在后面一一揭晓。 这篇文章的逻辑和前面一样,首先依然是介绍xDeepFM的理论部分和论文里面的细节,我觉得这篇文章的创新思路还是非常厉害的,也就是CIN的结构,在里面是会看到RNN和CNN的身影的,又会看到Cross Network的身影。所以这个结构我这次也是花了一些时间去理解,花了一些时间找解读文章看, 但讲真,解读文章真没有论文里面讲的清晰,所以我这次整理也是完全基于原论文加上我自己的理解进行解读。 当然,我水平有限,难免有理解不到位的地方,如果发现有错,也麻烦各位大佬帮我指出来呀。这样优秀的一个模型,不管是工业上还是面试里面,也是非常喜欢用或者考的内容,所以后面依然参考deepctr的代码,进行简化版的复现,重点看看CIN结构的实现过程。最后就是简单介绍和小总。 这篇文章依然比较长,首先是CIN结构本身可能比较难理解,前面需要一定的铺垫任务,比如一些概念(显隐性交叉,bit-wise和vector-wise等), 一些基础模型(FM,FNN,PNN,DNN等),DCN的Cross Network,有了这些铺垫后再理解CIN以及操作会简单些,而CIN本身运算也可能比较复杂,再加上里面时间复杂度和空间复杂度那块的分析,还有后面实验的各个小细节以最后论文还帮助我们串联了各种模型,我想在这篇文章中都整理一下。 再加上模型的复现内容,所以篇幅上还是会很长,各取所需吧还是哈哈。当然这篇文章的重点还是在CIN,这个也是面试里面非常喜欢问的点。 PS: 读这篇文章之前,建议先阅读我之前整理的AI上推荐 之 Wide&Deep与Deep&Cross模型, 因为上面也说了,xDeepFM的核心是CIN网络,而这个网络的改进动机是有Deep&Cross模型里面的Cross网络的不足, 所以有必要了解下DCN网络的交叉网络的原理,当然我这里会简介,但应该不会太详细。 大纲如下: xDeepFM? 我们需要先了解这些xDeepFM模型的理论以及论文细节xDeepFM模型的代码复现及重要结构解释小总 Ok, let’s go! 2. xDeepFM? 我们需要先了解这些 2.1 简介与进化动机 再具体介绍xDeepFM之前,想先整理点铺垫的知识,也是以前的一些内容,是基于原论文的Introduction部分摘抄了一些,算是对前面内容的一些回顾吧,因为这段时间一直忙着找实习,也已经好久没有写这个系列的相关文章了。所以多少还是有点风格和知识上的遗忘哈哈。 首先是在推荐系统里面, 一般原始的特征很难让模型学习到隐藏在数据背后的规律,因为推荐系统中的原始特征往往非常稀疏,且维度非常高。所以如果想得到一个好的推荐系统,我们必须尽可能的制作更多的特征出来,而特征组合往往是比较好的方式,毕竟特征一般都不是独立存在的,那么特征究竟怎么组合呢? 这是一个比较值得研究的难题,并且好多学者在这上面也下足了工夫。 如果你说,特征组合是啥来? 不太清楚了呀,那么文章中这个例子正好能解决你的疑问 起初的时候,是人工特征组合,这个往往在作比赛的时候会遇到,就是特征工程里面自己进行某些特征的交叉与组合来生成新的特征。 这样的方式会有几个问题,作者在论文里面总结了: 一般需要一些经验和时间才会得到比较好的特征组合,也就是找这样的组合对于人来说有着非常高的要求,无脑组合不可取 — 需要一定的经验,耗费大量的时间由于推荐系统中数据的维度规模太大了,如果人工进行组合,根本就不太可能实现 — 特征过多,无法全面顾及特征的组合手工制作的特征也没有一定的泛化能力,而恰巧推荐系统中的数据往往又非常稀疏 — 手工组合无泛化能力 所以,让模型自动的进行特征交叉组合探索成了推荐模型里面的比较重要的一个任务,还记得吗? 这个也是模型进化的方向之一,之所以从前面进行引出,是因为本质上这篇的主角xDeepFM也是从这个方向上进行的探索, 那么既然又探索,那也说明了前面模型在这方面还有一定的问题,那么我们就来再综合理一理。 FM模型: 这个模型能够自动学习特征之间的两两交叉,并且比较厉害的地方就是用特征的隐向量内积去表示两两交叉后特征的重要程度,这使得模型在学习交互信息的同时,也让模型有了一定的泛化能力。 But,这个模型也有缺点,首先一般是只能应付特征的两两交叉,再高阶一点的交叉虽然行,但计算复杂,并且作者在论文中提到了高阶交叉的FM模型是不管有用还是无用的交叉都建模,这往往会带来一定的噪声。DNN模型: 这个非常熟悉了,深度学习到来之后,推荐模型的演化都朝着DNN的时代去了,原因之一就是因为DNN的多层神经网络可以比较出色的完成特征之间的高阶交互,只需要增加网络的层数,就可以轻松的学习交互,这是DNN的优势所在。 比较有代表的模型PNN,DeepCrossing模型等。 But, DNN并不是非常可靠,有下面几个问题。 首先,DNN的这种特征交互是隐性的,后面会具体说显隐性交互区别,但直观上理解,这种隐性交互我们是无法看到到底特征之间是怎么交互的,具体交互到了几阶,这些都是带有一定的不可解释性。其次,DNN是bit-wise层级的交叉,关于bit-wise,后面会说,这种方式论文里面说一个embedding向量里面的各个元素也会相互影响, 这样我觉得在这里带来的一个问题就是可能会发生过拟合。 因为我们知道embedding向量的表示方法就是想从不同的角度去看待某个商品(比如颜色,价格,质地等),当然embedding各个维度是无可解释性的,但我们还是希望这各个维度更加独立一点好,也就是相关性不那么大为妙,这样的话往往能更加表示出各个商品的区别来。 但如果这各个维度上的元素也互相影响了(神经网络会把这个也学习进去), 那过拟合的风险会变大。当然,上面这个是我自己的感觉, 原作者只是给了这样一段:

Java学习之旅(四三):使用 instanceof 操作符判断对象类型

当在程序中执行向下转型操作时,如果父类对象不是子类对象的实例,就会发生 ClassCastException 异常,所以在执行向下转型操作之前要养成一个良好的习惯,就是判断父类对象是否为子类对象的实例。这个判断通常使用 instanceof 操作符来完成,可以使用该操作符判断是否一个类实现了某个接口,也可以判断一个实例对象是否属于一个类。instanceof 是 Java 语言的关键字,在 Java 语言中,关键字都为小写。使用 instanceof 操作符的表达式返回值为布尔类型。如果返回值为 true,说明对象为类的实例对象,如果返回为 false,说明对象不是类的实例对象。 // 四边形类 public class Quadrangle { public static void draw(Quadrangle quadrangle) { // 四边形类中的方法 } } public class Square extends Quadrangle{ // 正方形类,继承自四边形类 } // 平行四边形类,继承四边形类 public class Parallelogram extends Quadrangle { public static void main(String[] args) { // 实例化父类对象 Quadrangle quadrangle = new Quadrangle(); // 判断父类对象是否为 Parallelogram 子类的一个实例 System.out.println(quadrangle instanceof Parallelogram); if (quadrangle instanceof Parallelogram) { // 向下转型 Parallelogram parallelogram = (Parallelogram) quadrangle; } // 判断父类对象是否为 Square 子类的一个实例 System.

2021.5.5 matplotlib绘图时,中文乱码

解决方法:Windows下 加入两行代码 plt.rcParams['font.sans-serif'] = ['simhei'] # 用来正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号

linux 网卡地址 ens32,linux没有eth0的解决办法(但是有ifcfg-ens33或ifcfg-en32)

新手请先打开着三个链接,简单看一下。 下面是正题 老师要求修改eth0或eth1,打开虚拟机(linux CentOS 7 64bit)一看,这两个都没,只有ens32和lo 第二个链接有通过复制lo改成eth0的方法,但是用过之后好像不管用 于是使用链接3的复制ifcfg32改成eth0的方法,已经成功(如果有单词不懂,参考链接一) 下面是步骤: 1.复制ifcfg-ens32配置文件,文件名为ifcfg-eth0。将其中NAME项和DEVICE项修改为eth0,保存后退出。 进入目录cd /etc/sysconfig/network-scripts/ 2.编辑/etc/default/grub文件,在GRUB_CMD_LINE_LINUX=""项中,插入"net.ifnames=0 biosdevname=0"(与原有项之间用空格隔开),保存退出。 vi /etc/default/grub 3.调用命令grub2-mkconfig -o /boot/grub2/grub.cfg更新配置,然后直接reboot重启。 这样之后再用ifconfig -a命令查看时,就有eth0网卡存在了。 但此时仍不能连接网络,原因是ifcfg-eth0中的其他参数仍需要调整。 博主本地连接是采用自动获取IP地址的方式,且在虚拟机网络连接配置上选择了桥接模式。 所以eth0的网卡配置也应该是自动获取ip地址的,即BOOTPROTO选项设置为dhcp(动态获取),TYPE也不需要设置。 另外从ens32转换过来的eth0中并没有HWADDR属性,需要自己设置。具体的值可以从虚拟机设置->网络适配器->高级->MAC地址中获取。 然后ONBOOT属性需要设置为yes,开机启动,保存后reboot即可生效。 具体参数以供参考(值可以和我的一样): 如果想采用指定ip,则应该设置为static,另外IPADDR/NETMASK/BROADCAST几个参数也需要指定对应值 具体参数以供参考(值可以和我的一样): 刷新网络,启动eth0 原文:https://www.cnblogs.com/xunyan6234/p/12913337.html

<JVM下篇:性能监控与调优篇>01-概述篇-02-JVM监控及诊断工具-命令行篇

笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.csdn.net/qq_35925558/NOTE_JVM https://github.com/uxiahnan/NOTE_JVM 文章目录 1. 概述篇1.1. 大厂面试题1.2. 背景说明1.3. 调优概述1.4. 性能优化的步骤1.5. 性能评价/测试指标 2. JVM监控及诊断工具-命令行篇2.1. 概述2.2. jps:查看正在运行的Java进程2.3. jstat:查看JVM统计信息2.4. jinfo:实时查看和修改JVM配置参数2.5. jmap:导出内存映像文件&内存使用情况2.6. jhat:JDK自带堆分析工具2.7. jstack:打印JVM中线程快照2.8. jcmd:多功能命令行2.9. jstatd:远程主机信息收集 1. 概述篇 1.1. 大厂面试题 支付宝: 支付宝三面:JVM性能调优都做了什么? 小米: 有做过JVM内存优化吗? 从SQL、JVM、架构、数据库四个方面讲讲优化思路 蚂蚁金服: JVM的编译优化 jvm性能调优都做了什么 JVM诊断调优工具用过哪些? 二面:jvm怎样调优,堆内存、栈空间设置多少合适 三面:JVM相关的分析工具使用过的有哪些?具体的性能调优步骤如何 阿里: 如何进行JVM调优?有哪些方法? 如何理解内存泄漏问题?有哪些情况会导致内存泄漏?如何解决? 字节跳动: 三面:JVM如何调优、参数怎么调? 拼多多: 从SQL、JVM、架构、数据库四个方面讲讲优化思路 京东: JVM诊断调优工具用过哪些? 每秒几十万并发的秒杀系统为什么会频繁发生GC? 日均百万级交易系统如何优化JVM? 线上生产系统OOM如何监控及定位与解决? 高并发系统如何基于G1垃圾回收器优化性能? 1.2. 背景说明 生产环境中的问题 生产环境发生了内存溢出该如何处理?生产环境应该给服务器分配多少内存合适?如何对垃圾回收器的性能进行调优?生产环境CPU负载飙高该如何处理?生产环境应该给应用分配多少线程合适?不加log,如何确定请求是否执行了某一行代码?不加log,如何实时查看某个方法的入参与返回值? 为什么要调优 防止出现OOM解决OOM减少Full GC出现的频率 不同阶段的考虑 上线前项目运行阶段线上出现OOM 1.3. 调优概述 监控的依据 运行日志异常堆栈GC日志线程快照堆转储快照 调优的大方向 合理地编写代码充分并合理的使用硬件资源合理地进行JVM调优 1.4. 性能优化的步骤 第1步:性能监控

linux 静态配置多个ip,CentOS8单网卡配置多个静态IP地址

进入网络配置文件目录 cd /etc/sysconfig/network-scripts/ 查看目录内容 ls 得知我需要编辑的网卡是 ifcfg-eth0 编辑网卡文件 vi ifcfg-eth0 增加以下内容格式,IP 地址按实际需要更改 BOOTPROTO=static #DHCP 改成 static IPADDR0=192.168.8.253 NETMASK0=255.255.252.0 GATEWAY0=192.168.8.1 IPADDR1=192.168.0.253 NETMASK1=255.255.255.0 GATEWAY1=192.168.0.1 DNS1=119.29.29.29 DNS2=8.8.4.4 ONBOOT=yes #no 改成 yes,否则开机不会启动网卡 每组 IP 的 IPADDR 等对象后面增加序列号(0,1,2,3,4,……)来配置多个 IP 地址 配置完成后保存退出 :wq! 重启网络服务(注意不能使用 centos7 的重启网卡命令 systemctl restart network) nmcli c reload ifcfg-eth0 查看是否生效(centos8 已不再使用 ifconfig) ip addr

ffmpeg导入x264、libfdk_aac外部库(已解决wrong ELF class: ELFCLASS32)

起因: 在做pcm编码aac时,运行报错:failed to find codec 查看ffmpeg中已有的aac编码器:ffmpeg -encoders | grep aac 没有找到libfdk_aac 尝试重新编译 ffmpeg: ./configure --enable-shared --enable-gpl --enable-nonfree --enable-libx264 --enable-libfdk-aac --enable-libmp3lame --prefix=/opt/ffmpeg 报错:ERROR: libfdk_aac not found 原因:libfdk_aac、x264等模块已经从ffmpeg独立出去了,我们需要自己导入libfdk_aac和x264库。 编译x264、libfdk_aac 下载地址: libfdk-aac下载 libmp3lame下载 libx264下载 统一配置:./configure --enable-shared --prefix=/home/zhou/ffmpeg/packages/encoders 编译安装:make && make install 重新编译ffmpeg: ./configure --enable-shared --enable-gpl --enable-nonfree --enable-libx264 --enable-libfdk-aac --enable-libmp3lame --prefix=/opt/ffmpeg --extra-cflags="-I/home/zhou/ffmpeg/packages/encoders/include" --extra-ldflags="-L/home/zhou/ffmpeg/packages/encoders/lib" 配置时可以看到,libfdk_aac、libmp3lame、libx264三个编码器已经使能! 编译安装:make && sudo make install 安装完成后需要重新生成软链接ln -s /opt/ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg,然后sudo ldconfig,再执行ffmpeg -v。 问题:libfdk-aac.so.2: wrong ELF class: ELFCLASS32 原因:不是我们编译的libfdk-aac有问题,而是因为ffmpeg调用的是系统中的其它libfdk-aac库;使用locate libfdk-aac可以直接定位系统中的库文件。 解决:设置依赖链接库

AlmaLinux 简要概述

自从Centos系统被宣布在不久之后要被停止维护了,对于企业开发者来说,不得不寻找合适的替代品,以方便在未来继续保持企业项目的稳定开发和维护! 需求即开发的导向!CloudLinux项目团队推陈出新,比如Greg Kurtzer 领衔打造的 Rocky Linux by CentOS 发行版以及CloudLinux Inc.力推的Project Lenix项目。本文主要介绍AlmaLinux,而Rocky Linux将另起一文进行叙述。 目前Lenix项目已经正式发布,为了感谢Linux社区的不懈努力,CloudLinux将Lenix的名字改成了AlmaLinux(拉丁语为“魂”之意) (来自:CloudLinux官网) AlmaLinux官网:https://almalinux.org/ 而后,笔者会继续敲打一篇AlmaLinux 的安装过程分析,以便日后查询! 回归正传! AlmaLinux 依然完全免费、开源、由社区拥有和管理,且与红帽企业版(RHEL 8)实现 1:1 的二进制兼容。AlmaLinux发行版可以取代CentOS稳定版,软件方面无须任何一行代码改动,迁移过程相当轻松。 (AlmaLinux 操作系统界面图) 展望未来,CloudLinux团队在2029年之前,为AlmaLinux免费提供稳定、且经过测试的更新服务。这里指代的是在第一个版本中,管理员将享受8年的支持。 到这里,CentOS管理员可以看到他们将拥有一个不会被釜底抽薪的平台,悠然地使用着AlmaLinux。 在原本CentOS中yum工具,AlmaLinux将其替换为dnf工具,这可以让CentOS管理员快速地适应AlmaLinux环境。 目前,对于那些跃跃欲试AlmaLinux的技术人员,可以尝试在虚拟机上测试。但请记住,AlmaLinux暂且还处于Beta版,所以最好不要在企业生产环境中运用。即便如此,它也能够带给你足够的信息。 ----上述观点属于笔者在日常工作学习过程中的感受,以此记录分享。由于笔者才学疏浅,难免有寡陋之见。笔者将虚心听切广大才者的观点和探讨相关信息。

【词嵌入网络】word2vec词向量网络步骤构建详解(附python代码实现)

前言 构建网络的基础要素有两个,节点和节点间的联系。 初始数据集存在的情况下,节点间的一层联系就可以通过最基础的共现概率求得。 再往深就到剖析节点间的二层联系的时候了。 word2vec词向量训练 Word2Vec是谷歌在 2013 年推出来的一个自然语言处理工具,可用来计算文本的词向量,从而实现定量的度量词与词之间的关系。 本篇使用gensim库中现成的word2vec模型训练词向量,需要准备的只是语句集和参数。 语句集示例 假定初始数据列表为 单次购置商品A,BB,CC,DE,B,FD,E 那么转换后的语句集就为 sentences = [[A,B],[B,C],[C,D],[E,B,F],[D,E]] 参数说明 min_count:词语频度,低于这个阈值的词语不做词向量 size:每个词对应向量的维度,也就是向量长度 workers:并行训练任务数 其他一般常用default,站里也有不少博客说明,我这里就略过了。 源码 一次训练 import gensim from gensim.models import word2vec SIZE = 30 model = word2vec.Word2Vec(sentences, size=SIZE, min_count=10) # 保存词向量模型,下次只需要load就可以用了 model.save("../dataset/wordvector_network/word2vec_atec") 二次增量训练 # 加载已有模型 model = gensim.models.Word2Vec.load("../dataset/wordvector_network/word2vec_atec") # 进行增量训练 corpus = [[B,C,D,F],[A,C,D]] # 新增语料 model.build_vocab(corpus, update=True) # 训练该行 model.train(corpus, total_examples=model.corpus_count, epochs=model.iter) # 保存增量训练后的新模型 model.save("../dataset/wordvector_network/word2vec_atec") 查看训练完的节点词向量 model.wv[A] cosine相似度计算 由于角度的余弦值区间为-1到1,而0度的角余弦值正好是1,因此当余弦相似度为1时代表两个向量的指向相同,-1时相反。因此可以通过余弦值来度量相似度,向量夹角越小证明cosine值越大,同时也说明两个节点越相似。 同样调sklearn里的cosine_similarity函数,直接计算。 源码 from sklearn.

解决Error: L6218E: Undefined symbol xxxx (referred from xxx.o)

**我的背景:**想把人家写好的两个工程合在一起,结果在将一个工程里面的函数复制到另外一个工程里面的时候提示: 问题解释:Undefined symbol:未经过定义的符号; xxx.o:编译生成的中间文件,来自对应的xxx.c文件; 我的失败解决方法: 1.在“魔法棒”中在这里插入图片描述 c/c++中define配置 USE_STDPERIPH_DRIVER, 一、xxx.o对应的xxx.c文件里面使用了没有定义的xxxx(Undefined symbol xxxx),需要你在合适的地 方定义或者删除。 二、在xxx.h文件中没有申明该符号xxxx; 三、在xxx.c/h文件中未引用定义该符号xxxx的.H文件; 四、该符号xxxx已经定义过了,并且也正常引用了,但是在你的MDK工程里面没有把定义该符号的.c文件加载进来, 其它博主的解决方法都用了,都没成,包括还有那个C++文件引用C文件要 extern“C” { #include “XXX.h” } 可是我定义在sys.h中,我也引用了sys.h了,还是不能用………… 我的解决:上面都没有成功,我就在主函数里面又定义了一下,就好使了…… 我就是个憨憨,复制粘贴一时爽,一直粘贴真不爽……

SpringSecurity系列(四) Spring Security 实现权限树形菜单

SpringSecurity系列(一) 初识 Spring Security SpringSecurity系列(二) Spring Security入门 SpringSecurity系列(三) Spring Security 表单登录 这篇文章来实现树形菜单,和大多数权限功能类似,这里总共需要五张表,分别是:菜单表-v_menu、用户表-v_user、角色表v_role、菜单角色表-v_menu_role、用户角色表表v_user_role。 相关代码及数据库已经上传到gitee:https://gitee.com/king-high/vms-master 1. 实体类 package com.javaboy.vms.entity; import lombok.Getter; import lombok.Setter; import java.io.Serializable; import java.util.List; /** * @author: gaoyang * @date: 2021-04-20 16:31:24 * @description: 菜单(VMenu)实体类 */ @Getter @Setter public class VMenu implements Serializable { private static final long serialVersionUID = 130350349649865335L; /** * 主键 */ private Integer id; /** * 权限控制使用 */ private String url; /** * 前端请求路径 */ private String path; /** * 组件名 */ private String component; /** * 组件名称 */ private String name; /** * 菜单图标 */ private String iconCls; /** * 是否保活:前端是否在内存中销毁 */ private Boolean keepAlive; /** * 是否需要认证 */ private Boolean requireAuth; /** * 父级id */ private Integer parentId; /** * 是否启用 */ private Boolean enabled; private List<VMenu> children; } 其他省略…

Error: EACCES: permission denied

前言 在安装 vue 脚手架的时候,报错 Error: EACCES: permission denied # 安装 Vue CLI 3.x npm i -g @vue/cli 解决 执行以下命令就可以解决了 sudo npm install -g --unsafe-perm=true --allow-root 参考 https://stackoverflow.com/questions/38323880/error-eacces-permission-denied

Java中String类的分隔函数方法关于split(“s“)、split(“\\s“)和split(“\\s+“)的区别

结论: 1.split(“s”) 以字符s为分隔线,分隔后返回字符数组; 2.split("\s")以碰到的每个空格、换行符、回车为分隔线,如遇到连续多个空格、换行符、回车就会连续划分,分隔后返回字符数组; 3.split("\s+")以空格、换行符、回车为分隔线,相邻的多个空格、换行符、回车仍然视为只有一个,分隔后返回字符数组。 ** 示例代码: ** package Test; public class SplitTest { public static void main(String[] args) { String line = "this is a test sentence."; String[] arrayline1 = line.split("s"); String[] arrayline2 = line.split("\\s"); String[] arrayline3 = line.split("\\s+"); System.out.println("使用's'分隔成了" +arrayline1.length + "部分,分别是:"); for (String s : arrayline1) { System.out.print(s + ","); } System.out.println(""); System.out.println("使用'\\s'分隔成了" + arrayline2.length + "部分,分别是:"); for (String s : arrayline2) { System.out.print(s + ","); } System.

linux硬盘检测工具,linux下硬盘检测工具

-a | --all: equivalent to the combination -i -H -A -l error -l selftest options invoked in that order. -A | --attributes: outputs the current device temperature, trip temperature, the number of elements in the grown defect list (GLIST) and data from the start-stop log page. Outputs some vendor specific information if available. -C | --captive: used in conjunction with -t short or -t long options to do short or long self tests in the foreground.

linux 静态编译 glibc,GCC静态链接glibc库

如果你的编译环境是高版本的glibc库,而运行程序的环境(机器)安装的glibc是低版本的话,在运行程序的时候,就会告诉你 cannot find GLIBC_2.14 类似这样的错误,上面的2.14根据你链接的glibc版本不同而变化。 怎么解决这个问题呢?就是将glibc进行静态链接。在使用gcc编译链接的时候,默认是采用动态链接的方式,如果要指定静态链接glibc库,则使用 -static 选项。 例如: gcc main.cpp -static -o main 静态编译的后的文件会比之前打很多,一个hello world的程序,都能达到好几M,如我的64位的opensuse编译的hello world的程序达到8M多。 静态编译后可以使用nm或者objdump命令查看是不是还以来glibc nm main | grep GLIBC_ objdump -p | grep GLIBC_ 如果结果有输出: xxxx GLIBC_xx 说明依赖这个版本的glibc库。 或者直接使用ldd ldd main | grep GLIBC_ 上面的命令如果和其他动态库在一起编译就有问题, gcc main.cpp -static -o main -Wl, -Bdynamic -lxxx 问题是编译后的程序在执行的时候会报错: -bash: mian, no such file or directory 因此如果程序还要动态链接其他库则, gcc main.cpp -static-libgcc -static-libstdc++ -Wl, -Bdynamic -lxxx 注意上面的Wl,是大写的W和小写的L,不是大写的i 版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理. 分享到:

【史上最骚爬虫|疯狂爬取中国大学mooc】太燃了,爬虫vs慕课反爬世纪大战|No.1

爬取中国大学全网mooc:NO.1 作者:夜斗小神社 IDEA工具:PyCharm 抓包工具:Fiddler 时间:2021/5/2 小夜斗与爬虫已经很久没交流过辽,想着能重新把爬虫捡起来,这次就试一下mooc这个网站,希望能够做一个全网爬虫! 爬取结果是:mooc官网左侧的课程分类,并获取其跳转链接 一:通过Fiddler抓包分析 抓包过程很简单:打开Fiddler点击Caputre,刷新网页进行抓包 小夜斗通过分析发现这个课程分类url地址链接如下所示: # 1:课程分类网址 course_classify = 'https://www.icourse163.org/web/j/indexBeanV3.getCategoryInfo.rpc?csrfKey=10dc66f3f3eb49148d5bb5ad38269204' 看了一下也没有啥加密的参数,就是一个简单的POST请求 带时候带上请求头headers发送请求就可,请求头如下: # 2: 请求头 headers = {'全部copy下来,cookie千万不要漏掉'} ''' 替换规则:快速改变请求头格式 (.*?): (.*) '$1':'$2', ''' 二:开始着手写爬虫代码 (一):定义一个函数获取课程系列跳转链接 def get_channel(): # 1:课程分类网址 course_classify = 'https://www.icourse163.org/web/j/indexBeanV3.getCategoryInfo.rpc?csrfKey=10dc66f3f3eb49148d5bb5ad38269204' # 发起请求 r = requests.post(url=course_classify, headers=headers) try: if r.status_code == 200: # 获取json文本内容 content = r.json() print(content) # 获取计算机类的跳转链接 computer_href = content['result'][1]['targetUrl'] print(f'computer_href:{computer_href}') # 循环遍历拿去课程系列名和跳转链接 # 然后用字典来装载 channel_dict = {} for course in content['result']: # 获取channelName系列课程名 channelName = course['channelName'] # 获取目标链接 targetUrl = course['targetUrl'] channel_dict[channelName] = targetUrl print(f'channel_dict:{channel_dict}') return channel_dict except: print("

c 产生随机数

c 库提供产生随机数的函数rand(),需要引用stdio.h 和stdlib.h i = rand(); 但是获取的随机数比较大,获得固定位数的随机数的方法是截取 i = rand()/256; ·但是运行两次随机数函数获取的随机数是一致的,这个原因是随机种子没有更新,产生的随机数也就一致了。c 库提供一个改变随机种子的函数接口 srand() srand((unsigned)time(NULL)); i= rand(); 这样每次就更新了随机种子,产生的随机数就不一样。 在glibc 中的随机数产生的方式是open /dev/random 的方法,并非使用计算方法得到随机数,是依赖于系统中提供的随机数产生的接口,最终还是通过SHA 和MD5 这样的加密函数来实现的。

acwing-843.n-皇后问题

题目描述 n−皇后问题是指将 n 个皇后放在 n×n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n,请你输出所有的满足条件的棋子摆法。 输入格式 共一行,包含整数 n。 输出格式 每个解决方案占 n 行,每行输出一个长度为 n 的字符串,用来表示完整的棋盘状态。 其中 . 表示某一个位置的方格状态为空,Q 表示某一个位置的方格上摆着皇后。 每个方案输出完成后,输出一个空行。 注意:行末不能有多余空格。 输出方案的顺序任意,只要不重复且没有遗漏即可。 数据范围 1≤n≤9 输入样例: 4 输出样例: .Q… …Q Q… …Q. …Q. Q… …Q .Q… 题解代码如下 #include<bits/stdc++.h> using namespace std; const int N = 20; int n; char g[N][N]; bool col[N],dg[N],udg[N]; void dfs(int u){ if(u==n){ for(int i=0;i<n;i++) puts(g[i]); puts(""); return; } for(int i=0;i<n;i++){ if(!col[i] && !dg[u+i] && !

linux 脚本 中断,Shell脚本中断后进行运行

我以前一直使用一个脚本下载Ubuntu的源,Ubuntu 12.04的源,全部大概是120G,我1M带宽,要下载完,真的要10天时间。脚本运行过程中经常因为网络各种原因,中途退出和中断。 如果能让脚本退出后,自动继续运行呢?这是困惑我很久的问题,今天请教同事,终于搞定。 原理就是设置Crontab,检查一下脚本是否在运行,如果没有运行,就运行该脚本。如果在运行,就不进行任何操作。 我的ubuntu 下载脚本名字为:ubuntu_mirror.sh 编辑该脚本 在开始部分,增加下面内容 #!/bin/sh appname=`basename $0` nowdate=`date +%Y%m%d%H%M%S` echo $$ > ${nowdate}.${appname}.pid 在脚本末尾,有两个退出 : exit 1 和 exit 0 就是在exit 1 和exit 0 上面添加一行 rm ${nowdate}.${appname}.pid 创建一个master.sh 脚本 appname=$1 if [ -e *.${appname}.pid ]; then exit 0 else echo "running" nohup sh -x ./${appname} 1>${appname}.out 2>&1 & fi 让脚本可运行 chmod +x master.sh 最后你需要设置crontab 运行命令 crontab -e 插入下面内容,表示10分钟运行一次. 0,10,20,30,40,50 * * * * /root/master.sh ubuntu_mirror.sh

linux服务器无法识别u盘,linux系统下不能识别U盘

Linux系统对于USB的设备的支持关键在于驱动,没有驱动设备时mount执行是肯定不成的。 解决步骤: 1./sbin/lsmod看是否有usb-storage。如果没有的话:cd /lib/modules/2.4.20-8/kernel/drivers/usb for v in *.o storage/*.o do /sbin/insmod $v done 2.再执行/sbin/lsmod,这时该有usbcore、usb-ohci(或usb-uhci,根据主板芯片组而不同)、usb-storage、scsi_mod等内容显示。其中usb-storage的状态应该为 (unused) 3.重新拔插U盘,多次执行/sbin/lsmod命令,期间可以观察到usb-storage的状态应为Initializing,持续时间大约半分钟,这就是系统在识别新设备。在系统识别到之后再执行mount命令就能正常mount了。Linux不像Windows一样,接上新硬件后可以自动识别,在Linux下无法自动识别新硬件的,需要手动去识别。

linux不写日志,linux 重要日志

以下介绍的是20个位于/var/log/ 目录之下的日志文件。其中一些只有特定版本采用,如dpkg.log只能在基于Debian的系统中看到。 /var/log/messages — 包括整体系统信息,其中也包含系统启动期间的日志。此外,mail,cron,daemon,kern和auth等内容也记录在var/log/messages日志中。 /var/log/dmesg — 包含内核缓冲信息(kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。可以用dmesg查看它们。 /var/log/auth.log — 包含系统授权信息,包括用户登录和使用的权限机制等。 /var/log/boot.log — 包含系统启动时的日志。 /var/log/daemon.log — 包含各种系统后台守护进程日志信息。 /var/log/dpkg.log – 包括安装或dpkg命令清除软件包的日志。 /var/log/kern.log – 包含内核产生的日志,有助于在定制内核时解决问题。 /var/log/lastlog — 记录所有用户的最近信息。这不是一个ASCII文件,因此需要用lastlog命令查看内容。 /var/log/maillog /var/log/mail.log — 包含来着系统运行电子邮件服务器的日志信息。例如,sendmail日志信息就全部送到这个文件中。 /var/log/user.log — 记录所有等级用户信息的日志。 /var/log/Xorg.x.log — 来自X的日志信息。 /var/log/alternatives.log – 更新替代信息都记录在这个文件中。 /var/log/btmp – 记录所有失败登录信息。使用last命令可以查看btmp文件。例如,”last -f /var/log/btmp | more“。 /var/log/cups — 涉及所有打印信息的日志。 /var/log/anaconda.log — 在安装Linux时,所有安装信息都储存在这个文件中。 /var/log/yum.log — 包含使用yum安装的软件包信息。 /var/log/cron — 每当cron进程开始一个工作时,就会将相关信息记录在这个文件中。 /var/log/secure — 包含验证和授权方面信息。例如,sshd会将所有信息记录(其中包括失败登录)在这里。 /var/log/wtmp或/var/log/utmp — 包含登录信息。使用wtmp可以找出谁正在登陆进入系统,谁使用命令显示这个文件或信息等。 /var/log/faillog – 包含用户登录失败信息。此外,错误登录命令也会记录在本文件中。

centos部署janus 系列文章二 janus配置和管理

centos部署janus -janus配置和管理 前言一、配置1.环境和资料准备2.Tengine 反向代理Janus服务器2.1.Tengine 下载安装2.1.2 Tengine 配置2.1.3 验证Tengine配置 3.部署demo4.配置Janus4.1.给Janus配置ICE(turn、stun)4.2.启用管理端点 4.启动Janus验证配置5.验证 总结相关文章 前言 这是CentOS部署Janus服务器的第二篇,我们来配置Janus让其可正常运行官方提供的demo。 提示:以下是本篇文章正文内容,涉及到另外组件的使用,博主的其它文章可供参考 一、配置 1.环境和资料准备 环境版本CentOS(公网IP服务器)7.6Janusv0.10.10coturn4.5.1Tengine (nginx)Tengine/2.3.3 , nginx/1.18.0SSL证书crt后缀的 2.Tengine 反向代理Janus服务器 为何要在Janus之上做反向代理?Janus也能配置SSL为何还要用Nginx? 1.一般实际使用下不建议直接客户端访问Janus,通过Nginx、SLB之类的中间件我们掌握了对访问更多的控制。 同理,最佳使用还是将SSL配置到SLB上去,不要让Janus承受额外的压力。 2.1.Tengine 下载安装 wget http://tengine.taobao.org/download/tengine-2.3.3.tar.gz tar -zxvf tengine-2.3.3.tar.gz cd tengine-2.3.3 ./configure make && make install 默认安装到了/usr/local/nginx目录 2.1.2 Tengine 配置 修改配置文件conf/nginx.conf 监听8089/janus 为janus RESTful API的端点 监听7889/admin 为Janus Server的管理端点 ssl_certificate和ssl_certificate_key分别为SSL证书的证书和key文件 server { listen 8089 ssl; listen 7889 ssl; server_name localhost; ssl_certificate /usr/local/tomcat/apache-tomcat-8.5.61/cert/demo.com_server.crt; ssl_certificate_key /usr/local/tomcat/apache-tomcat-8.5.61/cert/demo.com_server.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.

Filecoin之优化版

关于代码优化提高性能或达到其他目的还是需要慎重的,毕竟这个对技术要求挺高,不仅要熟悉官方代码的机制原理,还要对编程语言非常熟悉。所以一般情况下并不建议大家自行做代码优化,如果使用第三方的优化也需要慎重。 直接在官方代码上的修改建议不要使用,如果官方强制升级,但是第三方没有相应升级,则无法继续使用。最好使用第三方的插件或扩展优化,即可以随时插拔。以下是社区的一些第三方优化项目,可以作为参考。尽量使用第三方的官方地址,不要再使用二次修改的代码,有可能会有安全问题。 P2优化:https://github.com/filguard/rust-fil-proofs C2优化:https://github.com/jackoelv/bellperson 调度计划优化:https://github.com/moran666666/lotus-1.5.0 有网友反馈说优化没有效果,当然有可能是官方升级或其他原因,大家自行甄别。

Linux设置一个网卡IP地址,linux下一块网卡设置多个ip地址(示例代码)

无论是在实际的生产坏境中,还是平时的练习中, 一个网卡设置多个ip地址是非常常见的,也是非常有用的。 我们以centos6.8系统为列, 在一块网卡上设置多个ip地址。 1>. 给一块网卡设置多个ip地址这个功能可能会受到NetworkManager服务的影响,首先关闭NetworkManager服务,并且开机自启也关闭。[[email protected] network-scripts]# service NetworkManager stop Stopping NetworkManager daemon: [ OK ] [[email protected] network-scripts]# chkconfig NetworkManager off 2>. 查看当前系统的ip地址和网卡的设备名。 [[email protected] network-scripts]# ifconfigeth0 Link encap:Ethernet HWaddr 00:0C:29:B3:32:CC inet addr:192.168.203.138 Bcast:192.168.203.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:feb3:32cc/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3964 errors:0 dropped:0 overruns:0 frame:0 TX packets:1193 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:328092 (320.4 KiB) TX bytes:167348 (163.4 KiB)

常用的linux巡检命令,linux常用巡检命令

linux系统需要定期的巡检,以检查系统软硬件的使用情况,下面由学习啦小编为大家整理了linux巡检命令的相关知识,希望大家喜欢! linux常用巡检命令一 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计算机名 # lspci -tv # 列出所有PCI设备 # lsusb -tv # 列出所有USB设备 # lsmod # 列出加载的内核模块 # env # 查看环境变量 # free -m # 查看内存使用量和交换区使用量 # df -h # 查看各分区使用情况 # du -sh < 目录名> # 查看指定目录的大小 # grep MemTotal /proc/meminfo # 查看内存总量 # grep MemFree /proc/meminfo # 查看空闲内存量