工作经验 2014.2.25更新

------------------------------------------------------------------------------------------------------------------------------------------------2013.6.4
1、一定要用自己的工具,这样确保工具可用性,避免浪费时间。
2、不要视图破解某些软件,直接寻找免激活版。
3、设备遇到问题,及时打客服电话,寻求专业人士的帮助。
------------------------------------------------------------------------------------------------------------------------------------------------2013.6.5
1、开发机因为盗版所以需要重装系统,但光盘下周才能到,可以临时搭建些简单东西先用着,比如jdk、tomcat,等光盘来了再花一天时间装系统,而不是等一周之后才能用。 【该条删掉,请看2013.6.20第一项】
2、数据物价,买刻录光盘一定要买正版的,去年买的盗版10张只有4张刻录成功,今天正版的索尼DVD,刻录速度快,噪音小,一次成功。
3、The processing instruction target matching "[xX][mM][lL]" is not allowed. web.xml的xml编码、版本标签未在首行首列。
4、因为静态页是非实时数据,可以在某种情况下顶替实时数据的错误。——王硕,于2013年6月5日下班路上。
------------------------------------------------------------------------------------------------------------------------------------------------2013.6.6
1、员工内部交流工具如果是飞信或微信,这种手机终端,可以在员工外出时收到最新信息。但要确保下班时间不打扰员工。
2、饭要一口一口吃,保证目前系统不受影响的情况下,快速实现产品,合理规划未来。快速实现产品不是盲目实现产品,也要有充分思考时间,只是不陷入未来的细节。
3、非业务的隔离出来,业务代理可以由页面人员来做,这样业务和页面不分家,方便快速开发,日后再隔离。必要情况下,前端业务,也要有自己的数据库和底层,但仅仅是为了支撑自己独立的业务。——王硕,于2013年6月6日中午。
4、squid,可做反向代理,类似于CDN缓存静态页面,但不能像CDN那样分担带宽。
5、“集群”和“群集”的区别,集群是多态物理机一个逻辑系统 透明性,群集是多物理多逻辑 独立性。
------------------------------------------------------------------------------------------------------------------------------------------------2013.6.7
1、对于未知的尝试,先尝试不破坏数据的方法(即便破坏数据的方法成功可能性很高),这样整体效率可能会更高,试验采样也会更多。
2、坚持每天备份。重要文件多方备份,有条理,不要造成版本不一致。
3、每天只工作6小时,余下的时间专门查资料或休息。
4、用笔记本记录重要的东西,一来加深印象,二来解决存放在电脑中忘记哪个目录的问题。当然计算机中也要记录。
5、pageEncoding 与 charset,第一阶段jsp编译成.java,根据pageEncoding读取jsp,第二阶段javac的java源码至字节码.class用utf-8,第三阶段载入第二阶段的执行结果采用charset编码并返回给客户端。
6、chmod u+x filename.sh,将文本改为可执行文件,无需sh直接执行。u文件所有者,+x添加可执行权限。
7、>标准输出重定向,>>标准输出重定向追加,2>标准错误输出重定向。>&标准输出与标准错误的重定向简写。
8、find /目录 -name filename 按文件名查找
find 目录 -name filename 2>/dev/null 按文件名查找 屏蔽错误信息(将错误信息转移到/dev/null这个特殊地方)
find 目录 -size 1500c,c表示单位bytes。大于 +1500c,小于 -1500c
find 目录 -amin -10 # 查找在系统中最后10分钟访问的文件
find 目录 -atime -2 # 查找在系统中最后48小时访问的文件
find 目录 -empty # 查找在系统中为空的文件或者文件夹
find 目录 -group cat # 查找在系统中属于 groupcat的文件
find 目录 -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find 目录 -mtime -1 #查找在系统中最后24小时里修改过的文件
find 目录 -nouser #查找在系统中属于作废用户的文件
find 目录 -user fred #查找在系统中属于FRED这个用户的文件
9、mysql不支持非localhost的地址连接,修改mysql数据库user表中的host选项为%
10、底层ip经常变,用反向链接域名的方式固定逻辑地址。这有点像分层开发中的代理层,隔离业务与技术的变化。
------------------------------------------------------------------------------------------------------------------------------------------------2013.6.8
1、关注官网发行的软件,一旦有新产品上线,要把它所有系统的所有版本都尽可能下载下来存档,因为开源领域的官网并不靠谱,说不定两周之后就不提供了。
2、官网下载之后,用rar压缩并设置密码,以免病毒感染。
3、如果版本比较老,官网已经没有了,可以去镜像站点试试。——李苏,于2013年6月8日下午。
4、BASH脚本的赋值=等号两边不能有空格(网上很多代码有空格的,直接复制不能运行)。
5、ubuntu里面sh脚本经常执行出错,今天终于找到原因了,ubuntu默认是dash 不是bash,所以执行时要显式引用 bash 取代 sh。
6、对于ubuntu默认使用dash问题,可以修改系统自带的软连接解决:sudo ln -sf /bin/bash /bin/sh
参数 s 是软连接,f是强制建立目录和文件,不论是否已经存在。
7、硬连接:物理文件,相当于热备系统,一改全改,但删除操作互不影响。
8、物化视图:用于预先计算并保存表连接或聚集等耗时较多的操作结果,和索引很相似,需要占用存储空间。——王硕,于2013年6月8日下午。
9、评判一个企业是否已经具备了完善的制度,关键要看这个企业的领导者是否已经制定出合理的薪酬待遇。
10、团队的凝聚力,源于每个人的归属感,外在的一切都不重要。
------------------------------------------------------------------------------------------------------------------------------------------------2013.6.9
1、Windows 2008 Server 配置IE安全选项:管理首页,安全信息,右边“配置 IE ESC”,禁用。
2、nexus安装好后,远程索引默认是关闭的。需要把Configuration的Download Remote Indexes开启,并右击Repair Index。
------------------------------------------------------------------------------------------------------------------------------------------------2013.6.13
1、可以用live CD体验一下要安装该系统的服务器是否能找到兼容驱动。
2、ntpdate us.pool.ntp.org,更新系统时间。 crontab -e */5 * * * * /usr/sbin/ntpdate us.pool.ntp.org | logger -t NTP 注意时间格式,如果格式错误,无法保存并提示没有安装crontab
如果没有ntpdate,yum install ntp
3、重启网卡:/etc/init.d/network restart
4、pwd察看当前所在目录。
5、root在/root下,其余用户如果有自己的目录就在/home/name下。一个软件多个实例的安装,实例要安装在自己name目录下。还有一些只用来登录的用户没有自己的目录。
6、创建用户时,只给登录权限,然后根据具体业务另外赋予目录权限。——王硕,于2013年6月13日下午。
7、安装完操作系统,先看看防火墙是否开启并允许远程登录,ssh是否开启并可以使用。——王硕,于2013年6月13日下午。
8、iptables启动 service iptables status service iptables restart service iptables stop
iptables开机自启动 chkconfig iptables off chkconfig iptables on chkconfig iptables --list,3是命令行模式,7是有界面的。
/etc/sysconfig/iptables iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
允许源地址为x.x.x.x/x的主机通过22(ssh)端口. iptables -A INPUT -p tcp -s x.x.x.x/x --dport 22 -j ACCEPT 允许80(http)端口的数据包进入 iptables -A INPUT -p tcp --dport 80 -j ACCEPT 禁止与211.101.46.253的所有连接 iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP 禁用FTP(21)端口 iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP 只禁用211.101.46.253地址的FTP连接 iptables -t nat -A PREROUTING -p tcp --dport 21 -d 211.101.46.253 -j DROP
9、察看进程:ps -ef | grep name
10、运行级别
0 - 停机(千万不要把initdefault设置为0) 1 - 单用户模式(像Windows9x下的安全模式) 2 - 多用户模式,但没有NFS支持 3 - 完全多用户模式,标准运行级 4 - 没有用到 5 - X11,即X Window 6 - 重启(千万不要把initdefault设置为6),运行init 6机器会重启。 修改级别:/etc/inittab
10、Bash Shell中,function functionName { #注意括号前面一定要有空格。
11、期待一元表达式,可能是比较运算符两边的变量没有赋值。
------------------------------------------------------------------------------------------------------------------------------------------------2013.6.14
1、将来做自动化部署用expect,抽空调研一下。——王硕,于2013年6月14日早上。
2、while : 相当于其他语言中的while(true),注意while后面有空格,否则会对指令识别错误。
3、: ${HOSTNAME?} {USER?} {MAIL?},取环境变量的值。
4、bash -x bashScript 察看每行执行状态。
5、方法返回值 functionName para0 para1 result=$?
------------------------------------------------------------------------------------------------------------------------------------------------2013.6.17
1、rest方法重载可以为null值的不同类型参数,可能会冲突,比如getObj(Integer)与getObj(String)。——忆王硕曾经说。
2、rest发布json,会遇到整形、长整型根据数据实际长度自动识别问题,导致数据类型出错。所以我们尽量用xml方式传输。——忆凤凰手机端接口出现过的问题。 xml是w3c标准,而json只是某老外个人小发明,日访问量过亿的大型互联网产品都在用xml,也没见人家xml会因为传输数据量大而影响网站响应速度,真正影响响应速度是建立和断开连接。
3、 大麦CSON压缩算法,只适合在线选座这一类业务。
4、cxf 2.5.0发布rest,如果list中包含一个对象,它会自动把list改为单个对象,造成客户端接收数据无法解析。——忆凤凰手机端接口出现过的问题。
5、只有负载均衡才能将压力负载,热备只能增加压力和维护成本,为啥 大麦网用热备方式负载数据库?热备只用来处理不可抗拒的物理损伤,与负载无关。
6、曾经遇到页面访问慢的问题,查了半天是数据库返回慢,开发人员连接远程数据库调试,速度很快,最终查到原因是另一个放热备的机架挂了,但前端接口调用的有时是S有时是M。——王硕,于2013年6月16日下午。
7、分布式与集群区别:分布式是将业务切割成多个处理节点,一个集群只处理一个业务。
8、集群主要分三大类:高可用集群、负载均衡集群、科学计算集群。
9、分布式的公共资源用单台是最容易挂的,还不如直接用单台可靠性高,故障恢复快。所以要引出分布式集群的概念。
10、前端可以按频道业务区分,故障影响面小,负载更灵活,不过市面上所谓的中大型公司都用不上。——忆王硕曾经说。
12、spawn是进入expect环境后才可以执行的expect内部命令,用来启动和命令的会话。
13、expect "password:" 这里的expect也是expect的内部命令判断上次输出结果是否包含了"password:"字符串。有则立即返回,否则等待超时后返回。
14、send "ispass/r"执行交互动作,与手动输入密码等效。末尾加上/r表示回车。
15、interact,执行完保持交互状态,把控制权交给控制台,这时就可以手工操作了。如果没有这一句,登录完成后会自动退出。
16、如果分公司与分公司之间调配办公设备,一定要把型号、配置、性能,统一盘点清楚,然后再根据需要调配。
17、公司开业第一天,应该把工具都备齐,比如备用网线、螺丝刀、备用电话、三通、胶带、剪刀、软件安装盘等各种工具,不一定值钱,但很重要。
------------------------------------------------------------------------------------------------------------------------------------------------2013.6.18
1、服务器更换硬件,可能需要钥匙才能开启,所以从外地调服务器过来,一定也要把说明书、电源线、钥匙(如果有)、保修单、驱动光盘等等,都一起发过来。
2、选择时区:tzselect
有时时间虽然同步了,时区也对,但是显示不正确,可以使用硬件、系统时间同步来调整。 /sbin/hwclock --systohc #设置硬件时间和系统时间一致。 /sbin/hwclock --hctosys #设置系统时间和硬件时间一致。
hwclock -w #将当前时间写入CMOS。
3、关闭不常用服务。 cd ~ chkconfig --list > chkconfig.txt for oldboy in `chkconfig --list | grep 3:on | awk '{print $1}'`;do chkconfig --level 3 $oldboy off; done for oldboy in ntpd crond network syslog sshd;do chkconfig --level 3 $oldboy on; done chkconfig --list | grep 3:on
4、开启8080到80映射。 iptables-save > iptables.save.bak iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 iptables-save /etc/rc.d/init.d/iptables restart
iptables-restore iptables.save.bak # 恢复
5、实际部署中,所有操作系统的防火墙应该是关闭的,使用硬件防火墙转发所有机器,统一一个节点配置。——王硕,2013年6月18日下午。
线上部署安全性问题的防火墙策略中,有内墙、外墙之分。绝大多数系统入侵来源于局域网内部,所以每台服务器都配置自己的防火墙策略。 但是这样引发一个问题,如果服务器数量很大,维护将非常麻烦,而且容易出错。再引发一个问题,如果防火墙策略需要大批更换,挨个每台进行替换将非常麻烦。
王硕就此观点提出所有服务器都接硬件防火墙,由硬件防火墙按逻辑业务划分子网,然后每个子网之间的通信再设定规则。 也就是所有服务器之间的通信也都经过硬防,修改和替换时,只需改一个硬防节点,配置好的规则备份也方便,如果遇到入侵,可以快速关掉存在漏洞的通信阀门。
6、所有服务器都经过Nginx,Nginx在线上配置时如果出错,是否会将我们的SSH也断开了,只能跑到机房本地操作。——王硕,2013年6月18日下午 Nginx只是携带端口转发功能的Web容器,也是最近才支持TCP管理的,SSH是直接连接服务器的,不会走Nginx服务,所以不会影响。
我后来的理解(王硕并不同意这种表达方式,大家不要轻易效仿): 传输介质由Internet接入防火墙,再接入Nginx,再接入具体服务器,这是一个树形拓扑结构,但这是逻辑拓扑结构。(逻辑拓扑结构是软件上的,也是我们做架构分析时直接面对的) 而真正的拓扑结构是什么样子的呢?是星型或总线型结构,即所有服务器都【直接】接防火墙/路由器,真正控制走哪个逻辑链路的是防火墙/路由器。 也就在Nginx上层存在一个逻辑十字路口,到底走Nginx代理还是直接进入服务器,是靠IP地址决定的。如果web服务走Nginx就将域名绑定NginxIp,如果SSH进入服务器,那肯定是连接服务器具体IP,所以互不影响。
由此发生争论,大约持续20分钟后,王硕彻底无语了,问:“如果在自己单台PC上安装Nginx、tomcat、SSH,没有防火墙/路由器,谁来控制走哪条链路?所以这个问题不是防火墙策略问题,而是Nginx与SSH针对不同应用本质的问题。” 我沉思一会回答:“计算机的网卡是数据链路层中的媒体介质访问层,不存在路由,但是,我们的操作系统是支持TCP/IP协议的,也就说软件上至少在网络层以上,应该是应用层,操作系统自己就是网关,所以具有防火墙/路由器功能。” 然后王硕很累。。很无奈。。。。。。
渐渐地转过头问我:“我们最初讨论的问题是啥?懂了吗?你最初的问题是为啥服务器通过Nginx代理后SSH连接不受Nginx配置的影响” 我说:“你别操心,别难过,其实我真的懂了,这个问题的核心是Nginx和具体服务器的IP地址不同” 王硕:“嗯” 我:“所以这是防火墙/路由器 的链路选择问题。” 王硕奔泪中。。。 T_T~~~ 回过头来:“你不要扯到网络硬件设备上去,你这么表达是有问题的,怪不得岳学理面试你的时候你俩扯不到一起去” 然后又争论了很久。。。
------------------------------------------------------------------------------------------------------------------------------------------------2013.6.19
1、互联网开发,外键这个东西,是逻辑外键,上层不同的业务,外键所对应的实体类型不一样,其他字段的意思也不一样。——王硕,与2013年6月19日中午。 比如通用组件计数器,计数字段在土豆网“点击数”和“赞”,应该设计成一个存储单元。 hibernate只用于核心项目的开发,不要用做有变化业务的项目开发。因为核心项目的表结构都有明确的目的,不存在这种通用性字段设计,外键也就明确了。 如果hibernate开发有变化的业务,查询时不应该使用hibernate级联查询方式,而是手写sql语句,此时也就失去了他自身优势。
2、groupadd wuyue # 添加组账户 cat /etc/group # 组账户列表
3、useradd -g wuyue co_memcached # 添加用户账户 passwd -f co_memcached # 设置密码 cat /etc/passwd # 用户账户列表 cat /etc/passwd | grep -v /sbin/nologin | cut -d: -f 1 # 察看可以登录的系统用户
4、/opt/目录安装的软件附属生成文件只能在/opt/中,所以专门提供测试安装软件。——王硕,2013年6月19日 正常安装软件要装在/usr/local/中,然后将实例生成文件再分别放到其他用户目录。相当于Windows里面的Program Files安装office后,还要在用户目录中创建用户数据文件一样。 如果遇到系统迁移,目标服务器安装好这些软件后,直接迁移实例就可以。
5、centos上安装memcached yum install gcc -y yum install libevent libevent-devel -y # libevent是跨平台的事件触发网络库
cd ~/download/ wget http://memcached.googlecode.com/files/memcached-1.4.7.tar.gz tar -xzvf ./memcached-1.4.7.tar.gz # 解压 rm -rf ./memcached-1.4.7.tar.gz # 删除安装包,以免将来有人重复安装。
mv ./memcached-1.4.7 /tmp/ cd /tmp/ chown co_memcached:wuyue /tmp/memcached-1.4.7 -f -R # 赋予所属用户
mkdir /usr/local/memcached chown co_memcached:wuyue /usr/local/memcached -f -R # 赋予所属用户 ll /usr/local/memcached/
su - co_memcached cd /tmp/memcached-1.4.7/ ./configure --prefix=/usr/local/memcached # 指定安装目录 make # 编译 make install # 编译安装 rm -rf ./memcached-1.4.7/ # 删除安装包,以免将来有人重复安装。
vi /etc/profile # 配置环境变量 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/ #添加/usr/local/lib/到LD_LIBRARY_PATH。
su - co_memcached /usr/local/memcached/bin/memcached -d -u co_memcached -m 2048 -p 11211 ps -ef | grep memcached # 确认启动成功
------------------------------------------------------------------------------------------------------------------------------------------------2013.6.20
1、不要交付半成品。 理论上,可以迭代交付,实际很多情况下,造成紧急迭代交付的原因是资源匮乏。 如果资源匮乏,我们先部署第一步让人家使用,在部署第二步的时候因为资源匮乏需要拆除第一步,此时此刻又没有充足的资源接管第一步的工作,反而影响已经使用第一步的人。 所以,即便是迭代交付,也一定要交付完全独立可用的东西,避免后期资源需要借用前期资源造成的拆除。 在没有部署第一步的时候,使用老的方式解决问题,避免折腾,反而更好。
2、who 察看当前登录用户 lsof(list open files),列出当前系统打开文件的工具,可以看到哪个用户在访问哪个文件。
3、公司的路由器一定要用企业级,其实企业级的价格只相当于两台家用路由器的价格,但是支持多WAN,算下来价格相同支持的节点数也相同,但便于管理和组建复杂环境。 今天我遇到一个比较复杂的网络问题,两个家用无线路由器,分别接入单独的ADSL,但是要让两台路由下的计算机处在同一个局域网中,如果企业路由多WAN口,就不存在这个问题。
------------------------------------------------------------------------------------------------------------------------------------------------2013.6.21
1、linux文件目录权限 2.3.4,属于user 5.6.7,属于group 8.9.10,属于others r读 4 w写 2 x执行 1
2、jdk 安装 java -version # 察看已经安装的版本号,或者是否已安装需要卸载。yum remove softwareName chmod 555 /tmp/jdk-6u45-linux-x64.bin cd /tmp/ /tmp/jdk-6u45-linux-x64.bin rm -rf /tmp/jdk-6u45-linux-x64.bin mv /tmp/jdk1.6.0_45 /usr/local/jdk1.6.0_45
vi /etc/profile #set java JAVA_HOME=/usr/local/jdk1.6.0_45 PATH=$PATH:/$JAVA_HOME/bin CLASSPATH=.:$JAVA_HOME/lib JRE_HOME=$JAVA_HOME/jre export JAVA_HOME PATH CLASSPATH JRE_HOME
cd /usr/bin
ln -s -f /usr/local/jdk1.6.0_45/bin/java ln -s -f /usr/local/jdk1.6.0_45/bin/javac ln -s -f /usr/local/jdk1.6.0_45/bin/jar ln -s -f /usr/local/jdk1.6.0_45/bin/javadoc ln -s -f /usr/local/jdk1.6.0_45/bin/jcontrol
java -version # 检查是否安装正确
------------------------------------------------------------------------------------------------------------------------------------------------2013.6.24
1、Tomcat 安装
cp -rf ~/install/apache-tomcat-7.0.32.tar.gz /tmp/ chmod 555 /tmp/apache-tomcat-7.0.32.tar.gz cd /tmp/ tar -xzvf /tmp/apache-tomcat-7.0.32.tar.gz rm -rf /tmp/apache-tomcat-7.0.32.tar.gz mv /tmp/apache-tomcat-7.0.32/ /usr/local/ chmod 775 /usr/local/apache-tomcat-7.0.32/ -f -R
mkdir /data/java/tomcat/webTomcat # 注意linux需要逐层创建文件夹,创建之前先检查上级目录是否需要创建。 cp -rfv /usr/local/apache-tomcat-7.0.32/* /data/java/tomcat/webTomcat/ useradd -g wuyue co_webtomcat passwd -f co_webtomcat ll /home/ # 察看是否创建成功 chown co_webtomcat:wuyue /data/java/tomcat/webTomcat/ -f -R rm -rf /data/java/tomcat/webTomcat/bin/
vi /home/co_webtomcat/.bash_profile # tomcat CATALINA_HOME=/usr/local/apache-tomcat-7.0.32 CATALINA_BASE=/data/java/tomcat/webTomcat CATALINA_OPTS='-server -Xms256m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=128m -Dfile.encoding=UTF8 -Djava.awt.headless=true' export CATALINA_HOME CATALINA_BASE CATALINA_OPTS
------------------------------------------------------------------------------------------------------------------------------------------------2013.6.25
1、ActiveMQ 安装
cp -rf ~/install/apache-activemq-5.6.0-bin.tar.gz /tmp/ chmod 555 /tmp/apache-activemq-5.6.0-bin.tar.gz tar -xzvf /tmp/apache-activemq-5.6.0-bin.tar.gz rm -rf /tmp/apache-activemq-5.6.0-bin.tar.gz
vi /tmp/apache-activemq-5.6.0/conf/activemq.xml         <transportConnectors>             <transportConnector name="openwire" uri="tcp://localhost:61616"/>         </transportConnectors>
mv /tmp/apache-activemq-5.6.0/ /data/java/
mkdir /data/java/apache-activemq-5.6.0/logs vi /data/java/apache-activemq-5.6.0/bin/start-activemq.sh $ACTIVEMQ_BASE/bin/linux-x86-64/activemq > $ACTIVEMQ_BASE/logs/console.log 2>&1 & chmod 775 /data/java/apache-activemq-5.6.0/bin/start-activemq.sh
useradd -g wuyue co_activemq passwd co_activemq chown co_activemq:wuyue /data/java/apache-activemq-5.6.0/ -f -R
vi /home/co_activemq/.bash_profile # activemq ACTIVEMQ_BASE=/data/java/apache-activemq-5.6.0 SUNJMX="-Dcom.sun.management.jmxremote.port=1616 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_BASE}/conf/jmx.password -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_BASE}/conf/jmx.access" ACTIVEMQ_OPTS="-server -Xms1024m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=128m -Dorg.apache.activemq.UseDedicatedTaskRunner=true" export ACTIVEMQ_BASE SUNJMX ACTIVEMQ_OPTS
2、检查rpm包是否支持安装目录重定位(relocatable)
rpm -qpi ./MySQL-server-5.5.32-1.linux2.6.x86_64.rpm | head -1
------------------------------------------------------------------------------------------------------------------------------------------------2013.6.26
1、安装MySql
rpm -q mysql # 检查是否已经安装过
cp -rf /root/install/MySQL-server-5.5.32-1.linux2.6.x86_64.rpm /tmp/ chmod 555 /tmp/MySQL-server-5.5.32-1.linux2.6.x86_64.rpm rpm -ivh /tmp/MySQL-server-5.5.32-1.linux2.6.x86_64.rpm # --install --verbose 详细信息 --hash 安装进度
service mysql start netstat -an # 3306
cp -rf /root/install/MySQL-client-5.5.32-1.linux2.6.x86_64.rpm /tmp/ chmod 555 /tmp/MySQL-client-5.5.32-1.linux2.6.x86_64.rpm rpm -ivh /tmp/MySQL-client-5.5.32-1.linux2.6.x86_64.rpm
/usr/bin/mysql_secure_installation Enter current password for root (enter for none): 回车 Set root password? [Y/n] y 回车 Remove anonymous users? [Y/n] y 回车 Disallow root login remotely? [Y/n] n 回车,注意这里是n,否则不允许远程访问 Remove test database and access to it? [Y/n] y 回车 Reload privilege tables now? [Y/n] y 回车
mysql -u root -p mysql> show databases; mysql> use mysql mysql> show tables; mysql> select * from user; mysql> update user set Host='%' where ( Host = '::1' );
service mysql restart
rm -rf /tmp/MySQL-* # 安装、拷贝、设置权限,也都可以用这个通配符方式,小心操作便可。
2、安装amoeba
mkdir /tmp/amoeba-mysql-binary-2.2.0 cp -rfv /root/install/amoeba-mysql-binary-2.2.0.tar.gz /tmp/amoeba-mysql-binary-2.2.0/ chmod 555 /tmp/amoeba-mysql-binary-2.2.0/amoeba-mysql-binary-2.2.0.tar.gz tar -xzvf /tmp/amoeba-mysql-binary-2.2.0/amoeba-mysql-binary-2.2.0.tar.gz rm -rf /tmp/amoeba-mysql-binary-2.2.0/amoeba-mysql-binary-2.2.0.tar.gz mv /tmp/amoeba-mysql-binary-2.2.0/ /usr/local/
------------------------------------------------------------------------------------------------------------------------------------------------2013.6.27
1、nginx安装
yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel useradd -g wuyue -M -s /sbin/nologin co_nginx
cp -rfv /root/install/nginx-1.4.1.tar.gz /tmp/ chmod 555 /tmp/nginx-1.4.1.tar.gz tar -xzvf /tmp/nginx-1.4.1.tar.gz rm -rf /tmp/nginx-1.4.1.tar.gz
cd /tmp/nginx-1.4.1/ ./configure --user=co_nginx --group=wuyue --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --prefix=/usr/local/nginx
可能有错误: ./configure: error: SSL modules require the OpenSSL library. You can either do not enable the modules, or install the OpenSSL library into the system, or build the OpenSSL library statically from the source with nginx by using --with-openssl=<path> option. 下载相应的src,然后指定--with-pcre=/data/develop/core/pcre-8.12 --with-openssl=/data/develop/core/openssl-1.0.0d --with-zlib=/data/develop/core/zlib-1.2.5
./configure --user=co_nginx --group=wuyue --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --prefix=/usr/local/nginx --with-openssl=~/install/src/openssl-1.0.1d make && make install rm -rf /tmp/nginx-1.4.1/
vi /usr/local/nginx/conf/nginx.conf #user  co_nginx;
/usr/local/nginx/sbin/nginx -t # 测试启动 /usr/local/nginx/sbin/nginx ps -ef | grep nginx
------------------------------------------------------------------------------------------------------------------------------------------------2013.7.1【总结王硕最近说】
1、配置管理
svn目录要简单,这样权限分配也简单,方便大家共享资源。svn即便出现误删除等操作,也可以通过日志回滚。
配置管理做版本控制,应该做成熟模块的版本控制,而不是开发过程中的版本控制。一个模块调用另一个模块时,应该调用成熟版,而不是快照版,这样通过nexus可以避免svn拉分支的现象。
配置管理员也应该是白盒,做版本控制、打包、部署等操作。
2、SQA
因地制宜,在细心观察的基础上帮别人简化流程,而不是用自己制定的流程规范别人。
所以SQA需要一个总监以上级的人,要有充足的开发、管理经验,找到问题关键点,只做必要性的修正,避免任何形式主义。
3、配置文件与标注区别(举例)
配置文件可以自己注入想要实例化的类,标注无法做到。spring本质原理的发挥。
配置文件做变量初始化。
4、测试环境和线上环境应该保持软件上的一致,但线下测试环境没有必要使用线上服务器相同的硬件配置,使用淘汰下来的服务器或客户机就可以。
------------------------------------------------------------------------------------------------------------------------------------------------2013.7.2
1、测试人员都应该是白盒,黑盒测试的目的是验证需求,由产品部门指派。
2、非关系型数据库关注业务本身,字段设计与查询方式必须简单、直接。
3、如果安装ADSL时,有多条线路,应该找个电话接上试试号码,以免填错。
4、log4j
log4j中有三个主要的组件,它们分别是 Logger、Appender 和 Layout,log4j允许开发人员定义多个Logger,每个Logger拥有自己的名字,Logger之间通过名字来表明隶属关系。
有一个Logger称为Root,它永远存在,且不能通过名字检索或引用,可以通过Logger.getRootLogger()方法获得,其他Logger通过Logger.getLogger(String name)方法。
Appender则是用来指明将所有的log信息存放到什么地方,log4j支持多种Appender,如 console、files、GUI components、NT Event Logger等,一个Logger可以拥有多个Appender,也就是你可以将Log信息输出到屏幕的同时存储到一个文件中。
Layout的作用是控制Log信息的输出方式,也就是格式化输出的信息。
log4j中,将要输出的Log信息定义了5种级别,依次为DEBUG、INFO、WARN、ERROR、FATAL,当输出时,只有级别高过配置中规定的级别信息才能真正输出。
log4j支持两种配置文件:XML、java的property。
------------------------------------------------------------------------------------------------------------------------------------------------2013.7.4
1、如果前端页面没有展示错误的必要,我们的异常都不抛出,直接记录日志就可以了。这样前后台开发,才能真正的并行展开。——王硕,2013年7月4日上午。
比如discuz、phpWind等论坛模板,底层数据库连接出异常了,报给页面展示conn.php错误,或者干脆把数据库路径报出来,对用户来说没任何用途,反而降低系统安全性。
------------------------------------------------------------------------------------------------------------------------------------------------2013.7.8
1、认真地写测试用例的过程中,往往就能发现隐含业务bug。所以开发人员要自己写测试用例,很可能会测试到测试人员不容易发现的bug。
2、注释除了 初始化、赋值 之外 都应该单独一行,对 方法、文件、类 的长度限制要算注释行数的,因为必要的注释多了就证明复杂度比较高。
3、很多成功的产品,都是在未开发时就打广告的,在客户的期盼中上市。很多失败的产品,都是打算在开发完成后再推广的,结果永远都没开发完。2013年7月8日晚,与王硕在地铁上讨论。
------------------------------------------------------------------------------------------------------------------------------------------------2013.7.9
1、如果DHCP获取IP地址有问题,以管理员身份运行cmd,执行 netsh winsock reset,然后重启计算机。
------------------------------------------------------------------------------------------------------------------------------------------------2013.7.11
1、局域网传输文件 tar -czvf sessionTomcat.gz /data/java/tomcat/sessionTomcat/ scp ./sessionTomcat.gz root@192.168.0.253:/tmp/
2、Tomcat Connector配置
<Connector port="8080" protocol="HTTP/1.1"                connectionTimeout="20000"                redirectPort="8443" /> 可以更改为: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxHttpHeaderSize="8192" maxThreads="250" enableLookups="false" acceptCount="100" compression="true" URIEncoding="UTF-8"/>
maxHttpHeaderSize="8192":最大HttpHeader,缺省为4096。 maxThreads="250":最大线程数,可以设置250-300,缺省为40。 enableLookups="false":当执行request.getRemoteHost()时候,是否执行DNS搜索得到实际客户端主机名,缺省是true。 acceptCount="100":当所有的请求处理线程都在使用的时候,请求等待队列的大小,缺省是10。 compression="true":使用压缩,可以节省带宽 URIEncoding="UTF-8":URI的编码,使用UTF-8可以确保URL按照UTF8编码后的参数可以正确得到。
------------------------------------------------------------------------------------------------------------------------------------------------2013.7.12
1、UML这种东西就像瑞士军刀,看起来工具很多很有用,其实啥用都没有。
2、树立品牌,要有个性,靠出个洋相炒作一下,活不长久。
------------------------------------------------------------------------------------------------------------------------------------------------2013.7.17
王硕codeReview
1、相同的作用的常量、方法,都放在同一个位置。
2、能配置的常量参数,都走配置文件。
3、配置文件单位与实际使用单位不同,可以非final,不一定要用final约束程序员修改常量。
4、底层不抛状态码的,返回null需要在接口注释中说明。
5、xx-业务名-service.xml
6、参数判断都在最外层,因为最外层有业务。结合上文减少不必要的参数判断。
7、有的缓存客户端是不抛异常的,不用catch。
8、两字符串比较时,不要用 contains 代替 equals。
9、如果底层程序由于没有必要操作而直接跳过操作,要返回正常,让上层透明,因为没有错误出现。这样上层可以以为完全执行ok,并且用这个成功状态执行其他操作。
10、所有无业务的底层操作,都应该拆分成private,然后有业务的(那怕就是判断参数是否合法)定义成public再调用这个private。
------------------------------------------------------------------------------------------------------------------------------------------------2013.7.23
1、mybatis 尽量用#{}不用${},在sqlserver中的top需要${}否则性能很慢。——忆王硕曾经说 使用${}需要注意字符串过滤,否则有注入漏洞。
2、PowerDesigner导出sql语句。 Database → Datebase Generation...
------------------------------------------------------------------------------------------------------------------------------------------------2013.7.27
1、mongodb 安装 cp -rf ~/install/mongodb-linux-x86_64-2.4.6.tgz /tmp/ chmod 555 /tmp/mongodb-linux-x86_64-2.4.6.tgz cd /tmp/ tar -xzvf /tmp/mongodb-linux-x86_64-2.4.6.tgz rm -rf /tmp/mongodb-linux-x86_64-2.4.6.tgz mv /tmp/mongodb-linux-x86_64-2.4.6/ /usr/local/mongodb-2.4.6/
mkdir /data/java/mongodb-2.4.6/ mkdir /data/java/mongodb-2.4.6/log mkdir /data/java/mongodb-2.4.6/data mkdir /data/java/mongodb-2.4.6/data/db
useradd -g wuyue co_mongodb passwd co_mongodb
chown co_mongodb:wuyue /usr/local/mongodb-2.4.6/ -f -R chown co_mongodb:wuyue /data/java/mongodb-2.4.6/ -f -R
su - co_mongodb
/usr/local/mongodb-2.4.6/bin/mongod --logpath=/data/java/mongodb-2.4.6/log/mongodb.log --logappend --dbpath=/data/java/mongodb-2.4.6/data/db --nojournal --port=20000 --maxConns 500 --fork
ps -ef | grep mongod /usr/local/mongodb-2.4.6/bin/mongo localhost:20000 > show dbs
------------------------------------------------------------------------------------------------------------------------------------------------2013.7.28
1、Replica Sets
mkdir -p /data/java/mongodb-2.0.9/data/r0 mkdir -p /data/java/mongodb-2.0.9/data/r1 mkdir -p /data/java/mongodb-2.0.9/data/r2
mkdir -p /data/java/mongodb-2.0.9/data/key echo "this is rs1 super secret key">/data/java/mongodb-2.0.9/data/key/r0 echo "this is rs1 super secret key">/data/java/mongodb-2.0.9/data/key/r1 echo "this is rs1 super secret key">/data/java/mongodb-2.0.9/data/key/r2 chmod 600 /data/java/mongodb-2.0.9/key/r*
/usr/local/mongodb-2.0.9/bin/mongod --replSet rs1 --fork --port=10000 --dbpath=/data/java/mongodb-2.0.9/data/r0 --logpath=/data/java/mongodb-2.0.9/log/r0.log --logappend --nojournal --maxConns 100 --oplogSize 10 /usr/local/mongodb-2.0.9/bin/mongod --replSet rs1 --fork --port=10001 --dbpath=/data/java/mongodb-2.0.9/data/r1 --logpath=/data/java/mongodb-2.0.9/log/r1.log --logappend --nojournal --maxConns 100 --oplogSize 10 /usr/local/mongodb-2.0.9/bin/mongod --replSet rs1 --fork --port=10002 --dbpath=/data/java/mongodb-2.0.9/data/r2 --logpath=/data/java/mongodb-2.0.9/log/r2.log --logappend --nojournal --maxConns 100 --oplogSize 10
/usr/local/mongodb-2.0.9/bin/mongo -port 10000
> config_rs1={_id:'rs1',members:[{_id:0,host:'localhost:10000'},{_id:1,host:'localhost:10001'},{_id:2,host:'localhost:10002'}]} {         "_id" : "rs1",         "members" : [                 {                         "_id" : 0,                         "host" : "localhost:10000",                         "priority" : 1                 },                 {                         "_id" : 1,                         "host" : "localhost:10001"                 },                 {                         "_id" : 2,                         "host" : "localhost:10002"                 }         ] }
> rs.initiate(config_rs1); {         "info" : "Config now saved locally.  Should come online in about a minute.",         "ok" : 1 }
> rs.status()
------------------------------------------------------------------------------------------------------------------------------------------------2013.7.29
1、CentOS 释放内存
echo 1 > /proc/sys/vm/drop_caches
free -m
total 内存总数 used 已经使用的内存数 free 空闲的内存数 shared 多个进程共享的内存总额 buffers buffer Cache和cached Page Cache 磁盘缓存的大小 -buffers/cache (已用)的内存数:used - buffers - cached +buffers/cache(可用)的内存数:free + buffers + cached 可用的memory=free memory+buffers+cached
2、察看主板上的内存条
dmidecode |grep -A16 "Memory Device$"
3、公司内部的接口,底层和代理的interface可以放在统一的jar包中,只要在javadoc中说明就可以了。——王硕,2013.7.29晨。
4、尽量不要IService,这个代码量虽然少,但开发具体业务会有难度,比如PO与DTO的转化、具体业务的参数判断等。——王硕,2013.7.29晨。
------------------------------------------------------------------------------------------------------------------------------------------------2013.8.1
下班路上与王硕讨论
1、wap只是现有产品的衍生物,不是营销手段。如果说做了wap就能带来多大流量,那基本上是不可能的。
2、做wap产品要有特色,因为手机屏幕小,流量少,网速慢,所以内容不能和pc一样,要解决在没有电脑条件下的紧急事务。
------------------------------------------------------------------------------------------------------------------------------------------------2013.8.17
1、使用mongodb时,不要用count方法,查询idList的时间也比count的时间短。——忆王硕曾经说 所以我们在mongodb中用count翻页时,需要查询idList然后求size()。每次多查询一个id,判断当前页是不是最后一页。
2、使用mongodb时,getByIdList查询出来的数据可能和idList顺序不一致,需要重新根据idList排序。——忆王硕曾经说
3、关联表dto往往要携带主业务表的字段,因为很多时候单纯查询关联表没有意义。——王硕,2013.8.13 CodeReview 此时我们需要提供两个查询,一是返回主业务的idList,二是关联表dto含主表字段的数据,在基层代理里面做。
------------------------------------------------------------------------------------------------------------------------------------------------2013.8.19
yum install sysstat
[root@COS ~]# iostat Linux 2.6.18-308.el5 (COS.D.IBM.251)    2013年08月19日
avg-cpu:  %user   %nice %system %iowait  %steal   %idle            0.00    0.00    0.00    0.09    0.00   99.90
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn sda               0.33         0.60         6.03    1610042   16218670 sda1              0.00         0.16         0.00     419476         30 sda2              0.33         0.44         6.03    1190180   16218640 dm-0              0.76         0.19         6.03     504474   16218640 dm-1              0.00         0.00         0.00        912          0
%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
------------------------------------------------------------------------------------------------------------------------------------------------2013.8.28
1、eclipse和jdk的字长必须一致,否则eclipse启动报错。
2、系统字段,比如删除标志,dao的update不应该更新。创建时间等字段,底层可以放开,但对前面的代理层不应该提供,与此同时底层必须写上注释:啥时候可能会用,上层禁止放开等警告。
------------------------------------------------------------------------------------------------------------------------------------------------2013.8.30
1、Eclipse 无法创建 Tomcat Server Cannot create a server using the selected type D:\workspace_3.7_2013\.metadata\.plugins\org.eclipse.core.runtime\.settings 把org.eclipse.wst.server.core.prefs和org.eclipse.jst.server.tomcat.core.prefs 这两个文件删掉,重启Eclipse
------------------------------------------------------------------------------------------------------------------------------------------------2013.9.6
1、MySql热备,热备服务器配置与在线服务器配置一样,资源浪费。 让统计类的业务访问热备服务器,这样统计计算时不占用在线服务器资源。——王硕,2013.9.4 晚上 将Mongodb安装在热备服务器上,避免热备服务器资源浪费。——王硕,2013.9.5 上午 热备服务器的资源过剩主要体现在CPU与内存,如果为了避免热备服务器资源浪费而安装其他服务,应该将其他服务单独用一块硬盘,以解决热备的IO瓶颈,甚至支持服务、数据、日志 的热插拔。——柳晛,2013.9.5 上午
2、为什么要用基础Service封装Dao? 其实基础Service就是封装了一下Dao和参数转换,目的是为了分布式部署,因为Dao无法发布服务而基础Service可以。 如果不用分布式,我们完全可以用Dao当基础Service,用Service当代理Service,把所有业务写在基础Service中。
3、图片使用 独立二级域名,方便将来做统一路径管理。——王硕,2013.9.5 晚上
4、wap使用独立的nginx。——王硕,2013.9.5 晚上
------------------------------------------------------------------------------------------------------------------------------------------------2013.9.16
1、察看那些进程占用了 80端口
netstat -lnp | grep 80 tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      2953/nginx: worker 
2、察看linux内核版本 uname -a Linux cn.27rc.hasee 2.6.18-308.el5 #1 SMP Tue Feb 21 20:06:06 EST 2012 x86_64 x86_64 x86_64 GNU/Linux
3、察看linux版本 lsb_release -a
4、察看cpu信息 cat /proc/cpuinfo
5、察看内存信息 cat /proc/meminfo
6、top察看各核心占用情况 按键盘数字键:1
------------------------------------------------------------------------------------------------------------------------------------------------2013.9.22
1、安装Nexus
cd ~/download/ wget http://www.sonatype.org/downloads/nexus-latest-bundle.tar.gz
mv ~/download/nexus-2.6.3-01-bundle.tar.gz ~/install cp -rfv ~/install/nexus-2.6.3-01-bundle.tar.gz /tmp/ cd /tmp/
tar -xzvf ./nexus-2.6.3-01-bundle.tar.gz rm -rf ./nexus-2.6.3-01-bundle.tar.gz
useradd -g wuyue co_nexus passwd co_nexus
mv /tmp/nexus-2.6.3-01/ /data/java/ chown co_nexus:wuyue /data/java/nexus-2.6.3-01/ -f -R
/data/java/nexus-2.6.3-01/bin/jsw/linux-x86-64/nexus start ps -ef | grep nexus
2、安装svn,subversion
yum install subversion -y
mkdir /data/svn mkdir /data/svn/repos svnadmin create /data/svn/repos # 创建svn库
------------------------------------------------------------------------------------------------------------------------------------------------2013.10.07
1、Nginx日志格式改为:     log_format  main  '$remote_addr - [$time_local] "$request" '                       '$status $body_bytes_sent "$http_referer" ';
2、目录配置,如果在Window下,应该注意\写成\\,否则就将后面的字符转义了。
3、tomcat日志格式改为:         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"                prefix="access_log." suffix=".log"                pattern="%h %l %u %t &quot;%r&quot; %s %b &quot;%{Referer}i&quot; &quot;%{User-Agent}i&quot; %c %D" resolveHosts="false" />
------------------------------------------------------------------------------------------------------------------------------------------------2013.11.15
1、如果分布式开发任务量较重,可以先用private方法代替分布式,以拆分规范控制代码质量。
2、mysql创建测试数据库 SET character_set_database='utf8'; SET character_set_server='utf8'; create database grant all on test.* to 'test' Identified by "test";
3、底层通用系统,可能别人只需要一部分,所以开发时要注意每个细小模块都可以单独使用,并且提供给别人调用时,一定要想方设法减少调用者工作量。
4、对于通用性方法,在上层提供代理时,可适当封装固定参数,以减少参数数量,提高易用性。
5、Window Nginx 启动 关闭 重启 start nginx.exe 启动 nginx -s stop 强制关闭 nginx -s quit 安全关闭 nginx -s reload 改变配置文件的时候,重启nginx工作进程,来时配置文件生效 nginx -s reopen 打开日志文件
6、外地开发。 Session、权限系统、用户中心,这些可以单独部署的系统可以在外网服务器上部署,并暂时对外开放。 JMS、Memcached、Mongodb,等底层数据库或中间件,由开发机自己安装,不要对外开放。 ——王硕
7、XSS攻击可以用修改DOM的方式修改from标签,从而使数据提交到其他系统中。——王硕 2013.11.14 晚上
------------------------------------------------------------------------------------------------------------------------------------------------2013.11.27
1、url重写不方便调试 在分布式环境中,我们可能需要前端负载均衡服务器做代理,对url进行重写,但是这种情况阻碍了开发环境的调试,需要在开发环境也部署负载均衡或者重写拦截器。
2、伪静态的作用 在网上大多都说伪静态能够提高安全性,其实我觉得这个理论就好比POST比GET更安全一样,其实除了能安慰自己之外还真起不到安全效果。 我认为伪静态的作用,仅仅是为以后真正的静态页面提前搭建目录,使得将来不用修改整个站点的url路径。 后来据王硕所说,即便将来用静态化,为保证目录兼容性,也不必现在用伪静态的方式提前搭好,因为运维人员可以通过反向代理将错误的路径指正确。
3、struts2漏洞由前端代理可以过滤 今年暴出struts2的重大漏洞,实际这种漏洞在负载均衡环境中,反向代理可以将敏感字符过滤。 当然,我们的安全机制不能只局限于网络,还要在程序中分层把控。
------------------------------------------------------------------------------------------------------------------------------------------------2013.12.17
1、我最近总结出一点来、、当我们看到我们身上有一点比别人强的时候、应该为自己高兴、但是不要看轻别人。——鄢华健 于 2013.12.9下午在 大麦辞职群中所说。
2、jQuery 使用 CSS 选择器来选取 HTML 元素。 $("p") 选取 <p> 元素。 $("p.intro") 选取所有 class="intro" 的 <p> 元素。 $("p#demo") 选取所有 id="demo" 的 <p> 元素。
3、jQuery 属性选择器 $("[href]") 选取所有带有 href 属性的元素。 $("[href='#']") 选取所有带有 href 值等于 "#" 的元素。 $("[href!='#']") 选取所有带有 href 值不等于 "#" 的元素。 $("[href$='.jpg']") 选取所有 href 值以 ".jpg" 结尾的元素。
4、把所有 p 元素的背景颜色更改为红色: $("p").css("background-color","red");
5、更多的选择器实例: $(this)  当前 HTML 元素 $("p")  所有 <p> 元素 $("p.intro")  所有 class="intro" 的 <p> 元素 $(".intro")  所有 class="intro" 的元素 $("#intro")  id="intro" 的元素 $("ul li:first")  每个 <ul> 的第一个 <li> 元素 $("[href$='.jpg']")  所有带有以 ".jpg" 结尾的属性值的 href 属性 $("div#intro .head")  id="intro" 的 <div> 元素中的所有 class="head" 的元素
6、获取是否包含某个样式:var f = $("#check_status").attr('class').indexOf('checked');
7、js正则判断输入格式 if (!(/(\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)|(1[358]{1}[0-9]{9})/.test(account)) || password.length < 6) {  showError("账号或密码输入的格式不正确");  return; }
8、Ajax jQuery.ajax({  type : "POST",  timeout : 20000,  url : "${tp}/act/member/login_submit.jsp",  data :"f="+ encodeURIComponent(f) + "&account=" + encodeURIComponent(account) + "&password=" + encodeURIComponent(password) + "&random=" + Math.random(),  dataType : "text",  success : function(data) {   if(data=="true"){    location.href="${tp}";   }else{    location.href="${backUrl}";   }   return;  },  error : function() {   showError("网络请求出错,请稍后重试");   return;  } });
9、文档加载完毕后,给符合条件的一个元素增加样式: $(document).ready(function() {  var hotelId = $.cookie('hotelId');  $('#s_' + hotelId).addClass("icon"); });
10、js跳转到其他页面:location.href = "url";
------------------------------------------------------------------------------------------------------------------------------------------------2013.12.26
1、本地缓存的作用,和静态页的区别 本地缓存可以理解为静态页,但是与静态页有所区别。 静态页是纯静态,没有动态效果,而使用本地缓存的动态页面则可以在局部动态,其他地方都从本地缓存取。——2013.12.18 王硕,办暂住证路上。
2、url重写的作用 网上说了url重写有N多好处,但没一个靠谱。 比如SEO优化,其实在SEO这个名词诞生之前早就有URL重写技术。 比如安全性,其实这和有人说POST比GET安全一样,没什么意义,真正安全还是用数字签名更好一些,和安全是两码事。 真正的用途,是将对外url统一管理,内部地址改变,或者做成了分布式,外部url不变,也就不用修改大量的url,相当于地址层的代理。——上午与王硕讨论
------------------------------------------------------------------------------------------------------------------------------------------------2014.02.25
1、汽车行驶越快,方向盘浮动越小,果断并线,错过路口不可倒车。. 这次换工作,技术提升是没戏了,只能摸索管理经验了。
 

转载于:https://www.cnblogs.com/hack/p/3581311.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值