|
linux (运维监控+测试(ab)+第三方搜索(sphinx xunsou es)+(数据+文件+代码)同步+负载均衡(http dns drdb)+异步(pcntl gearman curl ajax))+运维工具 + 命令+config+shell+api+http://blog.sina.com.cn/s/blog_477071c50102vjde.html
mysql(知识 配置项 调试项 +数据关系 dba思想) |库表列索引和分区的curd + pdo 防注入 +sql语句 php(算法 语法 配置 代码重构+优化 安全 设计模式 +框架 性能 原理 工具) | 排序+小代码段
服务端(apache nginx varnish)
缓存(redis memcache http +url)
前端(html javascript jquery )
+ec+module功能要点
+高级( 架构|代理 缓存 版本 同步 测试 队列 | 运维 数据)
+shell脚本:linux系统下,用函数通过amp管理文件 Linux==>函数-->amp-->文件1)管理:文本 文件 系统文本:工具和筛选 文件:curd 权限 压缩 系统:进程管理 优先级 定时作业 | 磁盘(分区 加载 空间) 内存 cpu |用户 群组
2)应用:函数 参数 输出 | lamplamp:mysql+ apachectl curl 输入输出:stdin stdout stderr lsof /dev/null mktemp tee 参数选项:$# $* $@ getopt getopts read函数结构:#! expr bc if-then-else elif else if if-then case casefor while test util continue break shift
========================================================= mysql sum1.概述 334;2.性能 因果关系;3.数据类型 4种;4.索引 结构 类型 三星评价;5.优化 3个方面+5个流程+8个配置项;高级:分区+缓存+字符集+存储过程6.复制:方法-方式-方案-线程-结构-原则 | 流程-问题(库-日志-复制-数据)-文件-配置;7.扩展:原因 方式 演变 | 分片-规则 方式 工具 | 负载-方法 优化;8.可用性:提高实效+缩短恢复+转移9.应用+缓存10.硬件:cpu 内存 硬盘(固态)11备份+恢复
config:tool explain show 4 log 4 mysiam 6 innodb 5 skip 3 cache size 6 比率:8
【终结小结】连接-- max_connections + connection索引-- Key_readskey + buffer_size临时-- Created_tmp_disk_tables + tmp_table_size查询-- 碎片率-bock/利用率-cache/命中率-hit+ query_cache扫描-- Handler_read_rnd_nextread + read_buffer_size打开-- Open_tables + table_cache缓冲-- Threads_created + thread_cache_size表--innodb
+DBA核心:架构的本质思想是不让请求到达数据库目标:运维就是保护数据和提供7x24小时服务 经验:问题 报错 解决记录思想:预防 补救 实战模拟
+数据关系差异数据:正常 非正常 有差异 无差异 | 对照分析 (适配器) 计算数据:初始化 抓取 匹配(FIFO) 计算 修复 核对数据:提取(pcntl) 加工 生成 通知 检查
table表单状态关系(一个状态变多个):预存款+退货退款表单父子关系(一条对多条数据):商品+配送表单关联关系(一张表对多个表):购物+订单
sql 语句:统计查询 连表查询 子查询 | 排序 延迟关联 区分度 结构|多表 curd |语法 其他思想:分治法,类似于主从句实现:把握表之间的连接关系 表关系:学生+ sid +分数+ cid +课程 + tid/id +老师注意:效率和安全
mysql:优化(缓存—>sql语句—>machine) 高级(事件 存储过程 触发器 视图 函数 授权 事务) 索引(独立 多列 场景 覆盖 聚族 重复 冗余 碎片) 语句
=========================================================
php sum net stream url http dir file math preg hash session date variable array string
+语法:empty() ,”"、0、”0″、NULL、FALSE、array()、var $var ==>true ,非空非零的值为false ;isset() 没有变量 或有变量但为null ==>false ,有变量不为null==>trueglobal:global 改变外部会改变内部 改变内部不会改变外部$_GLOBALS 外部就是内部,所以改变外部就是改变内部,改变内部也改变外部define:__FUNCTION__ __FILE __ __LINE__ __CLASS__ __METHOD__ DIRECTORY_SEPARATORsprintf curl $_SERVERpreg_match("/^[w-.]+@[w-]+(.w+)+$/", $email); preg_match("/^(((d{3}))|(d{3}-))?13d{9}$/", $mobile);preg_match("/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/", $ip)
array 数组的curd和sort全是操作数组本身,指针也是。curd(array,value)而search是(value,array)session 串号(相同的session_id) 共享(db nfs cache redis cookie + other) 集群(客户端 + 集中共享 + 复制)cookie:k v ex path domain secure
ini_set para 脚本执行 上传 session or cookie
php.ini sum--常用--错误日志 --文件上传--session--长时间运行脚本--安全PHP安全 sum session html form mysql password 过滤输入和避免输出 code review sum1.代码质量 phploc phpcpd phpmd PHPCpd 代码复制 PHPmd 代码建议 2.代码标准 phpcs3.代码文档 phpdoc4.代码效率xhprof
+原理:结构体的结构,决定了引用产生的相关问题,写时拷贝和引用计数和引用传值+tool:excel+mail + upload + validate + cache +filter + codetrans + (date page chart secede ftp log)Discuz x2.5防灌水设置涉及的地方:注册登录 user/group 内容过滤 防水插件和设置和防水墙
重构方法目的:可读即可写方法:提取-抽取(统一) 合并-内联(同一) 种类:函数 对象 数据 表达式 方法 继承--重新组织函数:--对象间迁移:--重新组织数据:--简化条件表达式:--重构方法:--继承
class sum对象就是数据 | 类关键字 | 设计模式类型
算法 sum复杂度 —>区别 数组/链表(单双向) —>递归(种类) —>堆/栈+队列(顺序)/集合(唯一)/哈希表(分布) —>二叉树(遍历+平衡+旋转)/图(顶点和边+遍历)数据结构-->复杂度遍历:排序 图 压缩php:排序冒泡 插入 快排 选择 | 变量与引用 垃圾回收 |+小代码段 排序 二分查找 哈希 trie树 反转数组 数据压缩 左右值无限分类 任务调度
+mvcmodel : model业务层(商品 用户 订单...)==>数据操作逻辑层(curd)==>数据操作实现层(mysql mysqi pdo)control : mod_rewrite开启 => rewrite规则 => .htaccess使用 => url静态化 => route路由解析 => control分发 view : 加载变量值 $_output[]=$values 加载显示页 include_once($templates) 跟踪信息(trace 系统函数显示) 框架:shopnc: route(路由) core(公共方法) base(基类) goods(业务类) ,如果不存在就是__call
Yii:controllers:filters accessRules 常见调用 behaviormodels:ar rules relations search curd +labelsviews:导航 日期 列表页 菜单层级 动态效果(按钮 弹窗 进度条 拖拽 选中) | 表单 上传 验证码 分页 ajax 防xss|编辑器 语言包 格式化extensions:ajax 多图 多上传 编辑器 mail right debug css/js压缩 editor srbacconfigs:入口信息(path + import)设置信息(components(作为widget加载,可有自带的view)+modules) 其他信息 (time charset language) +url 逻辑 配置 参数.htaccess 防盗链 规范网址 错误页面 加密 验证 缓存 伪静态 压缩 yiiblog的东西
+架构演化:初始阶段-->应用服务和数据服务分离-->分布式缓存-->负载均衡的服务器集群-->数据库读写分离 -->CDN和反向代理-->分布式文件和数据库系统-->NoSQL和搜索引擎-->业务拆分-->分布式服务
模式: 分层:(应用层 服务层 数据层)-->分割-->分布式(应用和服务 静态资源 数据和存储 计算 锁)-->集群-->缓存(CDN 反向代理 本地缓存 分布式缓存)-->异步(ajax gearman rabbitmq |削峰)-->冗余(冷/热备份)-->自动化(自动化发布-代理管理-测试-安全-部署-报警-失效转移-失效恢复-降级-分配资源)-->安全(密码和手机 加密 验证码 攻击--xss sql注入 编码 信息过滤 风险控制) 故障(日志高并发锁和读写 缓存失效 应用启动 大文件读写 生产环境滥用)
要素:性能(缓存) 可用性(负载) 伸缩性(分片) 扩展性(分布式) 安全性(注入)
+websecure同源:不同域 的客户端脚本 没授权 情况下,不能 读写对方 资源 | iframe http cookie(内存变本地)
区别:CSRF:借用,XSS盗用| CSRF蠕虫在攻击网站,XSS蠕虫在目标网站xss:突破同源策略, 跨域(document.domain = ‘com’) 字符集(encodeURI) 注入点(html css js url) referer 屏幕劫持csrf:获取唯一值(通过refe得到uid) 跨域获取数据(服务端代理 jsonhijack)+暴力破解 sql注入
安全防御:浏览器 服务器 用户+browser:HTTP:X-Frame-Options X-XSS-Protection X-Content-Security-Policy+server:server:域分离 https传cooie 验证码 小心第三方(<script> <iframe> <object>)xss:OWASP(html标签 属性 javascript css url)csrf:http refer是否同域 session cookie生命周期 验证码 一次性token +临时cookie(客户端生成,javascript生成 网络连接失败需要再提交一回)界面劫持:X-Frame-Option Frame-Busting token+user:noscript插件 最小信任(邪恶双胞胎) 忠告:不要泄露个人信息
+性能【1】在循环中判断时,数值判断使用恒等要比等于高效。【2】在数组中,数组下标是字母时一定要加上单引号或双引号。因为$row['id']的效率是$row[id]的7倍。【3】不要使用“@”去屏蔽错误输出。用@屏蔽错误消息的做法非常低效。若你真的想抑制报错,可以通过设置error_reporting来控制,好比栗子中的,行前设置,行后取消即可。【4】尽量不要在for循环中使用函数,比如for ($x=0; $x < count($array); $x)每循环一次都会调用count()函数。【5】注销那些不必的变量尤其是大数组,以即开释内存。【6】数据库连接该使用完毕时当闭掉。【7】使用挑选分支语句(switch case)佳于使用少个if,else if语句。【8】尽量使用include/require, 而不是include_once/require_once.【9】不要重复造车。很多人在重复写着已有的内置function.【10】假如在代码中具有大批耗时的函数,最好能f够斟酌用C扩大的方法完成它们。【11】str_replace函数比preg_replace函数快,但strtr函数的效力是str_replace函数的四倍。【12】合理运用字符串比较函数:strncmp / strncasecmp 要比 substr 什么的好很多,不管怎样,都比preg_*系列的字符串匹配方法好。【13】使用echo的多重参数取代字符串衔接。即使用逗号而不是点连接字符串。【14】不要引入不需要的文件。每个php脚本文件的引入,都会造成zend编译与执行环节。编译耗时远大于执行的时间。【15】获取时间的方式:请不要一遍遍的调用 time()直接使用 $_SERVER['REQUEST_TIME']即可得到秒级别的时间戳,不必调用函数【16】 Session 存储。PHP默认是把SESSION存储在一个文件中。把存储session分落在一个目录中,减轻单位间的读写频度。【17】 Session不采用文件存储。文件存储不是一个优秀的方案【18】系统调用时昂贵的。请手动释放你的资源(Please release resources manually) 【19】代码约简单,跑得越快。为啥,因为简单。
====================================================
html sum1.元信息标签 2.表单 3.显示 4.选择器 5.框架 javascript sum优化 加载 语法 方法 jquery sum元素 | 单个值 结果集 |移动|复制、删除和创建 |工具 |事件|效果 |$.ajax:url type: timeout async cache data dataType beforeSend complete success error contentType dataFilter global ifModified jsonpjs 跨脚本小结:1、json数据格式 2、js跨脚本执行特性 3、json与jsonp的分别 4、$.getJSON vs $.ajax 5、数据安全与优化搜索等
=========================================================================
apache sum全局 容器 认证 日志 cgi 负载nginx_conf sum并发配置 工作模式 Http请求 服务器 特点+varnish 配置文件--启动脚本--生成日志--命中率查看--调优管理=========================================================
http sum报文组成3,连接过程3,加密4, 状态码5, robot3,cookie3,encode3,dns3,日志2,代理作用2,缓存与新鲜度(客户端+服务端,命中和设置)检测,
请求:GET POST HEAD PUT DELETE OPTIONS TRACE CONNECT请求头: cookie from host if-modified-since refer user-agent charset encoding language connection authorization content-lenght响应:100 200 301 302 304 401 403 403 502 054响应头:allow encoding length type date expires last modified location refresh实体头:allow encoding language length location md5 range type expires last-modified========================================================
url:解析|跨域
二级域名:泛解析(rewrite preg)+共享(session)
取得对象实例:实例化-->类-->方法-->参数call_user_func_array
func_get_args() 这个函数返回的是包含当前函数所有参数的一个数组func_get_arg() 函数返回的是指定位置的参数的值func_num_args() 这个函数返回的是当前函数的参数数量 返回的是数字
结果:http://localhost/aaa/index.php?p=222&q=333$_SERVER['QUERY_STRING'] = "p=222&q=333";$_SERVER['REQUEST_URI'] = "/aaa/index.php?p=222&q=333";$_SERVER['SCRIPT_NAME'] = "/aaa/index.php";$_SERVER['PHP_SELF'] = "/aaa/index.php";$_SERVER['argv'][0] = "p=222&q=333"
seo爬虫:url 待抓取列表 按优先级抓取 抓取的无限空间黑网站:挂链接 useragent 跳转 增加页面 偷数据P3P:; b域下访问a,b设置了a的cookie
========================================================
redis(setex or ttl)+master/slave | mem(expire_time) ==>key to type of funcs写入缓存(只适用于内存缓存) key(+prefix) val(+serialize) ttl 读/写缓存方法:额外的存储了键名key 到static静态变量$cache中去,全局就能使用了
redis:array(php)-->cache(mem)-->nosql(主从 事务 持久化)使用:返回值 场景 字段设计:字段 mysql冷数据 写入 测试weibo:推拉 关注/被关注 用户注册登录主从(含义、迁移和切换) + 运维(命令和参数) + Redis-sentinel(集群管理工具) | 语法+配置+区别主(-rdb +aof)--从(+rdb slaveof passwd slave-read-only)备份—>读写分离—>任务分离(分担备份、计算)返回:个数|是否修改|存在性|类型|秒数 -1(已过期) -2(不存在);空字符串|旧值|头尾元素或中间元素|返回随机值
key的设计Redis key 设计技巧1: 把表名转换为key前缀 如, tag:2: 第2段放置用于区分区key的字段--对应mysql中的主键的列名,如userid3: 第3段放置主键值,如2,3,4...., a , b ,c4: 第4段,写要存储的列名
用户表 user , 转换为key-value存储useridusernamepasswordeemail9Lisi1111111lisi@163.com
set user:userid:9:username lisiset user:userid:9:password 111111set user:userid:9:email lisi@163.com * keys user:userid:9*
冷数据:平均每秒发布700条微博,4000次redis写入.后台定时任务,回归冷数据入mysql
redis:创建 连接=>curd+存在性+批量+数据增减+排序+生存时效+配置=>持久化+主从+事务
string 静态数据:存取hash 属性数据:关系set:去重数据:集合list:列表数据:头尾sort set 排序数据:先后
//存取 时效 加减1 键名操作 事务 持久化 //get set setex setex delete mset getMultiple flushdb flushall| ttl persist setTimeout expireAt| //incr incrby decr decrby | multi exec discard watch unwatch//save bgsave lastsave bgrewriteaof slaveof info auth//keys randomKey type dbsize rename renameNx move exists
//set s +add rem move pop sort + inter/store union/store diff-前面的差集/store +randMember members contains size//zset z+ add rem |rev/range rem/rangebyscore score rank |count incrby size |union/inter//list:l r + push/x pop+set get | l+range/trim/rem/insert lsize |rpoplpush //string:getSet get/setRange append strlen//hash h +m/set m/get del +keys vals getall +len exists incrby
memcache:原理:分布 场景 调优 | 缓存故障(雪崩 无底洞 数据踢除)分布:一致性哈希+虚拟节点对缓存命中率的影响 & memcache lru lazy_delete应用:memached确认主从延迟+秒杀调优:memcached在启动时可以通过f选项指定 Growth Factor 因子,并在某种程度上控制 slab 之 间的差异.默认值为1.25. 但是,在该选项出现之前,这个因子曾经固定为2,称为”powers of 2”策略。
Memcache:set(key,val,compress,timeout) get delete flush flush_all close add replacenew connectincrement decrementaddServer(host,port,persist,weight,timeout,retry_intval,status,failecallback)
./memcached -m 256 -c 1000 -P -l 127.0.0.1 -p 11211 -u root -d /tmp/memcached.pidgetVersion getStats hit/cmd.. getExtendedStats getStatus
Memcached:append prepend + getDelayed fetch fetchall + setMulti getMulti + addServers getServerByKey setByKey + cas--写锁的set setOptionsset = add + replace========================================================运维工具汇总操作系统:Centos※,Ubuntu,Redhat※,suse,Freebsd网站服务:nginx※,apache※,lighttpd,php※,tomcat※,resin※数据 库:MySQL※,Mysql-proxy,MariaDB,PostgreSQL代理相关:lvs,keepalived,haproxy,nginx,apache,heartbeat(此行都是※)网站缓存:squid※,nginx※,varnishNOSQL库:memcached※,memcachedb,TokyoTyrant※,MongoDB※,Cassandra※,redis※,CouchDB存储相关:Nfs※,Moosefs(mfs)※,Hadoop※,glusterfs※,lustre,FastDFS版本管理:svn※,git※监控报警:nagios※,cacti※,zabbix※,munin,hyperic,mrtg域名解析:bind※,powerdns,dnsmasq※同步软件:rsync※,inotify※,sersync※,drbd※,csync2,union,lsyncd,scp※批量管理:ssh+rsync+sersync※,Saltstack※,expect※,puppet※,cfengine虚拟 化:kvm※,xen※云计 算:openstack※,cloudstack内网软件:iptables※,zebra※,iftraf,ntop※,tc※,iftop邮件软件:qmail※,posfix※,sendmail远程拨号:openvpn※,pptp,openswan※,ipip※统一认证:openldap(可结合微软活动目录)※队列工具:ActiveMQ,RabbitMQ※,Metaq,MemcacheQ,Zeromq打包发布:mvn※,ants※,jenkins※测试软件:apacheab,smokeping,siege,JMeter,Webbench,LoadRunner(此行都是※)日志相关:syslog,rsyslog,Awstats,flume logstash scribe kafkaDB代理:mysql-proxy,amoeba(更多还是程序实现读写分离)搜索软件:Sphinx,Xapian(大公司会自己开发类似百度的小规模内部搜索引擎)
========================================================数据+产品
数据:数据收集-->数据处理—>数据分析 ->数据展现-> 报告编写统计:主要包括广告统计和网站统计(停留时间 跳出率 退出率 转化率参与度),生成相应图表
产品:信息架构:组织+标签+导航+搜索+受控词表设计文件:网页+组件+群组+链接工具:visio+dreaweaver========================================================
电商:通用|电商页面呈现:首页 导航 推荐位 广告 | 商城 购物车 订单通用模块:防灌水 第三方登录和分享 上传 SEO 通知 | 权限 分类 状态 审核 |cms+sns+im电商核心:异步支付 订单生成 购物车添加 配送信息 退款退货流程 | 团购 促销种类 会员黏性 商品分类 商户 团购优惠券 统计转化 | 结算 预存款金额 框架:功能==>表单==>流程 |
|