他说:“人之为学,心中思想,口内谈论,尽有百千义理,不如身上行一理之为实也”,“读书无他道,只须在‘行’字著力”(《颜习斋先生言行录》卷上)
腾讯实习生面试2016两道面试题目?
Unix/LinuxC技术 jackxiang 2016-4-17 23:06
在参加腾讯实习生2016面试时,有两道问题自己没有想清楚也思考的不是很明白,面试结束时后悔没有问正解是什么,回来后在搜索引擎上也没有搜到相关的问题。
第一道:"在多线程环境下,有大量并发, 有一个百万次出现一次bug, 如何调试这个bug。"
第二道是面试官给我的试卷上面的。"有一个类指针,指向类实例化的对象,在程序的运行过程中,这个类指针指向的对象崩溃了,这个类指针的虚函数表被破坏了,如何定位这个问题?"
所以,我想问下这两道题目该怎么回答, 谢谢谢谢!!!
知乎网友洋耗子答曰:
因为这些都是假设性问题,所以一般都只能说排查问题的思路:
问题一:
1:其实100万分之一的几率并不算很低。一个繁忙一点的服务,每秒一万个请求是很正常的(如果业务简单,还能更高)。所以百万分之一的复现概率,相当于在压力测试下几分钟就能出一次了。所以在道理上,如果有服务以这个几率出现bug,让它上线本身就是测试部门的失职。
2:反过来说,既然几分钟就能复现,那就在测试环境里压就好了,想怎么改就怎么改,想怎么打log就怎么打log。
3:假定测试环境的压测真的没出来,真的线上出现这样的问题(例如说压测的用例没有覆盖到)。首先考虑的是回滚服务到旧版,以确保正常业务不出问题。然后在线上环境提取某台机,用类似tcpcopy这样的软件导一份数据到测试环境中,来测试这个有问题的版本。这时候,既然是测试环境,你想怎么办都行(不影响线上服务)。
4:到了真正去分析bug了,那首先确定bug的类型。例如说如果能core dump的话相对好办一些,因为可以从core dump大概能看出或者猜出一些东西来。而如果并不core dump,而只是导致数据错乱的话,那就要做数据出入口的校验等。
5:在各顶级模块的入口出口打log,定位发生bug时所在的模块,然后逐步收敛。
6:确定这些模块以及关联影响的模块,单独提取这些模块出来,进行测试或者code review,最终确定问题。
问题二:
1:这类bug,一般都涉及越界操作。
2:一般这类bug,大多数都是可以通过静态code review解决的。既然知道是那个类,盯着用到这些类的实例的地方就行(包括这些类实例的前后几个对象,因为有可能是它们越界)。
3:一些工具,例如valgrind、purify之类的,也有可能有帮助(不一定肯定有用,但一般还是挺有用的)。
朋友!你也别纠结了,因为这两题答不出,拿不到实习不是你的错。
第一道:"在多线程环境下,有大量并发, 有一个百万次出现一次bug, 如何调试这个bug。"
第二道是面试官给我的试卷上面的。"有一个类指针,指向类实例化的对象,在程序的运行过程中,这个类指针指向的对象崩溃了,这个类指针的虚函数表被破坏了,如何定位这个问题?"
所以,我想问下这两道题目该怎么回答, 谢谢谢谢!!!
知乎网友洋耗子答曰:
因为这些都是假设性问题,所以一般都只能说排查问题的思路:
问题一:
1:其实100万分之一的几率并不算很低。一个繁忙一点的服务,每秒一万个请求是很正常的(如果业务简单,还能更高)。所以百万分之一的复现概率,相当于在压力测试下几分钟就能出一次了。所以在道理上,如果有服务以这个几率出现bug,让它上线本身就是测试部门的失职。
2:反过来说,既然几分钟就能复现,那就在测试环境里压就好了,想怎么改就怎么改,想怎么打log就怎么打log。
3:假定测试环境的压测真的没出来,真的线上出现这样的问题(例如说压测的用例没有覆盖到)。首先考虑的是回滚服务到旧版,以确保正常业务不出问题。然后在线上环境提取某台机,用类似tcpcopy这样的软件导一份数据到测试环境中,来测试这个有问题的版本。这时候,既然是测试环境,你想怎么办都行(不影响线上服务)。
4:到了真正去分析bug了,那首先确定bug的类型。例如说如果能core dump的话相对好办一些,因为可以从core dump大概能看出或者猜出一些东西来。而如果并不core dump,而只是导致数据错乱的话,那就要做数据出入口的校验等。
5:在各顶级模块的入口出口打log,定位发生bug时所在的模块,然后逐步收敛。
6:确定这些模块以及关联影响的模块,单独提取这些模块出来,进行测试或者code review,最终确定问题。
问题二:
1:这类bug,一般都涉及越界操作。
2:一般这类bug,大多数都是可以通过静态code review解决的。既然知道是那个类,盯着用到这些类的实例的地方就行(包括这些类实例的前后几个对象,因为有可能是它们越界)。
3:一些工具,例如valgrind、purify之类的,也有可能有帮助(不一定肯定有用,但一般还是挺有用的)。
朋友!你也别纠结了,因为这两题答不出,拿不到实习不是你的错。
背景:T60P装了一个win10后安装一个secureCRT后,用tab时出现win10的默认系统声音,如何关掉?
把鼠标放电脑桌面空白处右键,然后点击弹窗下方的“个性化”进入个性化设置。
在个性化设置窗口点击“主题”选项进入主题设置。
在主题设置界面点击主题相关的设置下的“高级声音设置”进入声音设置界面。
在声音设置页面,点开声音方案下小长框右侧的展开符号“∨”,进入声音方案选项。
在展开的声音方案中点选“无声”,然后进行下一步确认操作。
选好声音方案后,先点击右下角的“应用”,再“确定”。此刻Win10系统提示音就关闭了。
图文:http://jingyan.baidu.com/article/d71306352f095b13fdf47591.html
把鼠标放电脑桌面空白处右键,然后点击弹窗下方的“个性化”进入个性化设置。
在个性化设置窗口点击“主题”选项进入主题设置。
在主题设置界面点击主题相关的设置下的“高级声音设置”进入声音设置界面。
在声音设置页面,点开声音方案下小长框右侧的展开符号“∨”,进入声音方案选项。
在展开的声音方案中点选“无声”,然后进行下一步确认操作。
选好声音方案后,先点击右下角的“应用”,再“确定”。此刻Win10系统提示音就关闭了。
图文:http://jingyan.baidu.com/article/d71306352f095b13fdf47591.html
先进入设置,再进入到系统 – 通知和操作 – 选择在任务栏上显示哪些图标.如何进入到设置有两种方法:
方法一:
(1)打开Win10开始菜单,即可在左下角看到“Settings(设置)”,点击即可打开“设置”应用。
方法二:
点击屏幕右下角任务栏托盘区中的“通知中心”图标打开“通知和操作中心”,在其中即可看到类似于Windows Phone“通知 + 操作中心”里的“All Settings(所有设置)”按钮。
点击即可打开“设置”应用。
进入设置后,再依次进入“系统 – 通知和操作”,点击“选择在任务栏上显示哪些图标”,把“通知区域始终显示所有图标”设置为“开”,这时你会发现下面的具体每个应用图标的设置状态都变成灰色不可设置,同时屏幕右下角的通知区域(系统托盘)中会显示所有的应用图标,向上箭头状的“隐藏”按钮也不见了,原来隐藏的图标都显示出来了。
如果你觉得所有的图标显示出来没有必要,那么也可以不把“通知区域始终显示所有图标”设置为“开”,只需把下面想要显示图标的应用(例如QQ)设置为“开”即可。这样设置为“开”图标就会显示在通知区域,而其它没必要显示的图标还是被隐藏起来。
在使用Windows10系统的过程中,突然发现屏幕右下角的任务栏通知区域的声音、网络、输入法、时钟、电源、操作中心等系统图标中的一个或几个不见了。
Win10任务栏通知区域的音量、网络、输入法图标不见了怎么办?参看:http://www.windows10.pro/win10-volume-network-input-method-icon-disappeared/
方法一:
(1)打开Win10开始菜单,即可在左下角看到“Settings(设置)”,点击即可打开“设置”应用。
方法二:
点击屏幕右下角任务栏托盘区中的“通知中心”图标打开“通知和操作中心”,在其中即可看到类似于Windows Phone“通知 + 操作中心”里的“All Settings(所有设置)”按钮。
点击即可打开“设置”应用。
进入设置后,再依次进入“系统 – 通知和操作”,点击“选择在任务栏上显示哪些图标”,把“通知区域始终显示所有图标”设置为“开”,这时你会发现下面的具体每个应用图标的设置状态都变成灰色不可设置,同时屏幕右下角的通知区域(系统托盘)中会显示所有的应用图标,向上箭头状的“隐藏”按钮也不见了,原来隐藏的图标都显示出来了。
如果你觉得所有的图标显示出来没有必要,那么也可以不把“通知区域始终显示所有图标”设置为“开”,只需把下面想要显示图标的应用(例如QQ)设置为“开”即可。这样设置为“开”图标就会显示在通知区域,而其它没必要显示的图标还是被隐藏起来。
在使用Windows10系统的过程中,突然发现屏幕右下角的任务栏通知区域的声音、网络、输入法、时钟、电源、操作中心等系统图标中的一个或几个不见了。
Win10任务栏通知区域的音量、网络、输入法图标不见了怎么办?参看:http://www.windows10.pro/win10-volume-network-input-method-icon-disappeared/
[实践OK]rpmbuild报error: Installed (but unpackaged) file(s) found的解决办法
Unix/LinuxC技术 jackxiang 2016-4-13 17:02
背景:在打php7.0.2下的apcu扩展包时,出现 Installed (but unpackaged) file(s) found,这块是因为它不光生成了.so外,还有一些涉及到.h的头文件在里面,可用于c开发,而我们只运行PHP不做开发,也就没有必要打进去,如果有必要则把它的文件及目录全路径写进%files里去,这儿我们就直接在install里删除掉这个目录下的所有文件及可,两种方法任取一个吧,都有实践且成功生成rpm无错误提示,如下。
方法一,来个保留文件且不报but unpackaged的PHP的igbinary扩展情况(视具体情况是删除还是添加选一个即可):
现象:RPM build errors:
Installed (but unpackaged) file(s) found:
/usr/local/php/include/php/ext/igbinary/igbinary.h
添加成功解决办法如下:
%files
%defattr(-,root,root,-)
%{php_extdir}/igbinary.so
# 防止出现:error: Installed (but unpackaged) file(s) found错误。
/usr/local/php/include/php/ext/igbinary/igbinary.h
生成的rpm包里有前面在%files里添加的这个文件,如下:
rpm -qpl /home/test/rpmbuild/RPMS/x86_64/igbinary-php55-1.2.1-160418145033.el6.x86_64.rpm
/usr/local/php/ext/igbinary.so
/usr/local/php/include/php/ext/igbinary/igbinary.h
假如想删除上面rpm包里的igbinary.so的igbinary.h文件,也就在install里把这个文件删除即可:
再次编译生成的rpm包里也就没有了那个.h文件如下:
[root@localhost SPECS]# rpm -qpl /home/test/rpmbuild/RPMS/x86_64/igbinary-php55-1.2.1-160418145849.el6.x86_64.rpm
/usr/local/php/ext/igbinary.so
方法二,下面是直接删除的解决办法,实践OK(视具体情况是删除还是添加选一个即可):
也就不报错了,也就解决了这个包不放到里面去且不用修改rpmbuild的配置,也不报错了,如下:
Wrote: /home/test/rpmbuild/RPMS/x86_64/apcu-php70-5.1.3-160418143835.el6.x86_64.rpm
rpm -qpl /home/test/rpmbuild/RPMS/x86_64/apcu-php70-5.1.3-160418143835.el6.x86_64.rpm
/usr/local/php/ext/apcu.so
======================================================================================
编译打包apcu:
rpmbuild -ba php-7.0.5-extension-apcu-5.1.3.spec
出现如下报错提示,扩展代码编译打包出现如下提示:
阅读全文
方法一,来个保留文件且不报but unpackaged的PHP的igbinary扩展情况(视具体情况是删除还是添加选一个即可):
现象:RPM build errors:
Installed (but unpackaged) file(s) found:
/usr/local/php/include/php/ext/igbinary/igbinary.h
添加成功解决办法如下:
%files
%defattr(-,root,root,-)
%{php_extdir}/igbinary.so
# 防止出现:error: Installed (but unpackaged) file(s) found错误。
/usr/local/php/include/php/ext/igbinary/igbinary.h
生成的rpm包里有前面在%files里添加的这个文件,如下:
rpm -qpl /home/test/rpmbuild/RPMS/x86_64/igbinary-php55-1.2.1-160418145033.el6.x86_64.rpm
/usr/local/php/ext/igbinary.so
/usr/local/php/include/php/ext/igbinary/igbinary.h
假如想删除上面rpm包里的igbinary.so的igbinary.h文件,也就在install里把这个文件删除即可:
再次编译生成的rpm包里也就没有了那个.h文件如下:
[root@localhost SPECS]# rpm -qpl /home/test/rpmbuild/RPMS/x86_64/igbinary-php55-1.2.1-160418145849.el6.x86_64.rpm
/usr/local/php/ext/igbinary.so
方法二,下面是直接删除的解决办法,实践OK(视具体情况是删除还是添加选一个即可):
也就不报错了,也就解决了这个包不放到里面去且不用修改rpmbuild的配置,也不报错了,如下:
Wrote: /home/test/rpmbuild/RPMS/x86_64/apcu-php70-5.1.3-160418143835.el6.x86_64.rpm
rpm -qpl /home/test/rpmbuild/RPMS/x86_64/apcu-php70-5.1.3-160418143835.el6.x86_64.rpm
/usr/local/php/ext/apcu.so
======================================================================================
编译打包apcu:
rpmbuild -ba php-7.0.5-extension-apcu-5.1.3.spec
出现如下报错提示,扩展代码编译打包出现如下提示:
阅读全文
背景:在网上找一个开要自启动的shell代码放上去后,直接添加服务提示service redis does not support chkconfig,后加上下面两行O了。
加上两行就好了,如下:
[root@localhost SOURCES]# /sbin/chkconfig --add redis
[root@localhost SOURCES]# chkconfig --list|grep redis
redis 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@localhost SOURCES]# /sbin/chkconfig redis on
[root@localhost SOURCES]# chkconfig --list|grep redis
redis 0:off 1:off 2:on 3:on 4:on 5:on 6:off
阅读全文
加上两行就好了,如下:
[root@localhost SOURCES]# /sbin/chkconfig --add redis
[root@localhost SOURCES]# chkconfig --list|grep redis
redis 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@localhost SOURCES]# /sbin/chkconfig redis on
[root@localhost SOURCES]# chkconfig --list|grep redis
redis 0:off 1:off 2:on 3:on 4:on 5:on 6:off
阅读全文
[实践Ok]SecureCRT 控制列宽显示,secureCRT 改变显示宽度。
Unix/LinuxC技术 jackxiang 2016-4-12 17:35
因为老是出现好像刚连接时出现行数没有对齐,得ctrl+l一下才能修改到正确的地方,估计是和字体有关系,此次再次实践注意一下:
1)全局设置:Options - Global Options - Terminal - Appearance - Maximumcolumns - 256,并勾选上show horizontal scroll bar。
2)session设置:Options - Session Options - Terminal -Emulation - Logical Columns设置成255,勾选上Retain size and font,Logicalrows设置成42(刚好满屏)、Scrollbackbuffer设置成5000(这样纵向滚动屏就可以缓存更多内容,但占内存),另外Terminal - Appearance - Window -选上Show horizontal scroll bar,然后重新连接。
=============================================================================================
经常会碰到这种问题,在LINUX上使用isql命令加-w 500参数连到SYBASE数据库中做select查询的结果老是显示混乱.很是郁闷,由于我是在SecureCRT连入到LINUX的,在网上也没有找到合适的答案,PUTTY倒是看到有解决的方法.可惜SecureCRT没找到.
今天无意中发现SecureCRT也有设置的地方,可惜不好传图片,就文字说明一下吧
设置方法
当你用SecureCRT建好一个连接后,在这个连接上点右键,再点 Properties (或直接按快捷键 ALT+ENTER) ,这时再点 Emulation 在右边的 Size 下的 Logical 栏中输入列宽的大小,像我的Windows屏幕是 1024*768的, 在这里我输入了500,然后再选中 右边单选项Onresize 中的 Retain size and font ,选好后再点OK,连接到 Linux ,这时屏幕下方会有一个滚动条,呵呵.再用
isql -w 5000 -Usa -P -SSERVER 连到sybase 查询一条命令试试
1> sp_helpdb
2> go
呵呵.是不是很漂亮了,再也不会混乱了..
来自:http://blog.chinaunix.net/uid-310409-id-2439822.html
阅读全文
1)全局设置:Options - Global Options - Terminal - Appearance - Maximumcolumns - 256,并勾选上show horizontal scroll bar。
2)session设置:Options - Session Options - Terminal -Emulation - Logical Columns设置成255,勾选上Retain size and font,Logicalrows设置成42(刚好满屏)、Scrollbackbuffer设置成5000(这样纵向滚动屏就可以缓存更多内容,但占内存),另外Terminal - Appearance - Window -选上Show horizontal scroll bar,然后重新连接。
=============================================================================================
经常会碰到这种问题,在LINUX上使用isql命令加-w 500参数连到SYBASE数据库中做select查询的结果老是显示混乱.很是郁闷,由于我是在SecureCRT连入到LINUX的,在网上也没有找到合适的答案,PUTTY倒是看到有解决的方法.可惜SecureCRT没找到.
今天无意中发现SecureCRT也有设置的地方,可惜不好传图片,就文字说明一下吧
设置方法
当你用SecureCRT建好一个连接后,在这个连接上点右键,再点 Properties (或直接按快捷键 ALT+ENTER) ,这时再点 Emulation 在右边的 Size 下的 Logical 栏中输入列宽的大小,像我的Windows屏幕是 1024*768的, 在这里我输入了500,然后再选中 右边单选项Onresize 中的 Retain size and font ,选好后再点OK,连接到 Linux ,这时屏幕下方会有一个滚动条,呵呵.再用
isql -w 5000 -Usa -P -SSERVER 连到sybase 查询一条命令试试
1> sp_helpdb
2> go
呵呵.是不是很漂亮了,再也不会混乱了..
来自:http://blog.chinaunix.net/uid-310409-id-2439822.html
阅读全文
今天svn提交发现错误
#cd /home/svn/app/
# svn up
Summary of conflicts:
Skipped paths: 1
Skipped 'http://justwinit.com/application/controllers/admin/main.phpl'
At revision 5073.
Summary of conflicts:
Skipped paths: 1
Skipped 'http://justwinit/index.html'
U /xxxxxx/index.html
处理方式:
#cd /home/svn/app/
#mkdir /root/bak
#mv /home/svn/app/* /root/bak/
#svn revert .
#svn up
如果还是不可以,出绝招:
svn remove --force filename
svn resolve --accept=working filename
svn up
我的解决办法是直接把那些有问题的删除掉:
cd domain目录根下直接删除:
rm -Rf application/controllers/admin/main.php
再次svn up一下即可。
From:http://www.fulingjiang.cn/linux/78.html
解决办法:
svn resolve --accept working 文件名
注:用svn resolve --accept theirs-full 文件名
提示:svn: warning: Tree conflicts can only be resolved to 'working' state; 文件名 not resolved
#cd /home/svn/app/
# svn up
Summary of conflicts:
Skipped paths: 1
Skipped 'http://justwinit.com/application/controllers/admin/main.phpl'
At revision 5073.
Summary of conflicts:
Skipped paths: 1
Skipped 'http://justwinit/index.html'
U /xxxxxx/index.html
处理方式:
#cd /home/svn/app/
#mkdir /root/bak
#mv /home/svn/app/* /root/bak/
#svn revert .
#svn up
如果还是不可以,出绝招:
svn remove --force filename
svn resolve --accept=working filename
svn up
我的解决办法是直接把那些有问题的删除掉:
cd domain目录根下直接删除:
rm -Rf application/controllers/admin/main.php
再次svn up一下即可。
From:http://www.fulingjiang.cn/linux/78.html
解决办法:
svn resolve --accept working 文件名
注:用svn resolve --accept theirs-full 文件名
提示:svn: warning: Tree conflicts can only be resolved to 'working' state; 文件名 not resolved
༒࿈背༙྇景༙྇:࿈༒STR_TO_DATE(str,format) 这是DATE_FORMAT()函数的反函数。它需要一个字符串str和一个格式字符串格式。STR_TO_DATE()返回一个DATETIME值。
开发要求,获取当月佣金,主要卡在了sql对datetime 类型的判断
先后用过4种方法如下
1.select sum('price') from rrr_order_level where active_time < "2015-09-30 00:00:00";
2.select sum('price') from rrr_order_level where timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00') > 0
3.select sum('price') from rrr_order_level where active_time < '$EndDate' and active_time > '$BeginDate'"
4.select sum('price') from rrr_order_level where active_time between '2015-09-01 00:00:00' and '2015-09-30 00:00:00';
数据库如上
分析错误,mysql不知道对应的年月日,无法比较,采用
select sum(price) from rrr_order_level where active_time >= STR_TO_DATE('2015-09-01 00:00:00','%Y-%m-%d %H:%i:%s') and active_time <= STR_TO_DATE('2015-09-30 00:00:00','%Y-%m-%d %H:%i:%s');
完美解决问题!
开发要求,获取当月佣金,主要卡在了sql对datetime 类型的判断
先后用过4种方法如下
1.select sum('price') from rrr_order_level where active_time < "2015-09-30 00:00:00";
2.select sum('price') from rrr_order_level where timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00') > 0
3.select sum('price') from rrr_order_level where active_time < '$EndDate' and active_time > '$BeginDate'"
4.select sum('price') from rrr_order_level where active_time between '2015-09-01 00:00:00' and '2015-09-30 00:00:00';
数据库如上
分析错误,mysql不知道对应的年月日,无法比较,采用
select sum(price) from rrr_order_level where active_time >= STR_TO_DATE('2015-09-01 00:00:00','%Y-%m-%d %H:%i:%s') and active_time <= STR_TO_DATE('2015-09-30 00:00:00','%Y-%m-%d %H:%i:%s');
完美解决问题!
如何搭建一个git服务器?
Unix/LinuxC技术 jackxiang 2016-4-11 23:14
༒࿈背༙྇景༙྇:༒࿈这༙྇个༙྇༒࿈还༙྇是༙྇༒࿈0༙྇༒࿈9༙྇༒࿈年༙྇༒࿈开༙྇始༙྇༒࿈兴༙྇起༙྇,༒࿈现༙྇在༙྇༒࿈火༙྇起༙྇来༙྇༒࿈了༙྇。࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒
GitHub是一个免费托管开源代码的Git服务器,如果我们不想公开项目的源代码,又不想付费使用,那么我们可以自己搭建一台Git服务器。首先你需要一台client和一台server。client可以是windows系统,利用git bash或者cywin类似的软件来执行指令,也可以是ubuntu等linux系统,server可以是本地搭建的服务器,也可以是云服务器。例如:阿里云服务器,对大学生有很大的优惠,非常划算!(没有任何的利益关系)
1.在本机上安装openssh
在linux client上安装ssh服务,如果是windows的安装git for windows
sudo apt-get install openssh-server
可以查看ssh服务是否开启
ps -e | grep ssh
2.在server上创建一个git用户
sudo adduser git
3.在server上安装git
sudo apt-get install git-core
4.在server上初始化仓库
cd /home/git/
git init --bare myRep.git
5.通过git clone命令进行克隆远程仓库
git clone git@{your server ip}:/home/git/myRep.git
这里都必须知道server上git用户的登入密码。
GitHub是一个免费托管开源代码的Git服务器,如果我们不想公开项目的源代码,又不想付费使用,那么我们可以自己搭建一台Git服务器。首先你需要一台client和一台server。client可以是windows系统,利用git bash或者cywin类似的软件来执行指令,也可以是ubuntu等linux系统,server可以是本地搭建的服务器,也可以是云服务器。例如:阿里云服务器,对大学生有很大的优惠,非常划算!(没有任何的利益关系)
1.在本机上安装openssh
在linux client上安装ssh服务,如果是windows的安装git for windows
sudo apt-get install openssh-server
可以查看ssh服务是否开启
ps -e | grep ssh
2.在server上创建一个git用户
sudo adduser git
3.在server上安装git
sudo apt-get install git-core
4.在server上初始化仓库
cd /home/git/
git init --bare myRep.git
5.通过git clone命令进行克隆远程仓库
git clone git@{your server ip}:/home/git/myRep.git
这里都必须知道server上git用户的登入密码。
shell脚本执行返回的状态码,shell返回值环境变量之shell将其返回值赋值给$?环境变量,以及在Mysql备份导出mysqldump中的使用示例。
Php/Js/Shell/Go jackxiang 2016-4-11 16:25
背景:shell在执行一些程序时,其返回值影响后面用&&或||来进行判断,特别是以rpmbuild来举例说明,其在post和postun用到一些删除某些服务啥的,出现返回值不是1,导致rpm -e xxx,出现错误,卸载报错 /var/tmp/rpm-tmp.ELL6uY: line 3: /sbin/chkconfig: No such file or directory,这些都是和这个shell返回值有很大关系的。
返回值,失败示例,返回1值:
shell执行成功示例,返回0值:
二、在Mysql备份导出mysqldump中的使用示例:
=========================================================
每个命令都有一个返回值(返回状态或者退出状态)。命令执行成功的返回值总是0(零值),执行失败的命令,返回一个非0值(错误码)。错误码必须是一个1到255之间的整数。
在编写脚本时,另一个很有用的命令是exit。这个命令被用来终止当前的执行,并把返回值交给shell。当exit不带任何参数时,它会终止当前脚本的执行并返回在它之前最后一个执行的命令的返回值。
一个程序运行结束后,shell将其返回值赋值给$?环境变量。因此$?变量通常被用来检测一个脚本执行成功与否。
与使用exit来结束一个脚本的执行类似,我们可以使用return命令来结束一个函数的执行并将返回值返回给调用者。当然,也可以在函数内部用exit,这 不但 会中止函数的继续执行,而且 会终止整个程序的执行。
摘自:https://github.com/liushuaikobe/bash-handbook-zh-CN#%E4%BA%A4%E4%BA%92%E6%A8%A1%E5%BC%8F
Linux下一条命令或一个进程执行完成会返回一个一个状态码。
0 === 成功执行
非0 === 执行过程中出现异常或非正常退出
在Shell脚本中 最后执行的一条命令将决定整个shell脚本的状态. 此外 shell的内部命令exit也可以随时终止shell脚本的执行,返回Shell脚本的状态码
当shell脚本执行结束前 的最后一个命令是不带参数的exit ,那么 shell脚本的最终返回值 就是 exit 语句前一条语句的返回值,根据这个值可以判断脚本成功执行与否。
$? 可以查看 最后一条命令的返回值 该变量可以在shell 脚本中的任何地方使用.
来自:http://www.cnblogs.com/MyEyes/archive/2012/01/12/2320529.html
返回值,失败示例,返回1值:
shell执行成功示例,返回0值:
二、在Mysql备份导出mysqldump中的使用示例:
=========================================================
每个命令都有一个返回值(返回状态或者退出状态)。命令执行成功的返回值总是0(零值),执行失败的命令,返回一个非0值(错误码)。错误码必须是一个1到255之间的整数。
在编写脚本时,另一个很有用的命令是exit。这个命令被用来终止当前的执行,并把返回值交给shell。当exit不带任何参数时,它会终止当前脚本的执行并返回在它之前最后一个执行的命令的返回值。
一个程序运行结束后,shell将其返回值赋值给$?环境变量。因此$?变量通常被用来检测一个脚本执行成功与否。
与使用exit来结束一个脚本的执行类似,我们可以使用return命令来结束一个函数的执行并将返回值返回给调用者。当然,也可以在函数内部用exit,这 不但 会中止函数的继续执行,而且 会终止整个程序的执行。
摘自:https://github.com/liushuaikobe/bash-handbook-zh-CN#%E4%BA%A4%E4%BA%92%E6%A8%A1%E5%BC%8F
Linux下一条命令或一个进程执行完成会返回一个一个状态码。
0 === 成功执行
非0 === 执行过程中出现异常或非正常退出
在Shell脚本中 最后执行的一条命令将决定整个shell脚本的状态. 此外 shell的内部命令exit也可以随时终止shell脚本的执行,返回Shell脚本的状态码
当shell脚本执行结束前 的最后一个命令是不带参数的exit ,那么 shell脚本的最终返回值 就是 exit 语句前一条语句的返回值,根据这个值可以判断脚本成功执行与否。
$? 可以查看 最后一条命令的返回值 该变量可以在shell 脚本中的任何地方使用.
来自:http://www.cnblogs.com/MyEyes/archive/2012/01/12/2320529.html
win10怎么切换输入法?这和WIN8差不多的。跟WIN7\XP完成不一样的哦!我使有的方法有三种有需要的朋友可以往下看,希望可以帮到有需要的朋友。
方法/步骤
比较常用的使用[WIN+空格键]
Win10怎么输入法切换
出现选择输入法的界面,再按一次就是切换另一个输入法。
Win10怎么输入法切换
中英文快速 切换法。按[Shift+Alt],如果需要快速的切换可以使用这种方法。不过国内的输入法都有自带快速切换的按键[Shift]
Win10怎么输入法切换
4
还有就是在桌面上的任务栏处的语言处点击一下,然后再选择你想要的输入法。
来自:http://jingyan.baidu.com/article/b7001fe16bc0820e7382dd69.html
windows10输入法如何去掉inputmode:
http://jingyan.baidu.com/article/17bd8e522cac8285ab2bb8a9.html
方法/步骤
比较常用的使用[WIN+空格键]
Win10怎么输入法切换
出现选择输入法的界面,再按一次就是切换另一个输入法。
Win10怎么输入法切换
中英文快速 切换法。按[Shift+Alt],如果需要快速的切换可以使用这种方法。不过国内的输入法都有自带快速切换的按键[Shift]
Win10怎么输入法切换
4
还有就是在桌面上的任务栏处的语言处点击一下,然后再选择你想要的输入法。
来自:http://jingyan.baidu.com/article/b7001fe16bc0820e7382dd69.html
windows10输入法如何去掉inputmode:
http://jingyan.baidu.com/article/17bd8e522cac8285ab2bb8a9.html
在linux下如何将文件夹压缩成.tgz文件的?
Unix/LinuxC技术 jackxiang 2016-4-8 17:52
背景:经常看到PHP的一些扩展均是以tgz后续提供的,那这个包是怎么打出来的呢?
linux中.tgz是.tar.gz的缩写,我们在解压.tgz文件时可直接使用tar命令来操作。
tar xzf xlswriter-1.3.6.tgz ??old five
————————————————————————————————————————
.tgz
解压:tar zxvf FileName.tgz
压缩:未知
.tar.tgz
解压:tar zxvf FileName.tar.tgz
压缩:tar zcvf 搜索FileName.tar.tgz FileName
php-5.5.34/ext
cp zip-1.13.2forphp-5.5.34.spec zlib-5.5.34forphp-5.5.34.spec
cp zip-1.13.2forphp-5.5.34.spec openssl-5.5.34forphp-5.5.34.spec
cp zip-1.13.2forphp-5.5.34.spec opcache-5.5.34forphp-5.5.34.spec
挪动一下spec命令更规范:
RPM包重新命名:
spec文件里的Name: php-5.5.34-extension-apc 替换成:apc-php55-
cat f.txt |awk '{print "sed -i \"s/"$2"/"$3 "/g\" " $1}' 生成如下:
这一行因前面的文件多了一个-出现替换上的问题了:
sed -i "s/php-5.6.20-extension-redis/redis-/g" redis-php56-2.2.4.spec
一个是反查,另一个是在作相关操作时务必备份整个目录,达可以恢复。
http://zhidao.baidu.com/link?url=COVXMPfYvaAj9z3fGsl6rhyYrus4fBGrHUaB4v_xNn34s29kpqtSAyxH2enPxdPhBxzQPkb-82yHXFvwAoDWka
linux中.tgz是.tar.gz的缩写,我们在解压.tgz文件时可直接使用tar命令来操作。
tar xzf xlswriter-1.3.6.tgz ??old five
————————————————————————————————————————
.tgz
解压:tar zxvf FileName.tgz
压缩:未知
.tar.tgz
解压:tar zxvf FileName.tar.tgz
压缩:tar zcvf 搜索FileName.tar.tgz FileName
php-5.5.34/ext
cp zip-1.13.2forphp-5.5.34.spec zlib-5.5.34forphp-5.5.34.spec
cp zip-1.13.2forphp-5.5.34.spec openssl-5.5.34forphp-5.5.34.spec
cp zip-1.13.2forphp-5.5.34.spec opcache-5.5.34forphp-5.5.34.spec
挪动一下spec命令更规范:
RPM包重新命名:
spec文件里的Name: php-5.5.34-extension-apc 替换成:apc-php55-
cat f.txt |awk '{print "sed -i \"s/"$2"/"$3 "/g\" " $1}' 生成如下:
这一行因前面的文件多了一个-出现替换上的问题了:
sed -i "s/php-5.6.20-extension-redis/redis-/g" redis-php56-2.2.4.spec
一个是反查,另一个是在作相关操作时务必备份整个目录,达可以恢复。
http://zhidao.baidu.com/link?url=COVXMPfYvaAj9z3fGsl6rhyYrus4fBGrHUaB4v_xNn34s29kpqtSAyxH2enPxdPhBxzQPkb-82yHXFvwAoDWka
http://jingyan.baidu.com/article/f71d60379afd061ab641d1c4.html
Window10修改IP地址:
控制面板\所有控制面板项\网络和共享中心
Window10修改IP地址:
控制面板\所有控制面板项\网络和共享中心
rc?.d中的?代表不同的运行级别,例如进入图形模式的运行级别是5,就是说在rc5.d中的S开头进程都会运行,网络多用户文本模式的运行级别是3,就是运行所有rc3.d中S开头的进程。
单用户模式就是rc1.d,如果是rc0.d就是关机,其中没有S开头的,都是K开头的进程名字,代表杀掉进程。
更多参考:http://blog.itpub.net/12798004/viewspace-1143979/
单用户模式就是rc1.d,如果是rc0.d就是关机,其中没有S开头的,都是K开头的进程名字,代表杀掉进程。
更多参考:http://blog.itpub.net/12798004/viewspace-1143979/
背景:最近安装chrome升级到最新版本需要卸载掉旧的再重新安装新的版本,于是出现一些错误,结合一些unlock发现这个chrome里被update程序运行导致其删除不掉引起升级失败。
最近,有win7系统电脑用户重装chrome谷歌浏览器的时候会出现提示“糟糕!安装失败。错误代码0a0430721。”,这是怎么回事呢?本文将提供win7系统重装chrome谷歌浏览器失败提示错误代码0a0430721的原因及解决方法供大家了解,希望可以帮助到大家
chrome错误代码0a0430721原因:
因为删除chrome浏览器时候没有删除干净,然后又重装了谷歌浏览器,所以就出现这个问题了,如下图所示:
win7系统重装chrome谷歌浏览器失败提示错误代码0a0430721原因及解决办法
错误代码0a0430721解决方法:
1、打开谷歌浏览器残余文件所在的位置文件夹,一般都在C盘的Program Files文件夹(64位系统的在Program FilesX86文件夹里);
win7系统重装chrome谷歌浏览器失败提示错误代码0a0430721原因及解决办法
2、将其删除,即可。
以上就是对win7系统重装chrome谷歌浏览器失败提示错误代码0a0430721的原因及解决方法的介绍,方法很简单,有同样问题的朋友可以动手尝试解决。
摘自:http://www.yzmg.com/xitong/105044.html
http://blog.csdn.net/libaineu2004/article/details/45533299
最近,有win7系统电脑用户重装chrome谷歌浏览器的时候会出现提示“糟糕!安装失败。错误代码0a0430721。”,这是怎么回事呢?本文将提供win7系统重装chrome谷歌浏览器失败提示错误代码0a0430721的原因及解决方法供大家了解,希望可以帮助到大家
chrome错误代码0a0430721原因:
因为删除chrome浏览器时候没有删除干净,然后又重装了谷歌浏览器,所以就出现这个问题了,如下图所示:
win7系统重装chrome谷歌浏览器失败提示错误代码0a0430721原因及解决办法
错误代码0a0430721解决方法:
1、打开谷歌浏览器残余文件所在的位置文件夹,一般都在C盘的Program Files文件夹(64位系统的在Program FilesX86文件夹里);
win7系统重装chrome谷歌浏览器失败提示错误代码0a0430721原因及解决办法
2、将其删除,即可。
以上就是对win7系统重装chrome谷歌浏览器失败提示错误代码0a0430721的原因及解决方法的介绍,方法很简单,有同样问题的朋友可以动手尝试解决。
摘自:http://www.yzmg.com/xitong/105044.html
http://blog.csdn.net/libaineu2004/article/details/45533299
背景:发现并没有压缩,查来查去是这个配置有问题写成1000k了,也就是下面这些列表都不符合条件,不给gzip压缩,gzip_min_length 1k; 不压缩临界值,大于1K的才压缩,一般不用改,被修改成1000k了,于是没有压缩,查了老半天content-type,都写了,呵呵。
修改后,在这儿测试了一下,果然压缩了:
http://pagespeed.webkaka.com/youhua/gzip/
网址 http://www.jackxiang.com/template/trielegant/styles.css 的检测结果:
是否压缩 是
压缩类型 gzip
原文件大小 8704 字节
压缩后文件大小 4275 字节
压缩率 50.88%
图片是否需要启用GZip压缩?
无意间看到有网友提及,图片不用GZip压缩的。图片尽量不要使用gzip,因为gif,png等图片本身就是被压缩过的,
开启和关闭图片GZip压缩后,网页的总体积是不同的,令人惊讶的是开启图片GZip压缩后,网页总体积竟然变大了。而耗时也相应的增多了。
===========================================
1、Vim打开Nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
2、找到如下一段,进行修改
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
#gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
3、解释一下
第1行:开启Gzip
第2行:不压缩临界值,大于1K的才压缩,一般不用改
第3行:buffer,就是,嗯,算了不解释了,不用改
第4行:用了反向代理的话,末端通信是HTTP/1.0,有需求的应该也不用看我这科普文了;有这句的话注释了就行了,默认是HTTP/1.1
第5行:压缩级别,1-10,数字越大压缩的越好,时间也越长,看心情随便改吧
第6行:进行压缩的文件类型,缺啥补啥就行了,JavaScript有两种写法,最好都写上吧,总有人抱怨js文件没有压缩,其实多写一种格式就行了
第7行:跟Squid等缓存服务有关,on的话会在Header里增加"Vary: Accept-Encoding",我不需要这玩意,自己对照情况看着办吧
第8行:IE6对Gzip不怎么友好,不给它Gzip了
上面摘自:http://www.veryhuo.com/a/view/51706.html
http://www.webkaka.com/blog/archives/how-to-set-gzip-for-js-in-Nginx.html
https://segmentfault.com/q/1010000000585128
查询是否被zip压缩:
http://pagespeed.webkaka.com/youhua/gzip/
输入:
http://www.jackxiang.com/images/js/common.js?jsver=2.1.1.3626.3
=======================================
启用Gzip 可减少 54.2 KB 启用服务器Gzip,可以减少传输字节数。更多 -3分
未启用Gzip的资源有:
http://www.jackxiang.com/template/trielegant/styles.css (大小: 8.5 KB 预计可减少 5.9 KB )
http://www.jackxiang.com/images/js/common.js?jsver=2.1.1.3626.3 (大小: 20.3 KB 预计可减少 14.8 KB )
http://www.jackxiang.com/lang/zh-cn/jslang.js?jsver=2.1.1.3626.3 (大小: 3.7 KB 预计可减少 2.1 KB )
http://www.jackxiang.com/images/js/ajax.js?jsver=2.1.1.3626.3 (大小: 7.4 KB 预计可减少 6.0 KB )
http://www.jackxiang.com/images/js/swfobject.js?jsver=2.1.1.3626.3 (大小: 6.4 KB 预计可减少 4.2 KB )
http://www.jackxiang.com/images/css/SyntaxHighlighter.css (大小: 3.6 KB 预计可减少 2.5 KB )
http://jackxiang.com/favicon.jpg (大小: 1.9 KB 预计可减少 793 B )
http://js.users.51.la/4950674.js (大小: 1.9 KB 预计可减少 1.1 KB )
http://www.jackxiang.com/images/hl/shCore.js (大小: 9.5 KB 预计可减少 5.7 KB )
http://www.jackxiang.com/images/hl/shBrushPhp.js (大小: 3.7 KB 预计可减少 2.1 KB )
http://www.jackxiang.com/images/hl/shBrushJScript.js (大小: 937 B 预计可减少 437 B )
http://www.jackxiang.com/images/hl/shBrushJava.js (大小: 1.0 KB 预计可减少 494 B )
http://www.jackxiang.com/images/hl/shBrushSql.js (大小: 1.9 KB 预计可减少 964 B )
http://www.jackxiang.com/images/hl/shBrushCss.js (大小: 4.0 KB 预计可减少 2.2 KB )
http://www.jackxiang.com/images/hl/shBrushCpp.js (大小: 2.7 KB 预计可减少 1.4 KB )
http://www.jackxiang.com/images/hl/shBrushPython.js (大小: 4.7 KB 预计可减少 2.5 KB )
http://www.jackxiang.com/template/trielegant/images/logo_header.png (大小: 5.6 KB 预计可减少 237 B )
http://www.jackxiang.com/template/trielegant/images/long.gif (大小: 924 B 预计可减少 358 B )
http://jackxiang.com/template/trielegant/images/bridge-banner-eleven.jpg (大小: 18.9 KB 预计可减少 354 B )
http://icon.51.la/icon_0.gif (大小: 846 B 预计可减少 101 B )
http://eiv.baidu.com/hmt/icon/21.gif (大小: 1.1 KB 预计可减少 69 B )
修改后,在这儿测试了一下,果然压缩了:
http://pagespeed.webkaka.com/youhua/gzip/
网址 http://www.jackxiang.com/template/trielegant/styles.css 的检测结果:
是否压缩 是
压缩类型 gzip
原文件大小 8704 字节
压缩后文件大小 4275 字节
压缩率 50.88%
图片是否需要启用GZip压缩?
无意间看到有网友提及,图片不用GZip压缩的。图片尽量不要使用gzip,因为gif,png等图片本身就是被压缩过的,
开启和关闭图片GZip压缩后,网页的总体积是不同的,令人惊讶的是开启图片GZip压缩后,网页总体积竟然变大了。而耗时也相应的增多了。
===========================================
1、Vim打开Nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
2、找到如下一段,进行修改
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
#gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
3、解释一下
第1行:开启Gzip
第2行:不压缩临界值,大于1K的才压缩,一般不用改
第3行:buffer,就是,嗯,算了不解释了,不用改
第4行:用了反向代理的话,末端通信是HTTP/1.0,有需求的应该也不用看我这科普文了;有这句的话注释了就行了,默认是HTTP/1.1
第5行:压缩级别,1-10,数字越大压缩的越好,时间也越长,看心情随便改吧
第6行:进行压缩的文件类型,缺啥补啥就行了,JavaScript有两种写法,最好都写上吧,总有人抱怨js文件没有压缩,其实多写一种格式就行了
第7行:跟Squid等缓存服务有关,on的话会在Header里增加"Vary: Accept-Encoding",我不需要这玩意,自己对照情况看着办吧
第8行:IE6对Gzip不怎么友好,不给它Gzip了
上面摘自:http://www.veryhuo.com/a/view/51706.html
http://www.webkaka.com/blog/archives/how-to-set-gzip-for-js-in-Nginx.html
https://segmentfault.com/q/1010000000585128
查询是否被zip压缩:
http://pagespeed.webkaka.com/youhua/gzip/
输入:
http://www.jackxiang.com/images/js/common.js?jsver=2.1.1.3626.3
=======================================
启用Gzip 可减少 54.2 KB 启用服务器Gzip,可以减少传输字节数。更多 -3分
未启用Gzip的资源有:
http://www.jackxiang.com/template/trielegant/styles.css (大小: 8.5 KB 预计可减少 5.9 KB )
http://www.jackxiang.com/images/js/common.js?jsver=2.1.1.3626.3 (大小: 20.3 KB 预计可减少 14.8 KB )
http://www.jackxiang.com/lang/zh-cn/jslang.js?jsver=2.1.1.3626.3 (大小: 3.7 KB 预计可减少 2.1 KB )
http://www.jackxiang.com/images/js/ajax.js?jsver=2.1.1.3626.3 (大小: 7.4 KB 预计可减少 6.0 KB )
http://www.jackxiang.com/images/js/swfobject.js?jsver=2.1.1.3626.3 (大小: 6.4 KB 预计可减少 4.2 KB )
http://www.jackxiang.com/images/css/SyntaxHighlighter.css (大小: 3.6 KB 预计可减少 2.5 KB )
http://jackxiang.com/favicon.jpg (大小: 1.9 KB 预计可减少 793 B )
http://js.users.51.la/4950674.js (大小: 1.9 KB 预计可减少 1.1 KB )
http://www.jackxiang.com/images/hl/shCore.js (大小: 9.5 KB 预计可减少 5.7 KB )
http://www.jackxiang.com/images/hl/shBrushPhp.js (大小: 3.7 KB 预计可减少 2.1 KB )
http://www.jackxiang.com/images/hl/shBrushJScript.js (大小: 937 B 预计可减少 437 B )
http://www.jackxiang.com/images/hl/shBrushJava.js (大小: 1.0 KB 预计可减少 494 B )
http://www.jackxiang.com/images/hl/shBrushSql.js (大小: 1.9 KB 预计可减少 964 B )
http://www.jackxiang.com/images/hl/shBrushCss.js (大小: 4.0 KB 预计可减少 2.2 KB )
http://www.jackxiang.com/images/hl/shBrushCpp.js (大小: 2.7 KB 预计可减少 1.4 KB )
http://www.jackxiang.com/images/hl/shBrushPython.js (大小: 4.7 KB 预计可减少 2.5 KB )
http://www.jackxiang.com/template/trielegant/images/logo_header.png (大小: 5.6 KB 预计可减少 237 B )
http://www.jackxiang.com/template/trielegant/images/long.gif (大小: 924 B 预计可减少 358 B )
http://jackxiang.com/template/trielegant/images/bridge-banner-eleven.jpg (大小: 18.9 KB 预计可减少 354 B )
http://icon.51.la/icon_0.gif (大小: 846 B 预计可减少 101 B )
http://eiv.baidu.com/hmt/icon/21.gif (大小: 1.1 KB 预计可减少 69 B )