syntax error: Bad for loop variable

在ubuntu下跑一个测试脚本,提示for 循环的语法错误,查了一下,系统启动问题。
代码对于标准bash而言没有错,因为Ubuntu为了加快开机速度,用dash代替了传统的bash,是dash在捣鬼。
解决方法是 取消dash
sudo dpkg-reconfigure dash
在选择项中选No,即可。
dash 好像是Debian的版本。

【算法】猴子大王

一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。

$s = 0;
$n = isset($_GET['n']) ?  $_GET['n'] : 9;
$m = isset($_GET['m']) ?  $_GET['m'] : 2;
for($i=1;$i<=$n;$i++) {
	$s = ($s+$m)%$i;
}
echo $s+1;

参考:[百科]

aapt获取apk信息存储mysql

表结构:

CREATE TABLE IF NOT EXISTS `apk_info` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '日志编号',
  `version_code` varchar(200) NOT NULL COMMENT '版本号',
  `package_md5` varchar(100) NOT NULL COMMENT '包文件的md5值',
  `package_name` varchar(100) NOT NULL COMMENT '包名称',
  `version_name` varchar(20) NOT NULL COMMENT '版本名',
  `sdk_version` varchar(20) NOT NULL COMMENT '最小SDK版本',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='获取APK信息' AUTO_INCREMENT=8 ;

aapt可以在这里下载:http://blog.phpfs.com/archives/2104.html

#!/bin/bash
#####
# 获取APK信息并保存到MYSQL数据库
#####
#mysql配置
HOST='localhost'
PORT=3306
USERNAME='root'
PASSWORD='Joyous'
DB='apk'
#获取APK信息
logname=/home/joyous/joyous/scripts/study/temp.log
/home/joyous/joyous/scripts/study/aapt d badging ${1} >${logname}
if [ -f "$logname" ]; then
    #包名
    NAME=`grep "package" ${logname}|awk -F"'" '{print $2}'`
    isversionCode=`grep "versionCode" ${logname}|awk -F"'" '{print $3}'|grep versionCode |wc -l` 
    if [ "$isversionCode" -eq 1 ];then
        VERSIONCODE=`grep "versionCode" ${logname}|awk -F"'" '{print $4}'`
    fi
    isversionCode=`grep "versionCode" ${logname}|awk -F"'" '{print $5}'|grep versionCode |wc -l` 
    if [ "$isversionCode" -eq 1 ];then
        VERSIONCODE=`grep "versionCode" ${logname}|awk -F"'" '{print $6}'`
    fi
    isversionName=`grep "versionName" ${logname}|awk -F"'" '{print $3}'|grep versionName |wc -l`  
    if [ "$isversionName" -eq 1 ];then
        VERSIONNAME=`grep "versionName" ${logname}|awk -F"'" '{print $4}'`
    fi
    isversionName=`grep "versionName" ${logname}|awk -F"'" '{print $5}'|grep versionName |wc -l`  
    if [ "$isversionName" -eq 1 ];then
        VERSIONNAME=`grep "versionName" ${logname}|awk -F"'" '{print $6}'`
    fi
    SDKVERSION=`grep "sdkVersion" ${logname}|awk -F"'" '{print $2}'`

    PACKMD5=`md5sum $1|cut -d ' ' -f1`
    insert_sql="insert into apk_info (version_code,package_md5, package_name,version_name,sdk_version) VALUES ('${VERSIONCODE}','${PACKMD5}','${NAME}','${VERSIONNAME}','${SDKVERSION}')"
    echo ${insert_sql}
    res=(`/usr/bin/mysql -h ${HOST} -u ${USERNAME} -P ${PORT} -p${PASSWORD} -e "use ${DB};${insert_sql}"`)
fi   

 

aapt获取apk版本等信息

简介:

aapt即Android Asset Packaging Tool,我们可以在SDK的platform-tools目录下找到该工具。aapt可以查看、 创建、 更新ZIP格式的文档附件(zip, jar, apk)。 也可将资源文件编译成二进制文件,尽管你可能没有直接使用过aapt工具,但是build scripts和IDE插件会使用这个工具打包apk文件构成一个Android 应用程序。

使用:

