Archive for July, 2016

作者:AngryFox 分类: Uncategorized July 30th, 2016 暂无评论

常用的跨域方法有这样一些:
1,使用iFrame访问另一个域。 然后再从另一个页面读取iFrame的内容。jquery等有一些封装。
据说Firefox等可能不支持读取另一个iFrame的内容。
2,jsonp。需要服务器支持。使用script src动态得到一段java代码。是回调页面上的js函数,参数是一个json对象。
jquery也有封装。
3,设置http头,Access-Control-Allow-Origin:*
但据说IE有一些版本不识别这个http头。
4,服务器代理。如,服务器写一个url的处理action。其参数是一个url。这个服务器会用参数拼凑一个url,用httpclient库去执行url,然后把读取的内容再输出到http客户端。
还是以java为主吧,知道jvm虚拟机工作原理吗,读过spring内部源码吗,精通多线程,nio并发吗,还有各种分表分库,分布式技术以及高并发网站设计思路。

zval的优化从PHP5的24bytes优化到PHP7的16bytes;
hashtable优化从链式优化为开放式,hashtable从72 bytes降到56 bytes ,bucket size从72 bytes降到32bytes,减少了cpu miss;
内存管理模式也借鉴了jemalloc的模式管理内存,并且提升了cpu cache;
添加了强类型支持;
编译环节增加了ast。

HHVM和PHP7对比:

HHVM的数据结构TypeValue等价PHP的zval,HHVM的TypeValue也是16bytes,但是HHVM在12年的时候数据结构就已经做过类似PHP7的优化了,有兴趣大家可以看一下HHVM的TypeValue数据结构;
hashtable HHVM 同样是开放式的,数据结构也和PHP 7是类似的;
内存管理模式最早HHVM用的是tcmalloc,后面用的是jemalloc;
HHVM的hack语法是强类型;
HHVM在hiphop时代就支持了ast;
HHVM支持jit ,PHP7虽然也有jit支持但是目前不完善;
async语法支持(PHP可用swoole等);
opcache持久化,PHP无;
HHVM多线程模型,PHP7多进程模型,HHVM支持http server。

baidu HHVM
旁路迁移,初期小流量上线时HHVM 做渲染,PHP引擎执行其他部分,通过shmop通信(共享内存),HHVM出现错误后,仍然回到PHP处理;
webserver通过捕捉错误码跳转容错,如果HHVM挂了后,然后将流量切到PHP上执行,但是如果一旦全部挂则会出现雪崩,目前来讲都是双HHVM热备;
HHVM挂掉后(crash、内存oom等)都会通过保活程序拉起;
对于稳定性问题(如Crash、内存泄露、Diff、死锁、CPU异常等)会及时跟进,第一时间处理解决问题。
hack、异步、协程、还有特定的项目优化

虚拟机和编译领域我会关注如Pypy、Hippy、JVM这些;云方面会关注Docker、Kubernetes这些;其他方面如:Nginx、spdy、缓存服务、NoSQL等;

淘宝用了7万台计算机,每台web服务器平均并发不到10个

系统特点
提供的服务多
依赖的数据源多样化,数据库、HTTP接口、JSF(公司内部RPC框架)接口等
系统以读为主
整体服务加起来体量大(访问量+数据量)
需要快速响应
服务之间相互影响性要小
基本原则
根据以上系统特点,我们实现该系统时遵循以下几个大的原则:
使用HTTP协议对外通信
使用短连接
数据异构
巧用缓存
流量控制
异步、并行
数据托底
防刷
降级
多域名

日志
日志规范与组件 服务器普通日志 服务器业务日志 埋点日志 app本地日志

数据支撑系统 数据总线(采集 计算 存储) 端日志服务 Schema管理 连接、清洗
数据应用系统 行为分析 业务BI 决策支持 排查与定位 监控与分析

secureCRT自动断开的解决方法
有 时候服务器端的 /etc/profile 或者 ~/.bash_profile 中设置了 TMOUT 选项,或者是 /etc/ssh/sshd_config 文件中设置了客户端连接时间的设置,很可能一段之间之后,SecureCRT就会被断开连接,所以SecureCRT又一个选项可以设置每隔多少秒自动发 送一个信息到服务器端,告诉服务器端客户端还在连接中。
服务器的超时时间要大于CRT设置反空闲时间,不然CRT还没反超时自动连接就被自动断开,那就没啥意义了
服务器配置:
/etc/profile 中的配置,增加一个参数TMOUT=6000 //100分钟,应该够用了
echo “TMOUT=6000 ” >>/etc/profile
source /etc/profile //立即生效

作者:AngryFox 分类: Uncategorized July 20th, 2016 暂无评论

ERROR 1296 (HY000): Got error 64 ‘Temp file write failure’ from InnoDB
原因是mysql的tmpdir分区的剩余空间大小没有message大。
mysql在alert table时需要的临时空间要比该表才行。
mysql> show variables like ‘tmpdir’;
mysql> set global tmpdir = ‘/Data/app/mysql5.6.25/mysqltmp’;
ERROR 1238 (HY000): Variable ‘tmpdir’ is a read only variable

