一、端口和服务的关系
端口号与相应服务的对应关系存放在/etc/services文件中,这个文件中可以找到大部分端口。使用netstat命令
显示的服务名称也是从这个文件中找的。有人说将这个文件中的相应端口号注释掉,就可以禁用该端口。
我试了却不起作用,这种方法应该是没有用的,是误传!将相应端口号注释掉,唯一的作用就是使用netsat
命令时,将不显示服务名(比如ftp)而是显示端口号(比如21)。原理也很简单:netstat无法在/etc/services
文件中找到端口号对应的服务名,自然就无法显示了。所以/etc/services文件只是起到端口号与相应服务的
映射关系,与端口的启动和关闭没有关系!
二、查看本机开放的端口
1、netstat 查看端口和连接
netstat 列出目前已经连接的服务名
netstat -a 列出目前已经连接的和正在监听的服务名
netstat -an 列出目前已经连接的和正在监听的端口号(与上面的命令功能一样,只是不解释端口号对应的服务名)
netstat -ap 在上面命令的基础上列出连接的PID(进程号),用这个PID,可以使用KILL 来杀死连接
例如:某个连接的PID=111,想踢出去就使用 KILL -9 111。ok!
netstat -rn 输出路由表
2、nmap
nmap 127.0.0.1 查看本机开放的端口,会扫描所有端口
nmap -p 1024 65535 127.0.0.1 扫描指定端口范围
nmap -PT 192.168.1.1-111 扫描一组范围的电脑
三、关闭和开启端口(服务)
关闭端口的方法:
1、因为每个端口都有对应的服务,因此要关闭端口只要关闭相应的服务就可以了。
2、用IPTABLE对端口进行限制,这样也能使端口不被访问,但端口本身并没有关闭。
在这儿只介绍关闭服务的方法,IPTABLE的应用以后再讨论。
linux中开机自动启动的服务一般都存放在两个地方:
/etc/init.d/文件夹下的服务:
这个文件夹下的服务都可以通过运行相应的SCRIPT来启动或关闭。
例如:启动sendmail服务 ./sendmail start (打开了TCP 25端口)
关闭sendmail服务 ./sendmail stop (关闭TCP 25 端口)
查看sendmail服务当前状态 ./sendmail status (查看服务是否运行)
/etc/xinetd.d/文件夹下的服务:
这个文件夹下的服务需要通过更改服务的配置文件,并重新启动xinetd才可以。
例如:要启动其中的auth服务,打开/etc/xinetd.d/auth配置文件,更改“disable=no”,保存退出。运行/etc/rc.d/init.d/xinetd restart
要停止其中的auth服务,打开/etc/xinetd.d/auth配置文件,更改“disable=yes”,保存退出。运行/etc/rc.d/init.d/xinetd restart
四、控制开机自动启动的服务
上面说的控制服务开关方法是在启动linux之后进行操作的,如果我想在linux启动时控制哪些服务启动、哪些服务关闭怎么做?
控制服务自动启动的方法有3个:
1、更改/etc/rc.d下的对应文件夹:
如果你登陆的默认界面是字符界面,那么修改rc.3文件夹,如果登陆界面默认是图形界面,那么修改rc.5。
在文件夹中,每个服务的名字前都带有“K”或“S”,S就代表这个服务开机自动运行了,把它删了或前缀改为“K”下次就不会启动了。
2、使用ntsysv命令:
输入ntsysv命令,将会出现一个服务列表,需要启动的打“*”,简单。
3、使用chkconfig命令:
让某个服务不自动启动:例如httpd:chkconfig --level 35 httpd off ;35指的是运行级别
让某个服务自动启动:例如httpd:chkconfig --level 35 httpd on ;
查看所有服务的启动状态:chkconfig --list
查看某个服务的启动状态:chkconfig --list |grep httpd
端口和服务的操作就到这儿吧。
这个小脚本可以检测WWW,ftp,ssh,sendmail + pop3服务是否开启:
端口号与相应服务的对应关系存放在/etc/services文件中,这个文件中可以找到大部分端口。使用netstat命令
显示的服务名称也是从这个文件中找的。有人说将这个文件中的相应端口号注释掉,就可以禁用该端口。
我试了却不起作用,这种方法应该是没有用的,是误传!将相应端口号注释掉,唯一的作用就是使用netsat
命令时,将不显示服务名(比如ftp)而是显示端口号(比如21)。原理也很简单:netstat无法在/etc/services
文件中找到端口号对应的服务名,自然就无法显示了。所以/etc/services文件只是起到端口号与相应服务的
映射关系,与端口的启动和关闭没有关系!
二、查看本机开放的端口
1、netstat 查看端口和连接
netstat 列出目前已经连接的服务名
netstat -a 列出目前已经连接的和正在监听的服务名
netstat -an 列出目前已经连接的和正在监听的端口号(与上面的命令功能一样,只是不解释端口号对应的服务名)
netstat -ap 在上面命令的基础上列出连接的PID(进程号),用这个PID,可以使用KILL 来杀死连接
例如:某个连接的PID=111,想踢出去就使用 KILL -9 111。ok!
netstat -rn 输出路由表
2、nmap
nmap 127.0.0.1 查看本机开放的端口,会扫描所有端口
nmap -p 1024 65535 127.0.0.1 扫描指定端口范围
nmap -PT 192.168.1.1-111 扫描一组范围的电脑
三、关闭和开启端口(服务)
关闭端口的方法:
1、因为每个端口都有对应的服务,因此要关闭端口只要关闭相应的服务就可以了。
2、用IPTABLE对端口进行限制,这样也能使端口不被访问,但端口本身并没有关闭。
在这儿只介绍关闭服务的方法,IPTABLE的应用以后再讨论。
linux中开机自动启动的服务一般都存放在两个地方:
/etc/init.d/文件夹下的服务:
这个文件夹下的服务都可以通过运行相应的SCRIPT来启动或关闭。
例如:启动sendmail服务 ./sendmail start (打开了TCP 25端口)
关闭sendmail服务 ./sendmail stop (关闭TCP 25 端口)
查看sendmail服务当前状态 ./sendmail status (查看服务是否运行)
/etc/xinetd.d/文件夹下的服务:
这个文件夹下的服务需要通过更改服务的配置文件,并重新启动xinetd才可以。
例如:要启动其中的auth服务,打开/etc/xinetd.d/auth配置文件,更改“disable=no”,保存退出。运行/etc/rc.d/init.d/xinetd restart
要停止其中的auth服务,打开/etc/xinetd.d/auth配置文件,更改“disable=yes”,保存退出。运行/etc/rc.d/init.d/xinetd restart
四、控制开机自动启动的服务
上面说的控制服务开关方法是在启动linux之后进行操作的,如果我想在linux启动时控制哪些服务启动、哪些服务关闭怎么做?
控制服务自动启动的方法有3个:
1、更改/etc/rc.d下的对应文件夹:
如果你登陆的默认界面是字符界面,那么修改rc.3文件夹,如果登陆界面默认是图形界面,那么修改rc.5。
在文件夹中,每个服务的名字前都带有“K”或“S”,S就代表这个服务开机自动运行了,把它删了或前缀改为“K”下次就不会启动了。
2、使用ntsysv命令:
输入ntsysv命令,将会出现一个服务列表,需要启动的打“*”,简单。
3、使用chkconfig命令:
让某个服务不自动启动:例如httpd:chkconfig --level 35 httpd off ;35指的是运行级别
让某个服务自动启动:例如httpd:chkconfig --level 35 httpd on ;
查看所有服务的启动状态:chkconfig --list
查看某个服务的启动状态:chkconfig --list |grep httpd
端口和服务的操作就到这儿吧。
这个小脚本可以检测WWW,ftp,ssh,sendmail + pop3服务是否开启:
#!/bin/bash
#program: Using to study the [ if ... then ... fi ] program
#dsk 2007/10/8 3:00
#content: I will using this program to show you sevices
#1. print the program's work in your screen
echo "Now, the service of your Linux system will be detect!"
echo "The www, ftp,ssh,and sendmail + pop3 will be detect!"
echo " "
#2. www
www='netstat -an|grep LISTEN|grep :80'
if [ "$www" != "" ]; then
echo "WWW is runing"
else
echo "WWW is NOT runing"
fi
#3. ftp
ftp='netstat -an|grep LISTEN|grep :21'
if [ "$ftp" != "" ]; then
echo "FTP is runing"
else
echo "FTP is not runing"
fi
#4. ssh
ssh='netstat -an|grep LISTEN|grep :22'
if [ "$ssh" != "" ];then
echo "SSH is running"
else
echo "SSH is not running"
fi
#5. sendmail + pop3
smtp='netstat -an|grep LISTEN|grep :25'
pop3='netstat -an|grep LISTEN|grep :110'
if [ "$smtp" != "" ] && [ "$pop3" != "" ]; then
echo "Sendmail is OK!"
elif [ "$smtp" != "" ] && [ "$pop3" = "" ]; then
echo "Sendmail have some problems of your pop3!"
elif [ "$smtp" = "" ] && [ "$pop3" != "" ]; then
echo "Sendmail have some problems of your smtp!"
else
echo "Sendmail is NOT running!"
fi
#program: Using to study the [ if ... then ... fi ] program
#dsk 2007/10/8 3:00
#content: I will using this program to show you sevices
#1. print the program's work in your screen
echo "Now, the service of your Linux system will be detect!"
echo "The www, ftp,ssh,and sendmail + pop3 will be detect!"
echo " "
#2. www
www='netstat -an|grep LISTEN|grep :80'
if [ "$www" != "" ]; then
echo "WWW is runing"
else
echo "WWW is NOT runing"
fi
#3. ftp
ftp='netstat -an|grep LISTEN|grep :21'
if [ "$ftp" != "" ]; then
echo "FTP is runing"
else
echo "FTP is not runing"
fi
#4. ssh
ssh='netstat -an|grep LISTEN|grep :22'
if [ "$ssh" != "" ];then
echo "SSH is running"
else
echo "SSH is not running"
fi
#5. sendmail + pop3
smtp='netstat -an|grep LISTEN|grep :25'
pop3='netstat -an|grep LISTEN|grep :110'
if [ "$smtp" != "" ] && [ "$pop3" != "" ]; then
echo "Sendmail is OK!"
elif [ "$smtp" != "" ] && [ "$pop3" = "" ]; then
echo "Sendmail have some problems of your pop3!"
elif [ "$smtp" = "" ] && [ "$pop3" != "" ]; then
echo "Sendmail have some problems of your smtp!"
else
echo "Sendmail is NOT running!"
fi
http://www.21ic.com/info/images/dpj/2001-903.htm
添加组件:
工程 --部件--windows comm contrl
应该是MSCOMM32.OCX,此文件在WIN9X中位于Windows/System目录夹内,在WINXP中位于Windows/System32目录夹内.你再仔细找找看是否有此控件.
需在菜单栏工程(P)下拉菜单中选部件(O),在其属性页中找MICROSOFT COMM CONTROL6.0,对选钩方框打钩,就能在工具箱中出现电话机样的MSCOMM控件.如果上法找不到MICROSOFT COMM CONTROL6.0,则需从其它相同系统的System或System32目录夹将MSCOMM32.OCX复制到你机器系统的相同目录夹内,然后按文件下拉菜单中选部件(O),由浏览(B)去选中MSCOMM32.OCX文件,它就在部件(O)属性页中可找到,然后按前法操作,工具箱中就会有MSCOMM控件了.
谢谢!太好了!这一控件,为什么在我重启VB6.0后,需要重新添加呢?即使这样也完全满足需求,非常感谢!
我已经做完了程序,但在自己的机器上可以使用,但在一台没有装过VC的机器上运行不了,是MSCOMM控件的问题,我已经把MSCOMM32.OCX拷到那台机器上,用Depends工具查出相应的DLL也拷过去了,还是不行,请问还需要哪些东东呀!
答:需要程序或手动注册控件
如下:
cmd
Regsvr32 C:\windows\system32\Mscomm32.ocx
详细步骤:http://www.docin.com/p-1540065.html
下载代码:www.xiangdong.org/vb/vb.zip
工程 --部件--windows comm contrl
应该是MSCOMM32.OCX,此文件在WIN9X中位于Windows/System目录夹内,在WINXP中位于Windows/System32目录夹内.你再仔细找找看是否有此控件.
需在菜单栏工程(P)下拉菜单中选部件(O),在其属性页中找MICROSOFT COMM CONTROL6.0,对选钩方框打钩,就能在工具箱中出现电话机样的MSCOMM控件.如果上法找不到MICROSOFT COMM CONTROL6.0,则需从其它相同系统的System或System32目录夹将MSCOMM32.OCX复制到你机器系统的相同目录夹内,然后按文件下拉菜单中选部件(O),由浏览(B)去选中MSCOMM32.OCX文件,它就在部件(O)属性页中可找到,然后按前法操作,工具箱中就会有MSCOMM控件了.
谢谢!太好了!这一控件,为什么在我重启VB6.0后,需要重新添加呢?即使这样也完全满足需求,非常感谢!
我已经做完了程序,但在自己的机器上可以使用,但在一台没有装过VC的机器上运行不了,是MSCOMM控件的问题,我已经把MSCOMM32.OCX拷到那台机器上,用Depends工具查出相应的DLL也拷过去了,还是不行,请问还需要哪些东东呀!
答:需要程序或手动注册控件
如下:
cmd
Regsvr32 C:\windows\system32\Mscomm32.ocx
详细步骤:http://www.docin.com/p-1540065.html
下载代码:www.xiangdong.org/vb/vb.zip
CentOS5.2系统安装在虚拟机上,编译gcc.
挂载CentOS的DVD系统光盘,然后进入CentOS目录内,安装顺序如下:
注意:必须安装: kernel-headers-2.6.18-92.el5.i386.rpm 这个包,否则报错:
warning: glibc-headers-2.5-24.i386.rpm: Header V3 DSA signature: NOKEY, key ID e8562897
error: Failed dependencies:
kernel-headers is needed by glibc-headers-2.5-24.i386
kernel-headers >= 2.2.1 is needed by glibc-headers-2.5-24.i386
安装:g++
卸载apache相关:
强制安装:--force
强制卸载 --nodeps
libtool:
错误:checking for C compiler default output... configure: error: C compiler cannot create executables
原因:/etc/yum.conf 它已经配置好了相关的库和路径等等的依赖性!
解决:yum install libc6-dev
yum clean headers
yum clean packages
我在网上看到有人说要下一个LIBC6-DEV的包,我用YUM试了一下,下不到这个包,我看了上面既然是c++的问题,那我就下一个gcc-c++
看看
yum install gcc-c++
刚好操下命令后,它自动的帮我下了两个软件
gcc-c++
libstc++
下好以后
就这样完全通过了?那就接着试试:
sudo yum install qt4-devel curl-devel gcc glibc-devel2
yum install glibc-devel
升级:
rpm -Uvh *.rpm
应该就是下面的那些包,不行再reinstall一次看看:
2.5u]# rpm -Uvh *.rpm
Preparing... ########################################### [100%]
1:libgcc ########################################### [ 6%]
2:glibc-common ########################################### [ 12%]
3:glibc ########################################### [ 18%]
4:binutils ########################################### [ 24%]
5:glibc-headers ########################################### [ 29%]
6:glibc-devel ########################################### [ 35%]
7:libstdc++ ########################################### [ 41%]
8:libstdc++-devel ########################################### [ 47%]
9:apr ########################################### [ 53%]
10:cpp ########################################### [ 59%]
11:libgomp ########################################### [ 65%]
12:gcc ########################################### [ 71%]
13:apr-devel ########################################### [ 76%]
14:binutils-devel ########################################### [ 82%]
15:gcc-c++ ########################################### [ 88%]
16:glibc-utils ########################################### [ 94%]
17:libtool ########################################### [100%]
最后,还是发现cannot create executables,等等,最后进过比对后发现我的rpm包和系统运维的rpm包一个是CentOS-5.2-i386-bin-DVD.iso,另外一个是:CentOS-5.2-x86_64-bin-DVD.iso,我的是CentOS-5.2-i386-bin-DVD.iso,我倒。。。!! !
请参考我如何发现系统不同的这篇文章:http://www.xiangdong.org/blog/post/1503/,笑死我也。。。
结束:
查正得出:x86-64系统可以运行i386软件。只有你编译什么东西就在什么东西的连接选项上添加-march=i386 -m32,如:gcc a.c -march=i386 -m32 你也可以加到Makefile里面。
挂载CentOS的DVD系统光盘,然后进入CentOS目录内,安装顺序如下:
rpm -ivh cpp-4.1.2-42.el5.i386.rpm
rpm -ihv kernel-headers-2.6.18-92.el5.i386.rpm
rpm -ivh glibc-headers-2.5-24.i386.rpm
rpm -ivh glibc-devel-2.5-24.i386.rpm
rpm -ivh libgomp-4.1.2-42.el5.i386.rpm
rpm -ivh gcc-4.1.2-42.el5.i386.rpm
rpm -ihv kernel-headers-2.6.18-92.el5.i386.rpm
rpm -ivh glibc-headers-2.5-24.i386.rpm
rpm -ivh glibc-devel-2.5-24.i386.rpm
rpm -ivh libgomp-4.1.2-42.el5.i386.rpm
rpm -ivh gcc-4.1.2-42.el5.i386.rpm
注意:必须安装: kernel-headers-2.6.18-92.el5.i386.rpm 这个包,否则报错:
warning: glibc-headers-2.5-24.i386.rpm: Header V3 DSA signature: NOKEY, key ID e8562897
error: Failed dependencies:
kernel-headers is needed by glibc-headers-2.5-24.i386
kernel-headers >= 2.2.1 is needed by glibc-headers-2.5-24.i386
安装:g++
rpm -ihv libstdc++-devel-4.1.2-42.el5.i386.rpm
rpm -ihv gcc-c++-4.1.2-42.el5.i386.rpm
rpm -ihv gcc-c++-4.1.2-42.el5.i386.rpm
卸载apache相关:
rpm -e --nodeps httpd-2.2.3-11.el5_1.centos.3
rpm -e system-config-httpd-1.3.3.3-1.el5
rpm -e httpd-manual-2.2.3-11.el5_1.centos.3
rpm -e system-config-httpd-1.3.3.3-1.el5
rpm -e httpd-manual-2.2.3-11.el5_1.centos.3
强制安装:--force
强制卸载 --nodeps
libtool:
rpm -ihv imake-1.0.2-3.i386.rpm
rpm -ihv imake-1.0.2-3.i386.rpm
rpm -ihv automake-1.9.6-2.1.noarch.rpm
rpm -ihv imake-1.0.2-3.i386.rpm
rpm -ihv automake-1.9.6-2.1.noarch.rpm
rpm -ihv libobjc-4.1.2-42.el5.i386.rpm
rpm -ihv gcc-objc-4.1.2-42.el5.i386.rpm
rpm -ihv gcc-objc-4.1.2-42.el5.i386.rpm
rpm -ihv gcc-objc-4.1.2-42.el5.i386.rpm
rpm -ihv gcc-objc-4.1.2-42.el5.i386.rpm
错误:checking for C compiler default output... configure: error: C compiler cannot create executables
原因:/etc/yum.conf 它已经配置好了相关的库和路径等等的依赖性!
解决:yum install libc6-dev
yum clean headers
yum clean packages
我在网上看到有人说要下一个LIBC6-DEV的包,我用YUM试了一下,下不到这个包,我看了上面既然是c++的问题,那我就下一个gcc-c++
看看
yum install gcc-c++
刚好操下命令后,它自动的帮我下了两个软件
gcc-c++
libstc++
下好以后
就这样完全通过了?那就接着试试:
yum install glibc-devel-X.X.X-XX
sudo yum install qt4-devel curl-devel gcc glibc-devel2
yum install glibc-devel
升级:
rpm -Uvh *.rpm
应该就是下面的那些包,不行再reinstall一次看看:
2.5u]# rpm -Uvh *.rpm
Preparing... ########################################### [100%]
1:libgcc ########################################### [ 6%]
2:glibc-common ########################################### [ 12%]
3:glibc ########################################### [ 18%]
4:binutils ########################################### [ 24%]
5:glibc-headers ########################################### [ 29%]
6:glibc-devel ########################################### [ 35%]
7:libstdc++ ########################################### [ 41%]
8:libstdc++-devel ########################################### [ 47%]
9:apr ########################################### [ 53%]
10:cpp ########################################### [ 59%]
11:libgomp ########################################### [ 65%]
12:gcc ########################################### [ 71%]
13:apr-devel ########################################### [ 76%]
14:binutils-devel ########################################### [ 82%]
15:gcc-c++ ########################################### [ 88%]
16:glibc-utils ########################################### [ 94%]
17:libtool ########################################### [100%]
最后,还是发现cannot create executables,等等,最后进过比对后发现我的rpm包和系统运维的rpm包一个是CentOS-5.2-i386-bin-DVD.iso,另外一个是:CentOS-5.2-x86_64-bin-DVD.iso,我的是CentOS-5.2-i386-bin-DVD.iso,我倒。。。!! !
请参考我如何发现系统不同的这篇文章:http://www.xiangdong.org/blog/post/1503/,笑死我也。。。
结束:
查正得出:x86-64系统可以运行i386软件。只有你编译什么东西就在什么东西的连接选项上添加-march=i386 -m32,如:gcc a.c -march=i386 -m32 你也可以加到Makefile里面。
加密日志
High.Performance.MySQL中的MySQL’s Logical Architecture节讲述的就是有三种锁的级别:页级、表级、行级:
http://www.chinaz.com/Program/Mysql/1111442M2008.html
MySQL中InnoDB和MyISAM类型的差别:
http://www.chinaz.com/Program/Mysql/11054332H008.html
里面内容:
注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。验证了朱彦斌两个实用的Mysql技巧:
innodb表如何更快得到count(*)结果
http://www.imysql.cn/2008_06_24_speedup_innodb_count
.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
证明了为何数据库删除后还是那么大小!
InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”
http://www.chinaz.com/Program/Mysql/1111442M2008.html
MySQL中InnoDB和MyISAM类型的差别:
http://www.chinaz.com/Program/Mysql/11054332H008.html
里面内容:
注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。验证了朱彦斌两个实用的Mysql技巧:
innodb表如何更快得到count(*)结果
http://www.imysql.cn/2008_06_24_speedup_innodb_count
.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
证明了为何数据库删除后还是那么大小!
InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”
解决/usr/bin/ld: cannot find -lmysqlclient错误 27. 10. 类似/usr/bin/ld: cannot find -xxxx的错误有很多, 首先我们可以最简单的判断一下: 这类情况一般是由于缺乏某某库文件, 又或者可能是由于已存在的库问题版本不对造成的 一般都是解决的办法就是安装缺乏的devel包就可以解决, 当然还有其他的未知因素, 我们看一个实例: 我在一台装centos5.2 x86_64的系统上配置php环境, 提示这个错误 "/usr/bin/ld: cannot find -lmysqlclient" 于是我安装了 # yum -y install mysql-devel!
手机视频广告,用PHP发送视频广告,需要通过PHP执行一个外部发送视频命令。
可以写PHP扩展来完成,本人没有那个能力及时间,故使用exec()这个函数来完成。
passthru(),exec(),system() 这三个函数功能相似.passthru无法接受输出值,system只接收最后以行输出,exec可以完全接收输出.阅读全文
可以写PHP扩展来完成,本人没有那个能力及时间,故使用exec()这个函数来完成。
passthru(),exec(),system() 这三个函数功能相似.passthru无法接受输出值,system只接收最后以行输出,exec可以完全接收输出.阅读全文
C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。
从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在微机上而不上在嵌入式系统上。如果上述任何问题的答案是“是”的话,那么我知道我得认真考虑我是否应该去做这份工作。
从面试者的角度来讲,一个测试也许能从多方面揭示应试者的素质:最基本的,你能了解应试者C语言的水平。不管怎么样,看一下这人如何回答他不会的问题也是满有趣。应试者是以好的直觉做出明智的选择,还是只是瞎蒙呢?当应试者在某个问题上卡住时是找借口呢,还是表现出对问题的真正的好奇心,把这看成学习的机会呢?我发现这些信息与他们的测试成绩一样有用。
有了这些想法,我决定出一些真正针对嵌入式系统的考题,希望这些令人头痛的考题能给正在找工作的人一点帮住。这些问题都是我这些年实际碰到的。其中有些题很难,但它们应该都能给你一点启迪。
这个测试适于不同水平的应试者,大多数初级水平的应试者的成绩会很差,经验丰富的程序员应该有很好的成绩。为了让你能自己决定某些问题的偏好,每个问题没有分配分数,如果选择这些考题为你所用,请自行按你的意思分配分数。
预处理器(Preprocessor)
1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)阅读全文
从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在微机上而不上在嵌入式系统上。如果上述任何问题的答案是“是”的话,那么我知道我得认真考虑我是否应该去做这份工作。
从面试者的角度来讲,一个测试也许能从多方面揭示应试者的素质:最基本的,你能了解应试者C语言的水平。不管怎么样,看一下这人如何回答他不会的问题也是满有趣。应试者是以好的直觉做出明智的选择,还是只是瞎蒙呢?当应试者在某个问题上卡住时是找借口呢,还是表现出对问题的真正的好奇心,把这看成学习的机会呢?我发现这些信息与他们的测试成绩一样有用。
有了这些想法,我决定出一些真正针对嵌入式系统的考题,希望这些令人头痛的考题能给正在找工作的人一点帮住。这些问题都是我这些年实际碰到的。其中有些题很难,但它们应该都能给你一点启迪。
这个测试适于不同水平的应试者,大多数初级水平的应试者的成绩会很差,经验丰富的程序员应该有很好的成绩。为了让你能自己决定某些问题的偏好,每个问题没有分配分数,如果选择这些考题为你所用,请自行按你的意思分配分数。
预处理器(Preprocessor)
1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)阅读全文
做为技术人员,大家都觉得工资高,工作稳定,还能学到很多的东西。是大部份走出校门或性格内向,或希望过平静生活的人的必然选择。其实,你们有没有问过自己,这条路到底走对了吗?
一个刚毕业的大学生,从事销售和从事技术两种不同的工作,可能工资的差距会达到数倍之远。对于初出校门的人来说,不无一种极端的诱惑力。刚毕业的年青人,当然会果断的选择技术之路。
两年后,我们再看看,由于经验的积累,做业务的积累了部份客户资源,做技术的积累了好的经验,在各自的领域内都大展开了手脚,收入也基本接近了。
再以后呢,技术之路越来越难走,毕竟做技术需要的大量的时间和精力,否则就跟不上现在时代的技术更新了,做业务的呢,客户群越来越大,经验越来越丰富,谁的收入会更高?
两种不同的职业,它们有着各自不同的特点,技术行业是个撑不死,饱不了的地方,而销售行业则是没有尽头的发展之路。
过了三十岁,大家会选择什么呢,结婚、生子,人生的一条老路,做技术的大多都成为了技术部门的负责人,职位不错;做销售的呢?可能还是个业务员,毕竟做大量的业务都集中在少数人手里。古往今来,财富的集中是如此的相似!但是观察两个职业成功人士的比较,是不是相差太远了?
学到死,做到死、发不了财的技术,有什么值得人留恋的!
到了三十岁,你还有自信面对繁重的工作吗?你有刚出社会的人的活力吗?你能和他们比工作时间,玩命地在老板面前表现吗?你能丢下妻儿出差一、两个月吗?能被小你十来岁的小孩命令来命令去吗?
我不能。。。。。。
有人会说,我有了技术!
技术经验是什么?一些老的,过去了的东西,他代表着你所留恋的过去,你所放不下的那一部份,你会以经验来判别事物,选择工作方法。在新老技术交替的时间内,经验可以起到承前启后的作用,让你威风八面。可是,你还会用到多少两年以前的经验呢?
大家所掌握的技术终会过时,脑子僵化的时候总会到来。那时,你何去何从?
如果你的目标只是买个狗窝,摆个小烟摊,请不要再往下看了。“知足者常乐”也是一种人生的境界,我羡慕那些五台山上的和尚,我做不到!
到处是高级住宅,我为什么只住10平的小屋?满大街跑的小车,我为什么要天天挤公交?我要为三十岁后不再挤公交车而奋斗!
转型------技术人的必须选择!阅读全文
一个刚毕业的大学生,从事销售和从事技术两种不同的工作,可能工资的差距会达到数倍之远。对于初出校门的人来说,不无一种极端的诱惑力。刚毕业的年青人,当然会果断的选择技术之路。
两年后,我们再看看,由于经验的积累,做业务的积累了部份客户资源,做技术的积累了好的经验,在各自的领域内都大展开了手脚,收入也基本接近了。
再以后呢,技术之路越来越难走,毕竟做技术需要的大量的时间和精力,否则就跟不上现在时代的技术更新了,做业务的呢,客户群越来越大,经验越来越丰富,谁的收入会更高?
两种不同的职业,它们有着各自不同的特点,技术行业是个撑不死,饱不了的地方,而销售行业则是没有尽头的发展之路。
过了三十岁,大家会选择什么呢,结婚、生子,人生的一条老路,做技术的大多都成为了技术部门的负责人,职位不错;做销售的呢?可能还是个业务员,毕竟做大量的业务都集中在少数人手里。古往今来,财富的集中是如此的相似!但是观察两个职业成功人士的比较,是不是相差太远了?
学到死,做到死、发不了财的技术,有什么值得人留恋的!
到了三十岁,你还有自信面对繁重的工作吗?你有刚出社会的人的活力吗?你能和他们比工作时间,玩命地在老板面前表现吗?你能丢下妻儿出差一、两个月吗?能被小你十来岁的小孩命令来命令去吗?
我不能。。。。。。
有人会说,我有了技术!
技术经验是什么?一些老的,过去了的东西,他代表着你所留恋的过去,你所放不下的那一部份,你会以经验来判别事物,选择工作方法。在新老技术交替的时间内,经验可以起到承前启后的作用,让你威风八面。可是,你还会用到多少两年以前的经验呢?
大家所掌握的技术终会过时,脑子僵化的时候总会到来。那时,你何去何从?
如果你的目标只是买个狗窝,摆个小烟摊,请不要再往下看了。“知足者常乐”也是一种人生的境界,我羡慕那些五台山上的和尚,我做不到!
到处是高级住宅,我为什么只住10平的小屋?满大街跑的小车,我为什么要天天挤公交?我要为三十岁后不再挤公交车而奋斗!
转型------技术人的必须选择!阅读全文
今天又要向公司提出辞呈,突然感觉自己一下子苍老许多。在办公室整理自己办公用品的时候,不仅回想自己8年来的职业经历。2000年从国内知名军校毕业后来到北京,在部队研究机关摸爬滚打了5年,自己从一个软件研发人员逐步成为对广电网络、互联网以及多媒体行业的专家。军队工作期间,我读了研究生,这一段时间是我感到最为幸福的时间。
全身心的学习,弥补自己知识的欠缺,使自己在理论上逐步形成了对网络、媒体的体系,并逐渐形成了自己的观点。我是一个不肯服输,不愿随大流的人。这种性格加上对技术的盲目崇拜,使我依然决定离开那个“悠闲、轻松”的部队大院,只身闯荡江湖。
研究生期间,我去过外企、国企。不同环境的磨砺,使我感到比在部队可真是大有用户之地。原本希望转业后月收入能够到5000元以上就好了。没曾想实习期间,就已经到7500元。随后,我在2005年11月加盟到现在的公司,薪金又有了巨大的飞跃。这种变化让我对工作、对人生都存满了向往和力量。
凭借着自己的热情和类似狂热的工作态度,我逐步从一个算法工程师发展到项目经理,并最终做到了公司技术的高层。自己负责的项目很多,视频搜索就是其中最为重要的一个项目。从立项到现在,3年多时间里,我感到自己从没有放松过,也没有轻松过。产品战略,核心竞争力,应用模式,这些问题从开始到现在一直萦绕在自己耳边。阅读全文
全身心的学习,弥补自己知识的欠缺,使自己在理论上逐步形成了对网络、媒体的体系,并逐渐形成了自己的观点。我是一个不肯服输,不愿随大流的人。这种性格加上对技术的盲目崇拜,使我依然决定离开那个“悠闲、轻松”的部队大院,只身闯荡江湖。
研究生期间,我去过外企、国企。不同环境的磨砺,使我感到比在部队可真是大有用户之地。原本希望转业后月收入能够到5000元以上就好了。没曾想实习期间,就已经到7500元。随后,我在2005年11月加盟到现在的公司,薪金又有了巨大的飞跃。这种变化让我对工作、对人生都存满了向往和力量。
凭借着自己的热情和类似狂热的工作态度,我逐步从一个算法工程师发展到项目经理,并最终做到了公司技术的高层。自己负责的项目很多,视频搜索就是其中最为重要的一个项目。从立项到现在,3年多时间里,我感到自己从没有放松过,也没有轻松过。产品战略,核心竞争力,应用模式,这些问题从开始到现在一直萦绕在自己耳边。阅读全文
http://www.sydzdiy.com/article/cortrol/0593021534483126_57462.html
http://www.ed-china.com/ART_8800024137_400005_500004_TS_3d50dc0c.HTM
圆转扁 欧规转美规旅游插头 圆孔转扁头 转换插座 意大利转中国:
https://detail.tmall.com/item.htm?spm=a230r.1.14.16.dkZl8s&id=22384259741&cm_id=140105335569ed55e27b&abbucket=15
http://www.ed-china.com/ART_8800024137_400005_500004_TS_3d50dc0c.HTM
圆转扁 欧规转美规旅游插头 圆孔转扁头 转换插座 意大利转中国:
https://detail.tmall.com/item.htm?spm=a230r.1.14.16.dkZl8s&id=22384259741&cm_id=140105335569ed55e27b&abbucket=15
在Linux下,可以使用tr命令将换行符替换成空格。tr命令用于字符转换或删除,它可以在文本流中对字符进行替换或删除操作。
下面是将换行符替换成空格的tr命令示例:
tr '\n' ' ' < input.txt > output.txt
在这个命令中,input.txt是输入文件的名称,output.txt是输出文件的名称。tr命令会将input.txt中的换行符转换成空格,并将结果写入output.txt。
如果你想直接在终端中执行替换操作,而不生成一个新的文件,可以使用以下命令:
这会将input.txt中的内容输出到终端,并将其中的换行符替换为空格。
请确保替换操作不会影响到你重要的文件,最好在测试文件上先运行以确认结果符合预期。
============================================================
应用-s参数:-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符
串。
举例:删除空行
文件初始内容:
111111 wanchuyang
22222 wangyang
33333 zhangsan
44444 lisi
[root@pvcent20 chuyang]# tr -s ["\n"] < test.txt
111111 wanchuyang
22222 wangyang
33333 zhangsan
44444 lisi
小写到大写
[root@pvcent20 chuyang]# tr "[a-z]" "[A-Z]" < test.txt
111111 WANCHUYANG
22222 WANGYANG
33333 ZHANGSAN
44444 LISI
下面是将换行符替换成空格的tr命令示例:
tr '\n' ' ' < input.txt > output.txt
在这个命令中,input.txt是输入文件的名称,output.txt是输出文件的名称。tr命令会将input.txt中的换行符转换成空格,并将结果写入output.txt。
如果你想直接在终端中执行替换操作,而不生成一个新的文件,可以使用以下命令:
这会将input.txt中的内容输出到终端,并将其中的换行符替换为空格。
请确保替换操作不会影响到你重要的文件,最好在测试文件上先运行以确认结果符合预期。
============================================================
应用-s参数:-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符
串。
举例:删除空行
文件初始内容:
111111 wanchuyang
22222 wangyang
33333 zhangsan
44444 lisi
[root@pvcent20 chuyang]# tr -s ["\n"] < test.txt
111111 wanchuyang
22222 wangyang
33333 zhangsan
44444 lisi
小写到大写
[root@pvcent20 chuyang]# tr "[a-z]" "[A-Z]" < test.txt
111111 WANCHUYANG
22222 WANGYANG
33333 ZHANGSAN
44444 LISI