aapt l[ist]:列出资源压缩包里的内容。
aapt d[ump]:查看APK包内指定的内容。
aapt p[ackage]:打包生成资源压缩包。
aapt r[emove]:从压缩包中删除指定文件。
aapt a[dd]:向压缩包中添加指定文件。
aapt v[ersion]:打印aapt的版本。

附件:apktool-aapt

PHP面试常见问题汇总

1、PHP抽象类和接口的区别?
a)接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量。抽象类中可以声明各种类型成员变量,实现数据的封装。
b)接口没有构造函数,抽象类可以有构造函数
c)接口中的方法默认都是public类型的,而抽象类中的方法可以使用private,protected,public来修饰。
一个类可以同时实现多个接口,但一个类只能继承于一个抽象类
2、Redis和Memcache的区别?
a)redis数据类型有String(字符串)、Hash(哈希)、List(队列)、Set(集合)、Sorted Set(有序集合Zset);Memcache仅仅String
b)Redis支持分布式
c)Redis可以持久化
d)redis可以通过aof恢复
3、Redis的优缺点以及持久化方式?
a)Redis 有各种丰富的数据结构
b)持久化方面快照方式指定时间写入磁盘,代价大;aof可以追加变化数据,恢复速度慢
c)aof、rdb是两种redis持久化的机制,用于crash后,redis的恢复。
4、服务器性能优化方式?
CPU、网络、IO、代码结构层、缓存、DB、请求等方面进行回答
5、Cookie和Session区别?
a)Cookie数据存放在客户的浏览器上,session数据放在服务器上
b)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
c)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie
6、客户端禁用了Cookie,Session还能用吗?
这个要怎么回答呢?因为可以通过get传递就可以继续用session了,一般面试基本问这个就是要这个解决方案的
7、如何共享Session?
memcache共享,主要是根据session_id来复原session
8、建立表需要考虑的因素有哪些?
a)char和varchar区别,用固定长度MyISAM用char,Innodb用varchar
b)存储引擎,Innodb支持事务
c)主键、外键
d)选用字段长度最小、优先使用定长型、尽可能的定义 “NOT NULL”、数值型字段中避免使用“ZEROFILL” 、如果要储存的数据为字符串,且可能值已知且有限, 优先使用 enum 或 set
e)索引
f)查询语句的优化
9、Myisam和Innodb区别?
MyISAM:不是事务安全的,也不支持外键。如果事物回滚将造成不完全回滚,不具有原子性。如果执行大量的SELECT,MyISAM是更好的选择;MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引。表格可以被压缩,而且它们支持全文搜索;读性能较强;整表锁;建议使用固定长度的数据列代替可变长的数据列
InnoDB:事务安全的、支持外键。你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表;Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小;写性能较强;行级锁;
10、说出5个http状态码以及含义
参考:百科 博客

11、PHP的运行原理是?
参考
12、include和require区别是?
require是致命错误,require性能比include高
13、如何避免重复包含文件?
inluce_once或者require_once
14、SQL当中的内连接和左外连接、右外连接区别是?

15、echo、print、print_r的区别?
print是函数,有返回值;echo是语句,print_r是可以打印对象或者数组
16、下面的程序输出是多少?
$num = 10;
function add() {
$num = $num + 10;
}
add();
echo $num;
输出10;主要考察变量作用域
17、如何获取服务器IP、客户端IP?
客户端 $_SERVER[REMOTE_ADDR]
服务器 $_SERVER[SERVER_ADDR]
18、索引是什么?
可以提高查询效率
19、优化SQL的方案?
可以从索引、字段类型、查询语句等
20、GD库是用来做什么的?
图形处理
21、用什么方法可以加快页面加载速度?
页面大小、页面连接数(合并请求,异步等)、服务器抗压(php加速等)、网络等
22、如何防止SQL注入?
转义和数据类型检查
23、php程序引用传递和值传递的区别?
引用传递会更改原值
24、empty、isset区别
isset()函数 一般用来检测变量是否设置
empty()函数 判断值为否为空
25、大流量网站采用什么方式来解决访问量?
确认是否可以支持当前流量;优化数据库访问;禁止盗链;控制大文件下载;分流;流量分析
26、高并发量网站解决方案
html静态化、图片服务器分离、数据库集群库表三列、缓存、镜像、负载均衡、CDN加速
27、秒杀抽奖抢购等问题
利用队列,事务;多台服务器进行分流;具体问题具体分析

附:欢迎补充指正