mysql group_concat函数被截断的问题
MySQL的 group_concat 函数默认返回1024个字节长度,超过长度的会被截断。最近程序中就遇到这个问题了。
通过如下命令可以查看到当前mysql系统的参数:
mysql> show variables like “%concat%”;
2. 有两个方法可以设置group_concat_max_len的值
(1) 在 /etc/my.cnf 中的[mysqld]加上group_concat_max_len = 1024000,需要重启mysql才能生效
(2) 在命令行下输入:
SET GLOBAL group_concat_max_len=1024000;
或者 SET SESSION group_concat_max_len=1024000;
GLOBAL 是对全局生效的,而SESSION是对当前会话有效。需要有管理员权限才可以操作GLOBAL哦!!!
1024指的是字节哦

1.int字段的连接陷阱 当你用group_concat的时候请注意,连接起来的字段如果是int型,一定要转换成char再拼起来, 否则在你执行后(ExecuteScalar或者其它任何执行SQL返回结果的方法)返回的将不是一个逗号隔开的串, 而是byte[]。
select group_concat(ipaddress) from t_ip 返回逗号隔开的串
select group_concat(id) from t_ip 返回byte[]
select group_concat(CAST(id as char)) from t_dep 返回逗号隔开的串
select group_concat(Convert(id , char)) from t_dep 返回逗号隔开的串
附Cast,convert的用法:
CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)
CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。 这个类型 可以是以下值其中的 一个: BINARY[(N)] CHAR[(N)] DATE DATETIME DECIMAL SIGNED [INTEGER] TIME UNSIGNED [INTEGER]
2.长度陷阱 用group_concat连接字段的时候是有长度限制的,并不是有多少连多少。但你可以设置一下。
使用group_concat_max_len系统变量,你可以设置允许的最大长度。
程序中进行这项操作的语法如下,其中 val 是一个无符号整数: SET [SESSION | GLOBAL] group_concat_max_len = val;
若已经设置了最大长度, 则结果被截至这个最大长度。 在SQLyog中执行 SET GLOBAL group_concat_max_len = 10 后,
重新打开SQLyog,设置就会生效。

作者:AngryFox 分类: Uncategorized July 9th, 2016 暂无评论

1.添加PRIMARY KEY(主键索引)
mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

2.添加UNIQUE(唯一索引)
mysql>ALTER TABLE `table_name` ADD UNIQUE (`column`)

3.添加INDEX(普通索引)
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

4.添加FULLTEXT(全文索引)
mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)

5.添加多列索引
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

主键索引、唯一索引、普通索引、全文索引、组合索引)的区别

Mysql索引概念:
说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不是越多越好,假如这本书1000页,有500也是目录,它当然效率低,目录是要占纸张的,而索引是要占磁盘空间的。
Mysql索引主要有两种结构:B+树和hash.

hash:hsah索引在mysql比较少用,他以把数据的索引以hash形式组织起来,因此当查找某一条记录的时候,速度非常快.当时因为是hash结构,每个键只对应一个值,而且是散列的方式分布.所以他并不支持范围查找和排序等功能.
B+树:b+tree是mysql使用最频繁的一个索引数据结构,数据结构以平衡树的形式来组织,因为是树型结构,所以更适合用来处理排序,范围查找等功能.相对hash索引,B+树在查找单条记录的速度虽然比不上hash索引,但是因为更适合排序等操作,所以他更受用户的欢迎.毕竟不可能只对数据库进行单条记录的操作.
Mysql常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引

PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) UNIQUE(唯一索引) ALTER TABLE `table_name` ADD UNIQUE (`column`)
INDEX(普通索引) ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) FULLTEXT(全文索引) ALTER TABLE `table_name` ADD FULLTEXT ( `column` )
组合索引 ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

Mysql各种索引区别:
普通索引:最基本的索引,没有任何限制
唯一索引:与”普通索引”类似,不同的就是:索引列的值必须唯一,但允许有空值。
主键索引:它 是一种特殊的唯一索引,不允许有空值。
全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时好空间。
组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。

作者:AngryFox 分类: Uncategorized July 5th, 2016 暂无评论

关于在for循环里调用ajax时只能取到最后一个数据的bug的解决方法
首先,造成这中情况的原因在与ajax的异步请求机制,for循环的运行速度远大于ajax异步请求的速度,这就造成了ajax运行时,需要的在for循环里的参数已经运行到最后一个了,所以取到的都是最后一个参数数据。
解决方法:将ajax的请求封装成一个单独的方法,然后在for循环里调用该方法。

通常采用两种方式:

采用时效性高的MQ,由对方订阅消息并监听,有消息时自动触发事件
采用定时轮询扫描的方式,去检查消息表的数据。
主流的MQ产品都具有持久化消息的功能。如果消费者宕机或者消费失败,都可以执行重试机制的

APM applocation performance management
(SLA)

分布式计算引擎
数据引擎
海量画像
实时abtest
立体监控
开放通用