微信打卡修改定位连续八天挣流量味精打了第六天了,我刚才不小心给消除了,怎么能恢复这个界面

转载自:http://blog.sina.com.cn/tool007
【今日话题】如何做好服务降级?
具体业务具体分析,例如qq的降级 当带宽不够时 先砍视频通话 接着砍语音 传文件 聊天 好友在线 至少保留自己在线 -- twin&2.
问: 就直接下线功能是么,还有这个怎么砍的啊。服务不可以用,但最好是可见,操作了有反馈,象系统繁忙,网络不稳定之类的
-- twin&3.
从导致服务不稳定的功能,少用的功能,消耗资源大功能开始砍. 但用户付费的功能不能砍,例如qzone的装扮,钱包的余额 -- twin&4.
应该制定功能优先级,那些功能一直保留,那些可有可无 -- godfery&5.
一般需要针对业务进行服务分级比如分为一级服务,二级服务,三级服务比如在紧急情况下面,务必保证一级服务的稳定性,然后可以牺牲二级三级服务,这个就是服务降级
-- 黑夜路人&6.
分享下我们的方案原理很简单
利用nginx lua 和缓存lua里做个监控,对一定时间内的服务器500或者其他错误做技术,如果超过一定的频率就直接从缓存中取出数据丢给用户这样在瞬时流量过来的时候能够保证段时间内恢复服务如果再做的友好点,就在lua中加个白名单,保证直接丢缓存内容也不会有大影响,一些有状态的不能缓存可以直接过还有就是梳理关键路径在可预测的大流量是,把非关键路径的服务关了&如果你们是服务化部署或者接口做的好的化
【今日话题】web应用如何进行权限控制?
如果是rest应用,可以从http请求方式入手,分为读写删权限,GET,OPTION是读,POST,PUT是写,DELETE是删,
这种分法类似linux的文件权限 -- twin2.
见过用异或的方式,1 0来判断是否有权限操作 -- Anonymous、z3.
这一般是后台程序,为了节省内存,用二进制来表示权限吧 -- twin4.
cakephp的acl做的不错可以研究一下&&--
用给予角色的权限控制如何, 就是随意建立权限,拆分成为权限,角色,用户 三个纬度.
权限是每个操作是否具有某个权限,角色是一批权限的集合,用户是属于某个角色的用户,只要用户具有某个角色,就拥有这个角色的所有权限。 --
黑夜路人6.
我们的用户中心就是这么玩的,不过我们还有产品线这个东西. 一个url是一个资源. 资源属于产品. 多个资源的组合属于一个角色. 赋予用户角色就拥有相应权限 --
产品也是一种资源,资源可以分级的 -- twin8.
用户 权限分组 组权限划分 -- 零度西瓜9.
还要分的更细,资源要分成可读,可写,可删,可更 -- godfery10.
参考Linux 文件系统: 权限rwx suid sgid, 子产品权限初始化umask ,用户角色游客user group other --
hilojack11.
细分的话,我想可以每个子产品做键,权限与角色当值,值有权限数*角色数 这么多种 key-value结构 -- hilojack12.
存取一個restful
resource的時候,服務器先查看ACL看這個resource有無個別定義存取限制,如果沒有,一路往上層資源遞回查詢,並且繼承上層資源所定義的存取限制。如果是OpenResty實現restful服務的話,ACL的設計可以存放在ngx.shared.DICT當中,並且放在rewrite
phase或access phase裡面用ngx-lua來開發,效率應該會很棒。 -- Pahud13.
问: rbac有个麻烦的地方,得定义各种权限, 有人做过rbac和rest资源(或控制器)结合,将对资源的操作(action)作为权限吗?答:
我们是做企业信息系统,用yii处理的,写了一个方法读取了所有controller里面的动作,然后将动作绑定在角色上,将角色绑定到人 --
青衫隐_刘14.
我们在编写的时候做了特殊处理,在编写controller的时候,需要纳入权限的动作全部写了注释. 注释里面包括name,desc.
最后在配置模块不光能看到动作,还有对应的说明,算是一目了然吧 -- 青衫隐_刘15.
phpcms的权限设计也是具体到action,对一些共用action以public_作前缀不做限制通过,而一些特殊action作个枚举如login直接放过。
-- 古手16.
嗯,这种主要针对全局,常见的有admin路径就统一要求登录态才能访问 -- twin17.
有没发现很多action是用户不关心的,或者重复的, 比如常用的crud可以分为7个action index new create edit update
show destroy, 实际到权限管理界面,我们只希望出现 新增 查看, 修改, 删除 4个权限.针对action与权限不能一一对应的问题,我们做法是在控制器做多一个映射配置,如
创建文章=[aricle/add, article/create], 修改文章=[article/edit, article/update],
删除文章=[article/destroy].相当于权限和action是1:m的关系.这样权限系统来读取的是controller的权限映射配置,而不是action.&权限系统显示出来的权限名称,会比较符合普通用户的认知范围.用户访问某个action时,就反过来检查是否有当前action对应的权限.
-- twin18.
问: 为何么会出线1:m的情况?答:
1个权限,对应多个action. 这是自然存在的情况. 前后台分离的应用,都会出现这种情况 一个action吐html, 一个action吐json,
但要两个action加起来才算一个权限 -- twin19.
问: 一个action就可以啊,加不同的参数呗?答:
以前是一个action传不同参数返回html和json,现在为了分清前后台,尽可能的拆出多个action了.
合并在一起,还会涉及到这个action既可以get,又可以post,读写权限又不好控制了 -- twin
【修正】【今日话题】分享你在项目中用到的算法
用过trie做关键词过滤 -- 崔玉松2.
关于算法,最近在做电商,主要遇到下面几个,很简单也很实用.a.
商品的规格生成,例如一件衣服有2个颜色,3个尺码,4个款式,总共24个规格,用笛卡儿积可以生成包含所有属性的规格b.
订单价格的计算,涉及很多因素,例如优惠券,打折,满就减,不同地址不同运费,包邮,将所有影响因素抽象为3个计算规则,1.商品价格的增减 2.运费价格的增减
3.是否包邮. 即可很方便计算出付款金额,而不用逐个ifelse判断b就是先把要减的费用记起来,最后统一计算,
用在前端效果比较好,比如用户选了优惠券,实时计算出付款金额.c.
运费的计算,a商品运费首件10元,续件1元,b商品首件12元,续件2元,a和b各买两件, 用淘宝的"取最大首费,(当有相同最大首费时,取)最小增费"可计算出运费
12 ((2 - 1) * 1) (2 * 1) = 16元 -- twin3.
从哪个仓库发货很简单,你浏览时选的地区、地址选的地区和仓库负责发货地区有对应关系,如涉及调货也是仓库对仓库 -- 水浸街4.
订单价格的计算我这用到的比较简单,不过以前有做过很复杂的批价算法,就是定义一系列的计算规则,用户级别、时间、订单总额、商品单价等均作为批价元素,
一系列元素及元素值以及元素间关系用脚本描述组成批价规则,规则间有互斥依赖关系、有优先级,订单数据作为参数传入,计算出商品的金额及订单金额,有商品
优惠和订单优惠两类型的优惠,规则是分开的
-- 水浸街5.
仓库还没做,但从京东来看,都是显示离你最近的仓库是否有货. 仓库的选址,规模,分布,货物的存放量,新货的进货量这些要计算就麻烦了.
现在看来是靠经验来估算,将来靠大数据可能可以推导出公式 -- twin6.
有大数据最好了,没有的话按经验值也基本能解决问题,如果非要搞个算法显得比较牛逼,那么可以用概率论的一些算法,比如泊松分布 -- 水浸街7.
用到的:bloom filter 用于判断一个元素是否在一个集合中,基于哈希,占用空间小; topK
问题中的堆排序;字符串搜索Boyer-Moore算法,优于 前段时间工作需要,在看分组加密的东西,貌似php
的加密函数都自动分组了,不需要做padding组填充咯 -- hilojack
【今日话题】开发团队怎样使用版本控制进行开发合作?
-- 李三,skccc
我觉得 版本控制里面 最大的坑就是 merge 有人参与就会有意想不到的结果 -- 蚂蚁&2.
我每次都遇到merge后丢功能,所以合完了得再过一遍功能 -- twin&3.
还有就是我之前用eclipse的时候干的傻逼事 直接update把本地的修改全部覆盖 以后老实了 每次都先compare 话说phpstorm的compare
比eclipse的好使 -- 蚂蚁&4.
我们现在用的是svn,都在主干开发,每次发布版本后打一个分支版本,如果发布后有bug,就修复后发分支。 -- 李小邪&5.
我们的用git,从不在主干开发任何事情,分支开发,合并,打tag,发布 -- xufz&6.
每次合并时候分支开发的人都在&
合并后每个update文件一个个检查这样累点但是少碰到缺功能和BUG重现问题.多分支开发会先把主干同步分支.合并时候保证每个分支合并起点版本一样 --
weizhao&7.
问: &git可以做权限控制吗?比如不同的用户有不同模块的代码提交权限答:Gitlab
可以 & 崔玉松&&&
【今日话题】哪个RPC框架好?
我们的RPC使用的是finagle,协议无关,大体流程是,php,apc,proxy,zookeeper,service -- 沙漠风暴&2.&&sofa-pbrpc
-- 零度西瓜&3.&&Twitter的RPC框架Finagle简介
-- 沙漠风暴&4.
小规模应用中一直用PHPRPC,简单跨语言,跨平台轻型安全,最近用hprose也比较简单 --
ice支持完善。不足是php只能做客户端 -- 中南海保膘6.
yar没有之一 & 夜丶有雪&【注意】昨天话题第一条改为&redis
简单 方便 易用,一服务多功能 而且效率不低. 结合webdis(此处原来是redis) 秒杀很多应用场景.
至于redis在队列方面保持够简单就行。本人喜欢这么简单的东西 -- 悬非
【今日话题】哪个队列服务好? --
redis 简单 方便 易用,一服务多功能 而且效率不低. (队列)结合redis 秒杀很多应用场景.
至于redis在队列方面保持够简单就行。本人喜欢这么简单的东西 -- 悬非&2.
太多太多好用的mq系统了,ZeroMQ,,还有RabbitMQ,其他的什么MemcacheQ, HttpSQS,Mysql
Q4M也行,不过都稍微架构上面简单些. 从应用情况来看,最靠谱和吞吐量最好的还是Apache Kafka. Beanstalkd,也是一个选择.
当然,其实redis也能做队列用 -- 黑夜路人&3.
用过beanstalkd 做为任务队列 表示非常好使 我觉得他更适合吞吐量相对低的 比如任务 短信 邮件 -- 吴子棋&4.
我们用nsq,分布式去中心化 -- 李小邪&5.
问: 消息队列分布式有意义么?你们怎么选择一个节点的?答:
避免单点故障. 随机选一个,如果这个发送失败就取下一个 -- 李小邪&6.
说说任务队列,Python栈用的celery,主要业务为web消息及视频转码同步,用队列实现异步及降低复杂度。选择时主要考虑运行环境、成熟度。评判好坏不好做评价,任务量不大,目前一直工作良好。
-- Garfielt&7.
消息推送例如APNS,放在业务里面处理,还是推到队列任务里面,由另外的线程来处理好?放在业务里面我怕会影响业务,毕竟去访问第三方的推送会耗时或者出意外。不知道大家都是怎么处理的答:
任何时间不可控的操作都应该放入消息队列改由其他进程做异步处理。 -- 刘光耀-村长&8.
我一般队里服务最大的用处是用来解偶业务逻辑。比如说一个用户注册了。那后续有系列的操作要做,比如他的各种数据初始化之类的,发邮件通知一类的。如果串
行在业务逻辑里几乎是不可接受的。一般会产生一条消息,然后后台的多个进程都会订阅这个类型的消息,它们就可以并行的去做很多事情了。
-- 刘光耀-村长&9.
问: 我服务端用的是PHP,有没有推荐的队列服务答:
试试zeromq吧,这个主要还看业务设计,redis其实也可以当队列来用。 -- 刘光耀-村长&10.问:
订阅赞,如何保证订阅的及时性呢,如果不同进程相互有依赖如何处理答:
看需要。如果多个逻辑都存在不可控因素且必须有先后关系,可以用多条消息队里。消息满天飞也不是一个良好的架构设计,要平衡取舍。 --
刘光耀-村长&11.
我们用的rabbitmq,个人认为还有一个好处是后段可以横向扩展 而不需要考虑前段服务器 -- 张浩&12.
Nmq都用这个吧,还有个金山出的,支持http的也挺好用的 - 七文&13.
问:nmq全称是什么?答:
nmq是百度内部的消息队列系统,全称是:New Mesaage Quene&是为了取代百度之前的cm/tranafer诞生的
- 黑夜路人&14.
我最经常就是用redis的队列了。项目小就简单搞 - 轩脉刃扩展&&[架构]
ZeroMQ 深度探索(一)&【架构】关于RabbitMQ&KAFKA分布式消息系统&beanstalkd百科介绍
【今日话题】-在一日千里的软件发展中,猿猿如何应对这种变化? --
应对策略:稳扎稳打,打好基础,不盲目求新。 -- 我是谁2.
有两种办法,一,坚持不学习,二,坚持学习 -- 老李3.
哈哈,学习要捉到点,不是学表面看到的东西.所以有的人得坚持学习,有的人可以坚持不学习 -- twin4.
盲目追求新技术不如退而求深。其实计算机越底层的技术。其技术革新反而越难, 比如网络协议等等 -- 中南海保膘5.
嗯,同意!语言仅仅是工具 -- 唐毅6.
用到的东西最好知其所以然,最好是在内存地址这个层面知道发生了什么.其实简单点说,就是至少要在c语音这个层面了解你的程序发生了什么 -- 吕霖7.
抱着让自己成为变化创造者的心态去做 -- 项超8.
要么做通才,这个看个人,靠兴趣,要么深入一点,横向或纵身发展,都得学,要么兴趣驱使,要么项目驱使 -- Garfielt9.
工作了的话还是项目驱动居多吧 -- 逍遥自在10.
项目是基础,让你对某个领域有较好的理解,要精通某一领域,必须是兴趣驱动,要不你的知识面也是零散的 -- twin11.
借用精益创业的方法,学习-&应用-&评估-&学习-&..学习的要快速用起来.大家都有体验,每次学习的理论,拿到实际项目使用,总有差别
【今日话题】日志的话
logwatch+elasticsearchscrbie + storm +
solr直接golang解决长连接问题是的,做了一个groupcache我们用openresty那套因为mq的作者在sina,所以比如异步log我们就用mqapache
activeMQmemcacheq之前看了张宴的httpsqs,打算改改用作自己的队列[呲牙]大部分情况。要么lucune系列,要么xapianlucene系列包括elasticsearch和solr
【今日话题】Lua的优缺点以及与Nginx的组合应用整理回复1.
目前应用最多三大技术:lua nodejs golang2. 我对lua的印象也还停留在魔兽里面写写插件3.
lua跟c很容易结合写扩展;另外lua支持协程;lua跟nginx结合,能够做很多高性能的服务,特别是比如消息类的4.
项目后端用openresty,写法和php一样,起个nginx就够了&OpenResty是一个全功能的 Web
应用服务器,它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项,可以用lua写它的模块。
【今日话题】:
哪个分布式文件系统可靠1. 豆瓣beansdb 零度西瓜在用,beansdb+cdn,主要是图片2.
tfs3. weed-fs xinqiyang在用# weed-fs介绍1.
go写的,很赞的系统,现在用杠杠的,配合下varnish很够用&2.
安装部署方便,简单易用而且强大3. 看设计来看,适合小文件存储,不是针对object大文件存储的,一般公司不做云存储的话也还好4.
nginx+lua+weed-fs,直接post过来的图片,就直接转发到后端粗糙进weed-fs之后,拿到写入成功的id再写逻辑,中间没啥io操作,感觉挺流畅的5.
项目官网&6. weed-fs
基础测试&7.
weed-fs 压力测试&8.
golang开源分布式文件系统weed-fs&9.
Nginx+Lua+WeedFS装配手记&#
云服务1. 又拍云,适合小文件,特别是图片2. 七牛,适合大文件# 不靠谱&1.
mogilefs,moosefs架构太原始&2. fastdfs,丢文件 (京东在用)3.
用多分级目录的方式,inode节点太多了就会很慢,同时得自己做备份,不然有单点风险
【今日话题】互联网app长连接消息push系统的架构和坑#
区分长连接,半长连接,短连接1.
app的话,可以很容易通过客户端支持的语言,例如java、flash,开一个scoket服务,connet之后就不close,这是长连接(依然特雷西:58同城的帮帮就是flash)2.
web的话,一般通过js来完成,但是ajax的话,没有办法hold一个连接不断,象apache 有keep
alive选项,其实还是没有真正的长连接,所以通常意义来说来说,web端的叫半长连接,它可能需要客户端插件辅助,例如js + flash3.
短连接的话,就是通过js的setTimeout,每隔一段时间去后台拉数据,缺点是当用户没有新的消息时,也会不断的浪费请求到后台。(目前微信公众平台是用这种,每隔10s拉一次)&#
客户端的处理1. js的setTimeout2. js调用flash,java等封装好的接口3.
nodejs的websocket配合服务器端的nodejs# 服务器端的处理1.
服务器端主要是三个,一个是io处理层,另外一个是逻辑处理层,第三个是数据存储层2.
io处理层是重头,因为要hold住很多长连接3. 主流方案a. nginx(lighttpd)+module + c/c++
(百度贴吧在用,性能最好,开发调试最麻烦)b. nginx+lua+redis
(第二简单,利用nginx的高性能io和lua的快速开发,也很方便)c. nodejs+redis
(简单,nodejs提供一个web端用的js半长连接库(猜是socket.io))d. golang+redis
(数字公司在用,跟开发普通后端server一样,不过golang是协程机制,hold连接很简单,单机一般有100w,经过优化后连接能到200w)4.
后端架构一般会包含,register_server, user-server, push-server, message-server,
storage-server等几个部分# 扩展阅读Comet:基于 HTTP 长连接的&服务器推&技术
【今日话题】聊聊常见设计模式及应用#
单例模式Singleton设计模式,第一个肯定是单例模式了,基本都会用到,常见的写法是
Xxx::getInstance()优点很明显1. 用法写法都简单2. 类是全局作用域的,随时随到都可以调用3.
调用时不用考虑初始化问题缺点主要在架构复杂后会出现1.
单例意味全局只有一个,解决方法是增加setInstance,getInstance('指定名称')2.
对单元测试不友好,因为单元测试要求可以构造一个新的对象.3. 对将来架构的扩展也会埋下隐患应用1. 你项目,框架的核心类
如$core = core::getInstance(); $core-&getDb();
$core-&getConfig();其他地方不推荐用,写一个就是给自己留一个坑,整个项目最多有一个单例.趋势PHP5.3之前,国内外框架基本都是用单例模式.象sf::getInstance(),
yii::app()5.3之后,国外PHP开始用服务容器(依赖注入)替换掉单例模式.#
观察者模式Observer举个例子,也顺便分享一下微信公众平台的一点心得。最近在用Golang写一个基于微信公众平台业余小项目,而微信公众平台的开发者模式是要求提供一个处理用户信息的接口,当然这里的信息其实是来自微信服务器的推送。至
于具体的推送信息内容,如果从宏观上抽象总结下可以分为七类消息
(text,image,voice,video,location,link,event)和七类事件
(subscribe,unsubscribe,scan,location,click,view,masssendjobfinish)。那
么在处理这些不同的消息和事件时,除了针对不同的业务逻辑做出不同的应答(默认回复、加关注回复、关键词回复)外,还有一些基础的事件监听和处理,比如保
存用户对公众号的关注,保存某个特定的事件(比如自定义菜单的点击等)用于将来的统计,这时我是采用了创建不同的observer去update。&观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。&(网络)golang代码不贴了,大家可以直接查看关于observer
design pattern的PHP示例:最后我来分享一个最近看到的非常棒的关于设计模式的资源:
【今日话题】红包的架构设计1.
作为用户,你发出10个红包,总共1000元,系统怎么保证到第10个用户恰巧分完?(每个用户不超过200元)2.
系统如何计算出红包金额,让金额差距拉大?有的人领到0.1元,有的人领到200元,趣味性就会变得更大.3.
商家要做一个月的买就送红包活动,预算送出20W元的红包,怎么保证不会多发,又能尽可能在一个月内均匀送完(类似抽奖)商家送红包的处理方法总结1.
需要先预估一个月的交易量,计算一个大概的基数,再根据当天实际的成交量算出当天可以发放的金额,然后根每笔交易额度及概率发放具体红包金额2.
如果规则是这样,第m位抢得者:&min = balance -
(10-m)*200;if(min) &= 0&won = min +
(200-min)*rand(1);elsewon= 200*rand(1); 每个人参与者的期望是一样的么?3.解答商家场景:
这类活动,我们的做法按"计划"走,预先计算出每天要发出多少个,每个多少金额.发放的话有两种方式,一种是先到先得,一般门槛会比较高,比如购买了200元的商品才有得送,一种是抽奖式,购买了商品就触发抽奖操作.先到先得,可以用计数器去计算,未发完的累计到第二天.抽奖的话,用布点法,比如3点5分有个红包,8分又有个红包,你3点5分过来,就刚好可以抽到红包,后面的人,就只能等到3点8分才能抽到红包.不用概率,主要是因为概率受人数影响很大,比如某天有广告引流,或是有人恶意刷,在短时间内就会把你所有的红包,或是当天预算的红包刷完.按"计划"走的好处就很明显了,只要参与人数不会过低,你的红包总能发完,发放的速度,也在你的掌控之中.
【今日话题】计划与执行,论程序员的效率1.
功能预计开发一天,结果两天才完成,原因大概有几种:一、预估本身就不靠谱,对功能的难度估算太乐观,细节没有考虑清楚就下手,导致编码过程中瞻前顾不了后,思路始终理不清楚。二、精力不集中,这种人遇到的比较多。本来当时分配的功能点已经很清楚,但实际操作过程中就跳频了,突然想到一个不相干的点,就暂时放弃了当前功能,思路拉回来,还要重新理顺2.
个人工作中早上会列出一天要做的事,并排出优先级,具体到某一功能现在纸上画下流程,确定思路后再编码,完成度比较高,bug也相对较少。如果中间有突发事件,会重新分配优先级。3.
问: 早上列出计划这种有效吗?
因为预估总是会不准确,经常有其他事情打断,容易导致当天计划未能完成,延迟到下一天答:基本上当天要做的事儿在前一天下班前会根据当天的进度就会有个大概的安排,早上再列一下优先级,当然不是满满的,肯定会有突发事件插入,按照计划把一天必须要做的做完,也就算是不错了,如果有时间把其它小问题搞定,就赚了4.
我老板给我任务做完了,有时候他一时兴起把你整个架构给破坏了.其实那个东西他自己没想好就丢出来让我们做.然后看到我们做的有点样子了再改,怎么破得?答:
破坏架构这种事儿,就得跟老板掰扯掰扯了,要么是你架构不够好,要么他一开始产品就没搞明白,这就不是一天工作的问题了还有产品这种事,没有一个专业的产品设计真的很蛋疼,要做什么还要程序去想,做好了,一天也就想一个功能,做不好,一天浪费还得重来逼着他招一个产品,要么让他出详细设计,反正见不到文档不做最开始意识到这个问题,就拉着老板开会,一堆问题暴露给他,他就明白了5.
从不说硬话;从不做软事。
【今日话题】讨论开发过程中踩的坑?1.
今天一早修了个自己服务器问题,服务器写文件失败,提示空间不足,但查看硬盘还没用完.最后查到是crontab每次执行完就生成一份邮件,因为默认不配置邮件服务器,邮件发送不出去,堆积了很多小文件,导致inode用完.
解决方法很简单,在crontab第一行加MAILTO="",再删除堆积的邮件就完成了~,幸好上周加了一台服务器,挂了一台,线上影响不大2.
上周用了nsq,客户端库用的是nsqphp,结果一到线上老是报stream_select出错,消息发不出去,查了半天无果,最后只好使用它的http接口发。扩展阅读nsq是go写的消息系统&
【今日话题】如何做好漏洞防御?
比如XSS和SQL注入整理1. 对输入统一过滤封装,服务做白名单限制 waf2.
对输入统一过滤封装,很有可能是个反面例子.大家都知道,在PHP5.3之前,默认自动对request中的引号加反斜线,5.3之后已经废弃这个功能3.
建议还是自己处理比较好,php5有内置的东西(filter_var, htmlspecialchars等)4.
xss输出的时候转义下,注入是输入的时候处理下,这些都不难5. 都不难,主要是很多没有这种意识,也不清楚具体在哪里做处理6.
XSS的话,**输出时**用zend的escaper处理下,他就一个类,基本可以单独拷下来用注意上面是"输出时"(一般在视图里),不是想转就转,这样就可以避免多次的问题7.
SQL防注入是用占位符,就是?,:name,这样的东西, 主要是和老的开发模式不太一样,初次使用较难理解8.
防止xss,输出时用htmlspecialchars转义,防止sql注入,不要乱拼接sql语句,使用pdo的预处理,基本上就没问题
【今日话题】程序员的职业规划和发展整理1.
说coding到死太单一了,还是有很多,可能心有多大,舞台就有多大2.
如果从来不给自己一些思考规划思考一定最后会茫然四顾,不知道自己所向何方3.
一般工作两三年会有一个茫然期,工作五六年,又会有个茫然期4. 自己开发个东西5. 研究源码 我觉得挺好 先看文档
了解整体架构和业务流程 再看代码6.
关于规划,其实也还没有明确的。个人感觉有些东西需要一个时间去明白。所以现在就坚持自己的工作岗位,多学习,多研究7. 不是啥都好做的,
耐得住寂寞8. 水果不是好卖的,我卖过,起早贪黑,利润是不错,但是破损绿也高9. 有车有房可能是一个危险的信号,
贷款买房,照顾家庭会让你经济压力增大,空闲时间减少. 压力大,你就容易变安稳,容易妥协,满足于自身状况10.
压力越大责任越大。房车也是现在人追求的目标吧11. 是目标,但要量力而为.
当你负担高房贷的时候,你大多只能选择守业,而不是创业了12. 沉淀也是长进,基础就是积累13.
迷茫有两种原因一,对自己定位不清楚.你是谁?你能做什么?你喜欢做什么? 自己想不清楚的话,就问别人.二,外部依赖.
常见的情况是,a把公司当家,b认为公司要教会你什么技术.14.
迷茫的产生可能是在公司闲下来了,要么个人能力问题,公司的核心业务不让参与,要么公司没有能让你大展拳脚的项目,换公司,找项目。到了这个阶段收入应该可以让我们衣食无忧了。找一个公司重视,个人也感兴趣的项目,扎进去,迷茫自然就没了,说到底,会迷茫,我感觉还是闲的15.
无论我们工作与否,照顾家庭肯定是首位的,很多人总是顾此失彼,工作和家庭完全是可以分开的,把工作安排好,一天八个小时足以把工作做的很好,不专注,一
天时间就浪费掉了,别人下班了,自己还没做完,回家后心里就有担忧,影响家庭生活。家庭不和谐,工作就无法专注,恶性循环了,愚见,仁者见仁16.
职业规划:(我也在这个过渡期,不喜勿喷),工作两三年基本可以独立完成业务,应该也带过团队。如果不转行,后边两条路,继续coding和做管理,看个
人兴趣,这个很重要,选择技术,就踏踏实实,做某一领域的专家。管理(我没发言权,请大牛补充)。无论技术还是管理,不能像刚毕业那会儿,只是一个执行
者,要有自己的主见,并让自己在业务上占主导地位17.
行业和人脉扩展阅读章文嵩:技术男解说创业梦
【今日话题】网站如何防攻击和入侵,包括应用层和网络层整理1.
应用层,最少保证程序安全,包括注入,xss,csrf。2. 另外一个,在接入层,做好负载均衡,还有把业务性能提高3.
有钱的上硬件防火墙,没钱的上软件防火墙4. 网络层,简单点的前面接入一些攻击防止层。5.
我写过一个脚本,判断多少请求后,加入黑名单,把ip6. 应用层,常见的就是隔离吧,例如把数据库放到内网7.
比如用redis做个计数器,用当前分钟和ip做key,不断自增,如果超过100,说明超出频率,直接禁止ip访问8.
好一点的做个nginx扩展,用来洗流量9.
如果是协议层的攻击,只能上防火墙,如果到了应用层,就能够做很多我们力所能及的事情10.
是啊,应用层是我们熟悉的环境,在这一层做比较简单,但效率也会比较相应的变低.11. 很多站点除了机器,还有带宽问题12.
hostdeny,我部署了这个,连接数多了就日他13. ip限制会遇到公网ip误杀问题,可以结合其他身份特征做限制,比如uid
前提是账号安全14. 我觉得小网站,用百度的加速乐,安全宝,或者360的网站宝之类比较省事。大网站就要自己做一些事情了15.
DDOS,强刷怎么破?答:fail2ban16.
还有就是分析一下用户,判断如果不是正常用户的直接封,可以通过,浏览记录,和当前的数据17. ddos
如果是协议层,上别人的接入层。比如百度的加速乐、安全宝、网站宝。18.
如果是应用层攻击,自己分析访问日志,然后ban掉ip19. Tcp
里有个cookie设置也可以,对于三次握手中断的攻击。(通过Tcp_syncookies防护)20.
一般是通过系统漏洞入侵吧,目前我们这块都用防火墙关闭不用的端口,向外面暴露很少的端口.还有一种应该就是暴力破解居多吧21.
应用层封ip容易误封,做到自动封与解封需要一定的工作量,人工参与量会比较大22.
一般是按时间段来控制,封ip对付初级的比较管用,但是我也想不到更好的办法,这个可能就要用机器学习之类的来处理了23.
前端用云waf挡住一些xss sql注入这样的攻击24.
每次访问都记日志,定时检测一段时间的访问次数,过高,就加入503的名单,一段时间后,恢复25.
按ip,假如1个IP一秒钟请求1000次,我们就认为是在攻击或是刷接口,直接拦截掉了26.
如果一个公司的IP都是一样的,但是只有一个人攻击了你,你把整个IP都封了,是不是不太好27.
其实我想要的是如果这个IP攻击我了,那么我只想屏蔽这个攻击者,同IP下的其他人不受影响28. 普通网站根据cookeid。记录频率
加验证码请求验证29. 对,IP+cookie是个好办法,仅有IP或cookie是不好的30.
要遵从一个原则,一切的客户端行为都是不可靠的
【今日话题】MySQL的主从架构,多主架构,数据同步,Cache同步等问题和解决方案【整理】1.
还是程序分发靠谱些 - 刑雨2. 问: 主从延迟的如何应对?&答: 一般情况从库延迟能接受,对部分实时性要求比较高的业务可以调用主库 -
一切随心而动3. 问: MySQL 自己按某规则分库分表 和 MySQL自带的分区有啥区别 实际场景哪些更适合用自带的分区功能?答:
建议能用分表的情况就用分表,分区仅适合在无法分表的情况,比如用户表,使用用户编号和登录名查询的情况都很多,不适合分表,当然真要分表也有解决办法 -
水浸街4. 问: 上面说的用户表要是分表,登陆的时候怎么查询呢?答:
在前面架设memcached或其它缓存服务,提供登录名与用户编号的map支持;或者取消用户编号直接使用登录名作为主键,适用于不允许修改登录名的情形 -
水浸街5. 分表搞的客户端代码复杂 - Eddy6. 数据库 分库分表&&- 张建7. 分库分表业务没拆出去啥也搞不了啊,
一堆连表查询,业务里一堆sql, 所以要业务先行,业务里还有一堆查询,分层也要搞好 - 懂哥8. 要分表,就别用连表查询 - 张建
【今日话题】互联网业务中Cache服务软件选型和应用中的坑整理1.
cache选择,我觉得首选还是memcached,技术成熟、效率高,但存在服务down机时的雪崩效应,如果缓存数据较多down机后重新从数据库加载也需要很长时间,数据库压力很大。
-- 水浸街2. 如缓存数据量确实很大的,可以选用具有持久化功能的产品,比如ttserver(Tokyo
Tyrant)、redis。ttserverhash数据库模式部分兼容memcached协议,多数情况下不需要修改客户端,就是产品没那么成熟,效
率也稍低,并且不支持key有效期;redis最近非常火,性能接近memcached,同时支持更多的数据结构,应该说适用场景更广泛,但原来使用
memcached的如改用redis所有的调用代码都需要修改。--
水浸街3. ttserver没有redis好吧,不过在某些场景mc内存占用比redis要小 -- 黑夜路人4.
ssdb,level DB做存储引擎,性能接近redis。-- 项超5.
ttserver在原来用了memcached的增加持久化功能这种场景下有优势,系统改动很小就可以支持. 我们在一个系统上用了 -- 水浸街6.
现在基本都是redis了吧,还在用mem的估计都是历史原因了 -- Eddy7.
redis可以用来完全当作cache同时当作storage,没有穿透。虽然性能比mc差一点 -- Hulk8.
大家都在说mc,redis,好像少说了个内存缓存.内存缓存不落地,请求完就销毁,速度是最快的.一般可以和mc,redis结合起来做个二级缓存.在mc,redis前面挡一层,用来解决一个请求里,重复获取相同缓存时,需要额外网络开销的问题.
-- twin9. php扩展是可以直接控制缓存之类的 -- 黑夜路人10. apcu,仅仅只有user cache部分,
apcu+opcache &= apc -- 花生啊11. apcu算是持久性缓存, 持久性你就得去维护他, 数据更新了缓存得重建 --
twin13. 问: mc redis前挡的一层是?这种扩展有例子么?就一PHP数组,大家都在用,但可能没把他当缓存来看&-- twin14. 问:
一次运行的所有数据都往里面存,然后都去里卖弄取,运行完了就完全释放?答:
不是,你取到的数据同时存到ArrayCache里去,下次先进去ArrayCache取,取不到再去你的mc,redis取 -- twin15.
这个和php yac没有差别吧。我想很多基本的东西都可以做缓存的 . 对于一些用户相关的业务型数据,可考虑在有客户端做缓存:h5的 localStorage
sessionStorage, indexDB,webSql,application Cache. 甚至文件. -- hilojack
【今日话题】讨论下哪个php框架好,和优缺点1.
zf2用了半年,写了两个项目,总觉是如果真正的完这货需要一定的技术 -- 慕枫2. phalcon 这个号称是最快的框架 --
姚文强3. 问: 那yaf怎么看 ?答: 可比性不是很大, yaf是纯粹的mvc框架, phalconphp要做全栈框架 --
twin4. 其实你把zephir用好了,你也可以弄一个C的全栈框架 -- 花生5. 问: 用了yaf之后,
上层你们都得自己写? 例如数据库操作答: 嗯,可定制性强,爱咋玩就咋玩,我们用zend
db给封装了一下,代码层做了主从和多库,然后边开发边维护一些library,新项目直接拷过来用就行,我们不注重效率,注重效率就不用zend
db了,用yaf是最熟悉这个,可定制性强 -- 花生6. yaf是最成熟稳定的,也是最早的 - 惠新宸7. 问:
项目中是统一用一个框架好还是各种都用?答: 一个项目一个框架,难道要用多个。自己给自己找麻烦 -- xufz8. 问:
公司准备用php封装业务层 leader 说用 swoole搞 不知道有人没有用过的答: swoole还不是很稳定吧,莫名段错误,坑很多,你要填啊。
-- 杨嵩答: 你试试workerman -- 骑行西藏9. 问: swoole在什么场景下需要用到呢?答:
如果你的业务需要多线程 异步 event 或 worker 的话就可以用到 -- 姚文强10.
web开发,如果不用php,就用ruby和node了, python还是适合在服务器上做脚本开发 -- twin11.
node最大好处是"全端",前后台可以共用类库,共用逻辑. 还有node的web端框架起步晚, 吸收了很多老框架的优点,不像ci, yii有沉重的历史包袱 --
twin12. 现在不玩框架了 纯堆起来 , 大多数情况下用不起sf2 成本大 虽然功能很强大 -- 24K纯金男屌13.
我用过CI超级简单,mvc用起来很舒服.我不是做php开发的,入门很快.开始我师兄让我看yii我看了,没很快的入门放弃了,总体感觉ci适合我这种人 --
hello14. ci简单易用,易理解。推荐入门 -- Eddy15. ci
简单,但是内部代码错乱,文件组织混杂,常出现一个文件中有多个类的形式,而且提供的助手加载则完全是面向过程的思想,官方也已经停滞更新了 --
yaf代码效率高,入门成本不高,很多约定都是遵循zf。面向对象架构,代码文件都很清晰,缺点是目前还属于比较小众,而且深入框架内部的学习和开发成本最高 --
臭狗屎17. ci 还在更新呢,前几天还发布了新版,v3还在develop -- Eddy18. tp
有一些封装好的数据库操作,对国内xxmp的快速开发比较有好,中国人开发,文档支持也很友好 -- 臭狗屎19.
cake的脚手架挺好用的。。框架太大,没怎么用 -- 臭狗屎20. 动不动几十M的框架真心没爱 -- Eddy21.
国内貌似用thinkphp用得不少 -- 刘卫涛(Garfielt)22.
我记得之前thinkphp还有不少bug,一边用,一边帮他改bug。。。很早之前 -- 涉水而行23.
有人能介绍一下使用的框架解决了什么问题、特点是什么么?我们前后端分得很清楚,业务逻辑在后端实现,提供http
json接口或webservice接口,前端实现界面,用的框架比较杂,用得最多是bootstrap貌似没用PHP的框架,都是自己写的,除了数据库操作类、日志类,其余就是业务逻辑了
-- 水浸街24.
优点:统一执行流程,结构清晰,模式分层,能在各层针对性地解决问题,提供常用的助手类,简化常规工作能更关注于业务,安全性方面也会有所提升不是缺点的缺点:约定大于配置,需要额外的框架部属(与带来的便利相比可以忽略),对性能会带来影响,项目看起来会变大.便于模块化和代码重用
-- 刘卫涛(Garfielt)25. 还有个重要的就是安全性,框架对input的处理杜绝了很多安全性问题 -- 臭狗屎26.
框架是可以解决很多安全问题,但如果对框架不熟悉,有的安全问题,即使被爆出来,都不知道怎么改,特别是对安全不重视,或者是一些跟进速度慢的框架维护团队,那就很被动了。
-- xiangZ27.
大致了解了一下,框架解决的安全问题主要是sql注入和xss吧,解决xss问题确实有意义,而对于sql注入,更好的办法是绑定变量.
我们对绑定变量有强制要求,除了SQL注入问题,还有一个原因是绑定变量了提高数据库性能 -- 水浸街28. sql预编译算是个防止注入的终极方案了
-- 臭狗屎29. 框架可以解决两个方面的问题1. 提高项目的质量. 优秀的框架提供类库,文档,单元测试.2.
消除部分能力不对称. 团队里的人可以在一样的平台上开发 -- twin30. 提升代码的可维护性 -- 张建31.
基于组件的开发模式 以微小框架 学习成本低. 还有对前端的亲和性 很重要 -- 24K纯金男屌32.
个人感觉,PHP框架无非就是MVC、路由、代码生成工具等,YAF以PHP扩展方式实现,性能最好,工具支持最若;YII功能最全面,性能方面也有不错的表现;ThinkPHP不大看得懂,官方网站更像是一个开发者互相交流的社区,但很多人都说这个好.
不过我们采用的是SOA架构,使用PHP也不多,基本都是用于实现MVC的M部分,没有使用框架 -- 水浸街33. 我还是选择ci,python
选择flask,简单. 其实吧,没有优劣,适合自己,然后自己能hold住. 平时开发小的东西,把m封装好,view写好,然后使用include,结合. --
hello34. m封装好,view写好, 这种更像是一个插件. 一般框架不带view(除了错误页面), 主要是加上view就抽象不起来了 --
twin35. 一个好的框架离不开强大灵活的路由 -- 老虎36.
路由我推荐kohana框架的路由器,我现在用的就是拿他的改过来, 他是双向路由, 市面上基本都是单向,除了已经挂掉的qeephp.
单向路由,就是现在常见的解析pathinfo,获取参数双向路由就是可以反过来传递参数,生成pathinfo -- twin37.
yaf,最好的,没有之一 。yaf给你留了足够的自由发挥的空间 -- 花生38.
国产框架虽然底层设计不够强,但中文文档会比较全,周边服务也做得比较好. -- twin&39.
yaf是个好框架,只是基础配件不够完善,对于那些不需要高性能的应用来说竞争力不大对于初级用户,还是希望有一套完整的框架可以直接使用,而不是要自己去composer找。
-- skccc40. 各框架大概提到的人数: yaf 7, ci 4, think 2, zf1 2, yii 2, 其他1
【今日话题】HTTP接口的设计,包括请求,响应,频率控制,容灾等1.
对url和调用者的ip或者key来来记录次数 -- 光光2. 应该用redis做计数器的 -- 如果当时3.
一般用mc啥的,操作保证原子性 -- 黑夜路人4. 先要确定好接口规范,比如采用restful
然后再确定接口的目标用户是否需要验证后请求等,还可以设置白名单之类的,用户访问对url和ip或者key来唯一来记录调用次数和每个时间内规定的调用次 --
光光5. 如果是幂等的接口,例如从数据库查询一条记录,无副作用,可以不用加锁,
如果不是幂等,如向数据库插入一条记录,就得考虑加锁,保证请求原子性 -- twin6. 加锁的方法比较简单, mc-&add('key',
true, '最大请求时间或0'). 要加锁就得解锁,解锁其实很简单,不推荐在return之前写,因为一个action有很多return,
也不能在__descruct里面写,因为fatal
error时不会调用__descruct,应该通过register_shutdown_function注册个回调解锁 -- twin7. 问:
给客户端app调用的接口如何设计以保证安全性?答: 目前我用的是 aes 加解密,准备换成 oauth -- 姚文强8. 问:
https的话会不会导致客户端请求与解析变慢?答: 慢一倍 -- hilojack9.
如果是面向客户端的接口,可以加签名做验证,面向浏览器的,就只能用验证码了。服务器间的接口调用通过ip限制最简单可行。面向客户端的可以用oauth,但是麻烦了点。频率控制的话很多都是ip,单ip下每秒钟请求次数限制
-- 我是谁10. 通过IP误伤率很大 -- skccc11.&&推荐这本书 heroku的api设计? 虽然我也还没看过 呵呵 --
24K纯金男屌12. 安全验证我们可以认为有两种,一种是有状态,一种是无状态.
象签名验证,根据你请求数据验证是否合法,就是无状态,象Oauth2.0这种,每次都带着key过去确定身份,就是有状态.
无状态的好处在于客户端和服务器设计比较简单,不用记录用户状态,当然有伪造数据风险,有状态就麻烦了,两边都得考虑用户身份,验证过期等问题 --
twin13. 这里有大量restful接口设计的指导&&-- twin14.
我先分享一点体会,我使用过的http接口方式,前后端之间、后端之间使用的是WebService,提供给JS、APP调用的是JSON,这些接口都是有状态的,使用session保存状态数据,不同服务器间使用单点.
登录验证,所有接口均需要支持返回未登录错误消息,由调用者保证负责与单点登录服务器通讯 -- 水浸街15.
RESTful要求无状态、HTTP标准方法,我们只在不需要用户认证的服务上尝试使用了,由于要HTTP标准方法,GET的时候要把数据拼到url上,
一长串路径很难看懂,数据较多时存在url超长的情况,还有开发人员把JSON数据编码到url上了,总的来说我感觉RESTful是看起来很美,实际使
用挺难受的
-- 水浸街16.
有状态的接口要做频率控制很容易的,放在session中就可以了,但我们没有作控制,因为误伤是无法避免的,有些情况下确实就需要频繁调用,我们采用的是管控方案,在连接调用次数超常是发出告警信息,由维护人员手工处理
-- 水浸街17.
容灾应该是架构需要考虑的问题,我们的方案是,同一个系统的前端服务器都运行同样的服务,可简单通过增加服务器方式增加处理能力,集群之前架设F5负载均
衡平均分配到前端服务器上,后端服务按用户群分服务器、数据库,用户路由数据保存在缓存服务器上,前端服务器根据查询的用户路由数据访问相应的后端服务
器。这种架构下任何一台前端服务器down机均不会造成太大的影响,任何一台后端服务器down机只影响特定用户群,后端服务器还可以采用主备方式避免这
种情况发生。
-- 水浸街18. 问: 连接调用次数怎么控制频率呢?答:
记在session中的不必采用统计方式,可以设计一个算法,session中记录两个变量,一个是上次调用时间,另一个是调用频率权值,然后计算本次调
用当前时间与上次时间的差值,给时间差值分段定义单次权值、权值衰减率,调用频率权值*权值衰减率+本次权值=新的调用频率权值,然后给调用频率权值设置
一个阈值判断就可以了。这个方法在设计时我有考虑,但最终没有使用
-- 水浸街19. 问: 这对前端用户频率访问控制很有效。但这样会不会因为接口太多而造成session里存的东西太多?答:
这个判断只有两个变量,session数据是一个连接保存一份,除了这个数据还有用户编号等少数几个索引数据,不会太多的,担心这个问题可以通过缩短session有效期方式优化
-- 水浸街20. 频率控制也可以用令牌桶做.
基本思路,有一个桶,桶里面放令牌,然后每次请求来的时候会从桶里面取一个令牌,另外一端会按照一定速率往桶中放令牌,桶可以设置一定大小.
当取的时候没有令牌了,那就说明调用频率超限制了.
实际实现的时候一般不会真的开一个线程去投放令牌,一般在消费令牌的时候,判断是否往桶里放令牌。这个方法似乎在open
api里面使用比较多,例如一小时最多调用150次之类的。不过我在最近一个对外接口项目中也使用了。 -- 项超21. 问:
思路不错,但是我觉得放令牌是不是和消费令牌拆开比较好?答:
嗯,具体实现其实根据场景选择就好!比如使用golang写的话,用channel做桶,放令牌用一个协程去做,就挺合适 -- 项超22.
单独开线程这个开销太大了,消费的时候放入令牌就好,记录桶的创建时间、令牌生成时间间隔、已生成令牌数,就可计算当次需要生成新的令牌数,生成后是否放入桶中受桶的容量影响,但不影响令牌生成计数先生成、放入再消费,和单独一个线程没什么区别
-- 水浸街21. 接口可以用zabbix监控,频率控制要自己写计数器吧~可以用redis来做频率控制 -- penn22.
我先喷吧 接口设计要原子化,尽量简单,使用优雅的面向对象风格,监控。服务管理可以借鉴esb -- alex
【今日话题】如何做好运维?分享下你遇到的坑,用的运维程序和工具1.
我先来 线上布个phpmyadmin 通过授权访问,虽然很危险,但很可以快排查问题,痛并快乐着 -- twin2. 这么说还有mongo
admin redis admin之类的. rock mongo, phpredisadmin -- 零度西瓜3.
Phpmyadmin不用好多年,最垃圾的工具,没有之一 -- 如果当时4. sqlyog不错 -- 张文涛5. heidSQL
免费的 也不错 -- 姚文强6. 我也是sqlyog直接通过ssh tunnel连线上 不过mysql admin的好处是 有浏览器就行.
尤其是对数据库和能访问数据库的机器限制比较严的情况 -- 蚂蚁7. mysql-front 不错 -- 慕枫8.
一般db都在内网,sqlyog失效 -- 雪豹9. navicat可以用你前端服务器作为代理连接你的内网db,
sqlyog不知道有没?答: 只要有 ssh 通道就可以把 -- 姚文强答: 有 但是如果前端服务器做了限制不能直连就会比较麻烦 --
蚂蚁答: sqlyog也可以的 -- 朝沐金风10. 所以命令行才是王道 -- 零度西瓜11. 问:
你们数据库字段命名用什么风格?答: 跟你的程序一样,你的程序用下划线,就下划线,用驼峰,就驼峰. 虽然官方推荐是下划线,但从整体来说,
url请求参数,html表单字段名称,程序变量命名,数据库字段命名都应该尽可能是一样的风格 -- twin答: 前缀+下划线 --
我觉得表单名字和数据库字段一样容易被人猜出数据库字段名有风险不一样的话后台做转换会安全点有时候偷懒会直接把提交字段当变量写在SQL里被人注入 --
weizhao答: 能注入,还要什么字段名 -- 徐刚答: 更容易猜到 有些时候手写SQL一不小心就容易忘记 不是说保持一样就不行 --
weizhao13.
我这边使用navicat,链接全部用内网ip,每个人不同账户,只有部分负责人有写数据库链接。报警部分日志直接写文件,有内容直接发短信。简单的必须运营手工处理的部分给他们做列表,敦促他们处理。用于沟通的时间大于维护时间。做得成功的话,策略时间大于修复时间。
-- 幽灵灵空14.
我们这边基本要连数据库更新表操作都找SA,数据库密码等配置在nginx的配置文件里,php通过$_SERVER来调用环境变量,一般程序员是不清楚线上数据库账号密码等的,代码提交也不需要修改内外网不同的数据库账号密码
-- 幽灵灵空15. 看过过国外的一些服务就是这样搞的 -- 姚文强16. 都知道密码又怎么样 能访问吗. 没必要折腾这个
权限分清楚就可以了 -- 王春光17. 那个方法配置一多就不行了,微博原来这么干过 -- 花生18. 问:
想了解下代码发布、上线管理,有经验的请分享下呢。答: jenkins 我们在用 持续集成 线下发布是神器 -- 张浩19 问:
用jenkins你们会做哪几类工作呢?答: 自动构建 发布 -- 张浩20 问: 自动构建是一个任务,每次提交就触发,
发布又是另一个任务,手动触发是吧?答: 生产环境是脚本,测试环境一键构建发布,一个任务 -- 张浩21. 问:
现在生产环境php版本推荐哪个版本?答: 如果是新开发的项目,可以选用5.5,旧项目如果不想太折腾可以用5.3 -- skccc22.
问: 小于5.5的版本可以直接配置鸟哥的那个opcache吗答: 5.2以上 -- 我是谁23.
jenkins除了可以做构建发布,还有很多插件:单元测试和覆盖率,代码风格,代码安全,文档,邮件...还可自定义脚本,啥都能干 -- 懂哥24.
Devops,开发也讨论运维的事情,好事 & Hank&25.
不是,是开发运维工具,工具是第一,现在有很多工具,但是还要搞适合自己平台的 - Hank&26.
问:我想知道你们多机房同步是怎么做的&答:实时要求高的话只能自己拉专线或者租用 & 崔玉松27.
光纤等于光钱 不是一般企业的方案答: 那就只能牺牲实时性 - 崔玉松28.
其实我觉得能不分机房就尽量不分。没办法,例如一个机房的机柜有限,那就分模块,不同模块不同机房。 &
skccc&29. 不同模块不同机房 同一用户要访问多个机房数据 不合适吧 &
york&30. 分模块要尽量减少模块间的数据交换。有时候需要和产品做协调。 &
【今日话题】讨论lamp中敏感词过滤如何实现?1.
敏感词弄成数组,再去匹配 -- Anonymous、z2. 要看敏感词的数量,如果量少 可以php实现 如果超过2w的量php实现就太鸡肋了.
可以用java 或 golang 实现接口 -- Mandman3. 敏感词库建索引,未必都扔内存 -- 雪豹4.
php_ext_trie_filter - 零度西瓜5. trie太耗内存了 -- 列旭松6.
有个lua写的nginx插件,专门过滤post get参数 lua_nginx_model -- 鹏7.
之前看过apache的一个mod_filter,可以自己写插件,当时我是按照官方文档,把从后端获取的数据转换成大写,如果过滤的话,应该也可以通过
apache插件做到吧,比如可以过滤后端来的数据,遇到"hello",自动自动变成"world"(或者大写HELLO)
-- hello8.
最笨的方式就是循环敏感词库是否存在于文本,存在则替换。这对于敏感词比较少的情况还是比较合适的。但是敏感词量大的话这种算法就不合适了。 --
我是谁9. 简单的可以这样处理,用敏感词建一张字典树,然后把文本去字典树里面匹配。时间复杂度可以控制在o(n) --
没研究过,大致提一下我的想法:内容是随机的,敏感词库可以自己组织,搜索词库的效率肯定远远高于搜索内容,因此算法实现对内容的遍历应该尽可能少。一种
思路是对内容先分词,再遍历分词结果匹配敏感词库有序set,这种算法效率应该还不错,但很多敏感词是生造的,分词词库中不一定有,因此同时需要维护分词
词库和敏感词词库,分词词库维护比较困难;另一种思路是对敏感词库按一字词、二字词、三字词&&分别建立有序set
(A),再建立一个首字是否存在上面各种类型敏感词的hash map
(B),一次遍历内容,先提取一个字从(B)中找出以此字开头有哪几种长度的敏感词,然后再按结果提取指定长度的字符子串分别查找(A)。 --
刚才测试子一把。在我的电脑上十万个敏感词循环匹配500个中文的文本,几百毫秒执行时间。我想如果在服务器上运行应该比这更效率吧。这是最笨的方式 --
我是谁12. ac自动机 -- XiangZ13. 微博的敏感词好像是扩展方式搞的,好像是把敏感词弄到内存中,效率应该很高 --
虎之14. @XiangZ
ac自动机适合英文多模匹配,26个字母使用26个指针就能定义完所有子节点,使用数组存储以字母为下标可以直接取得,中文就不是这么一回事了,有没有实现案例可参考?
-- 水浸街15. @我是谁 超过50毫秒都可以认为是慢接口,这个方法是简单,但效率太低 -- 水浸街16. 问:
这个是否没有考虑跳字的问题答: 匹配前去掉分隔符就可以了,可以选择合适的时机执行,比如在提取指定长度的子串时忽略分隔符 --
水浸街17. 我说的就是trie树,英文只有26个字母,汉字远多于这个数字,无法像英文那样直接用数组存储子节点指针.
不过这个算法真的很强,只用指针不用内存复制就能搞定多模匹配,或许稍微变通一下就可以了 -- 水浸街
【今日话题】开发人员如何做好自测?包括自测功能筛选,时间安排,常用工具等。1.
涉及到钱等用户利益、主流程、客户重点关注功能,尽可能做单元测试。 -- twin2. 重要业务单元测试都是必须的 --
朝沐金风3. 问: 敏捷开发,对自测的帮助呢?答:
敏捷也就部署的时候构建工具带的phpmd之类的工具检查下语法,平时保存文件的时候php &l 一下吧 -- 潘5. 问:
Web开发有什么好的测试工具呢答: phpunit -- 依然特雷西答: 推荐一个工具&WebPHPUnit
是一套在线的可视化PHP单元测试系统,其基于 VisualPHPUnit
二次改进而成,去除了数据库统计功能,同时修改整个库为phar格式,无需pear支持,自带phpUnit.phar。达到依赖性最小以及方便的可移动性。 --
吴子棋6. 要注意webphpunit是运行的测试是在浏览器环境 不是cli -- twin7.
还有些基于PHPUnit的类库, 象codeception,也可以辅助自测 -- twin8.
对于数据层和API层,直接采用测试来调试,调试完成基本测试也搞定了。整个过程都可以在终端中完成,很少需要浏览器。工具用codeception和phpunit,fixture管理测试数据。
【今日话题】分享下MySQL使用中的坑(包括语句,表配置,程序配置,部署等),及如何组建增加服务器达到增加处理能力的集群方案?
-- 水浸街1. mysql最重要的配置,对于innodb来说,最重要是
innodb_buffer_pool_size;对于myisam的配置主要是key buffer, query_cache -- 黑夜路人2.
innodb_buffer_pull_instances = 1而且innodb_buffer_pool_size 比较大时(超100G), 在线alter,
容易阻塞应用, instances=4或8会有明显的改善 -- 老李3.
关于MySQL集群,我们采用水平拆分方案,在设计时把数据划分为多个数据域,每台MySQL服务器存储一个或多个数据域,以接口方式提供单一数据域的访
问,数据域内的流水表按时间分表,历史数据移到历史数据库存储。这种方案有限解决了计算能力和存储问题,但存在一些问题,一是数据域划分依赖最初的设计预
估,随着发展部分数据域数据暴增造成很大影响,二是分表的维护工作量很大,三是没有太好的方法解决多数据域事务问题。
-- 水浸街4. 增加服务器. 那就用开源的云计算技术了 -- 黑夜路人5.
一种可以避免数据迁移的分库分表scale&上面的分享不知是否靠谱 -- twin6. 第一个最好程序留好分表的口子,
现在看到的都是量大了做迁移. 事务问题,区分关键和次要路径,做好容错,次要功能挂了不影响主流程,关键功能挂了可以重试,或是手工处理.接口中断后,允许重新调用
那篇文章的方法不太靠谱,按id查询还凑合,但凡具有时间特性的数据必然会有按时间段查询统计的需求,随着时间推移分表越来越多,查询统计要操作所有分
表,这是没办法接受的。对于有时间特性的数据,我还是推荐按时间分表,比如按月、按天,分表持续增加,按需求保留一定的历史数据,其余全部迁移走,整表迁
移很简单。
-- 水浸街8. 分表后,会写个程序,把所有的数据同步到一个总表,查询统计就用总表. 所以统计会有点延迟 -- twin9.
问: SQL语句的优化的心得(主要是select)答: 除了把SQL语句简化,比如尽可能不用子查询、少用join、尽量用主键查询,似乎没有太多办法了
-- 水浸街10. 要几个字段查询是明确指定. mysql的正则很好用 -- 24K纯金男屌11.
涉及复合主键,对于需要经常查询的表,建议增加一个唯一ID作为主键,这样会提高查询速度,而写了不怎么查的表如日志表,则不需要增加这样的ID字段,因为会增加io降低写性能
-- 水浸街12. 尽可能主键查询加缓存, 查询指定字段开发效率太低了, 一般到觉得慢才专门指定 -- twin13.
问:触发器你们谁用过&答:触发器没实践用过,总觉得这种依赖数据库的特性来处理业务逻辑不太靠谱 &
我来说一个不小心造成的坑吧~有一次老项目换成新项目~新的数据库使用了严格模式~后来所有的建表语句里面 not null 但没有给default都报错了~ &
【今日话题】聊聊PHP开发中遇到的坑
-- skccc1. 数据库字段长度没有设置好,导致存储数据有问题 -- Anonymous、z2.
错误机制不够完善,fatal error后可能最好的办法是赶紧记日志退出, 不然做得越多错越多 -- twin3.
我觉得变量的作用域就是一个坑,使用全局变量或类成员必须显式指定,这个严格定义倒还说得过去,但在复合语句内定义的变量确能在复合语句之外访问,简直难以接受,也许是我更习惯C/C++的缘故吧
-- 水浸街4. bom问题,windows下才有 -- 梦想旅程Linux下也这样,语言设计就这样的,不是问题 --
一般的变量问题不大,多数情况下会赋值后使用,但引用变量就很容易出问题,我之前在foreach语句里用了引用,找到问题后还上PHP社区问过了 --
水浸街6. 还有个浮点数问题,鸟哥博客提过&&-- 梦想旅程7.
php.ini的error_reporting问题遇到过。从5.3.10升级到5.6的时候E_ALL包含E_STRICT。结果出来很多错误信息。5.4之后
E_STRICT 成为 E_ALL 的一部分。5.4以上的error_reporting 生产环境配置是:error_reporting = E_ALL
& ~E_DEPRECATED & ~E_STRICT5.3的是 error_reporting = E_ALL &
~E_DEPRECATED。当初运维配置的时候直接拿5.3的ini文件拿到5.6来用了。结果就遇到这个问题了。 -- 我是谁8.
字符串截取等相关操作因为编码也有很多想不到的事 -- Eddy9. 问: var_export: Nesting level too deep
- recursive dependency? 这个问题不知道大家遇到过没?也够坑了。答: 因为你里面出现变量互相引用了 --
twin10. curl的@符号问题。会默认当做文件路径来处理。 -- 我是谁11.
curl配置代理后,代理可能会加个HTTP/1.1 200 Connection established头,也是会干扰返回结果 --
twin12. curl@问题,最好做个封装,区分文件和普通参数 ['data' =& [], 'file' =& []] --
twin13. 问: 求教:十万行数据倒序如何优化? 语句:Select id from tablename order by id desc.
explain后是using file sort答: 因为你sort_buffer_太小了,才512k,必须上文件排序啊,你改成256m试试.
把key_buffer 和query_cache改到128m. 还有 myisam_sort_buffer也改大 -- 黑夜路人答: 给个索引值
第一页用limit 0,10 然后用第一页的最后一条记录的id做索引值, 第二页开始 id & 索引值 limit 10 -- 柯化雨
【今日话题】大流量的网站架构与开发
-- 李三1. 招个好运维 -- 潘2. 所谓的能有好的可扩展性 能用机器解决的问题都不是问题 --
我来个,我们主要遇到内存和带宽问题.每个请求都要占用一定内存,访问多,内存就飙上去了.目前还没做优化,主要在框架层做延迟加载,按需加载,xhprof检查内存消耗等带宽问题是把素材做统一管理,压缩,合并,放cdn,象grunt,bower都可以辅助自动化部署4.
微博上看到onesql数据库说是能应对电商峰值访问,就是限流 -- 潘5.
延迟加载按需加载很好理解,很多应用,进来就连db,连缓存,这些都要推迟到你调用db-&construct/query
mc-&construct/get 才做连接. 尽可能写成类,充分使用autoload机制,真正用到才加载,才连接 -- twin6.
大流量的网站架构与开发,话题太泛了,架构和网站提供的内容有很大关系,大致需要考虑的就是带宽、处理能力、存储,带宽比较好解决,存储依赖架构设计,而
架构设计最重要的就是考虑处理能力,提升处理能力可以使用更好的机器或加更多的机器,前者成本非常高,把
tpmC提高到两倍可能需要5倍的预算,而且单机的磁盘io也是瓶颈,所以多数会考虑后一种方案,就是分布式架构。分布式架构主要有两种方式来拆分机器,
一种是把不同的服务功能拆到不同机器上,另一种是把相同服务功能部署到多台机器上,两种方式者可以单独或结合使用,具体什么方案合适还是要看服务内容
-- 水浸街7. 大型网站架构的确是一个很大的话题,没有两个产品会有完全相同的架构设计.&比如说需要根据产品的用户群体分布以及国内复杂的网络环境以及带宽问题,需要考虑服务器的分布式部署,多IDC分布式部署可以考虑:访问速度、IDC不可用、程序故障,核心是要解决数据分布.&也可以解决db
idc冗余 保障稳定性.&各种cache的设计,如静态化,localcache, lan cache,
database buffer/cache.&数据存储,大型网站 肯定就是海量的.
mysql的话就要搞各种拆分策略,mysql+cache就要考虑各种雪崩啊,数据类型的单一性,需要序列化等.&nosql存储的选型,单机的,redis
mongo分布式cassandra,hbase的选型啊啥的tb级数据带来的带宽问题,需要考虑压缩lzo,quicklz -- 王斌科
【今日话题】Mysql如何备份和容灾
-- 张建,黑夜路人&1.
简单的写个脚本定时导出就行,听听各位高大上的方案 -- Eddy&2.
用rsync把binlog同步到一台远程的机器,每完整的同步一个binlog者在远程机器的数据库上执行, 我是用的这个方法远程备份,
还有就是恢复的时间,当数据量大的时候,恢复数据库的时间太长了 -- 张建&3.
用阿里云,什么都给你搞定了,还便宜 -- 刘祥昆&4.
可以在备库lvm快照,恢复,找误删数据都比较快和方便,或者直接用xtrabackup了 -- 老李&5
问:主从同步算不算 & 黑夜路人答:不算,容灾一般都是本地,或者异地 -
Hank&我说的本地是同城的意思,异地是指其他城市 -
Hank&我感觉主从就是基础吧 & 闵敢6. 数据真正重要的话 硬件上 还是要倾斜的 &
容灾系统是指在相隔较远的异地,建立两套或多套功能相同的IT系统,互相之间可以进行健康状态监视和功能切换,当一处系统因意外(如火灾、地震等)停止工
作时,整个应用系统可以切换到另一处,使得该系统功能可以继续正常工作。容灾技术是系统的高可用性技术的一个组成部分,容灾系统更加强调处理外界环境对系
统的影响,特别是灾难性事件对整个IT节点的影响,提供节点级别的系统恢复功能。(来自百度百科)
& skccc&8.
问:异地大数据怎么保证速度的基础上进行同步?&答:保证速度提高带宽就行,但是要保证一致性就要想办法了
【今日话题】分享下MySQL使用中的坑(包括语句,表配置,程序配置,部署等),及如何组建增加服务器达到增加处理能力的集群方案?
-- 水浸街1. mysql最重要的配置,对于innodb来说,最重要是
innodb_buffer_pool_size;对于myisam的配置主要是key buffer, query_cache -- 黑夜路人2.
innodb_buffer_pull_instances = 1而且innodb_buffer_pool_size 比较大时(超100G), 在线alter,
容易阻塞应用, instances=4或8会有明显的改善 -- 老李3.
关于MySQL集群,我们采用水平拆分方案,在设计时把数据划分为多个数据域,每台MySQL服务器存储一个或多个数据域,以接口方式提供单一数据域的访
问,数据域内的流水表按时间分表,历史数据移到历史数据库存储。这种方案有限解决了计算能力和存储问题,但存在一些问题,一是数据域划分依赖最初的设计预
估,随着发展部分数据域数据暴增造成很大影响,二是分表的维护工作量很大,三是没有太好的方法解决多数据域事务问题。
-- 水浸街4. 增加服务器. 那就用开源的云计算技术了 -- 黑夜路人5.
一种可以避免数据迁移的分库分表scale&上面的分享不知是否靠谱 -- twin6. 第一个最好程序留好分表的口子,
现在看到的都是量大了做迁移. 事务问题,区分关键和次要路径,做好容错,次要功能挂了不影响主流程,关键功能挂了可以重试,或是手工处理.接口中断后,允许重新调用
那篇文章的方法不太靠谱,按id查询还凑合,但凡具有时间特性的数据必然会有按时间段查询统计的需求,随着时间推移分表越来越多,查询统计要操作所有分
表,这是没办法接受的。对于有时间特性的数据,我还是推荐按时间分表,比如按月、按天,分表持续增加,按需求保留一定的历史数据,其余全部迁移走,整表迁
移很简单。
-- 水浸街8. 分表后,会写个程序,把所有的数据同步到一个总表,查询统计就用总表. 所以统计会有点延迟 -- twin9.
问: SQL语句的优化的心得(主要是select)答: 除了把SQL语句简化,比如尽可能不用子查询、少用join、尽量用主键查询,似乎没有太多办法了
-- 水浸街10. 要几个字段查询是明确指定. mysql的正则很好用 -- 24K纯金男屌11.
涉及复合主键,对于需要经常查询的表,建议增加一个唯一ID作为主键,这样会提高查询速度,而写了不怎么查的表如日志表,则不需要增加这样的ID字段,因为会增加io降低写性能
-- 水浸街12. 尽可能主键查询加缓存, 查询指定字段开发效率太低了, 一般到觉得慢才专门指定 -- twin13.
问:触发器你们谁用过&答:触发器没实践用过,总觉得这种依赖数据库的特性来处理业务逻辑不太靠谱 &
我来说一个不小心造成的坑吧~有一次老项目换成新项目~新的数据库使用了严格模式~后来所有的建表语句里面 not null 但没有给default都报错了~ &
【今日话题】RequireJS和SeaJS的差别,使用感受和优缺点
-- 黑夜路人,twin
Requirejs是amd标准,seajs是cmd标准 -- 光阴的故事
2. 问: 这两个标准,不同在哪里呢?
答: Amd提前执行,cmd延迟执行 -- 光阴的故事
如果只是避免加载页面时阻塞、模块化,不用这两个框架也差不多,在body标签内写javascript标签可避免阻塞,使用Google Closure
Compiler之类工具可以把多个js文件合并成一个,近似实现模块化吧 -- 水浸街
我做前端比较多,主要解决下面的问题,多人协同开发的冲突(采用闭包解决),模块依赖问题,combo合并之后减少http请求数 -- 青衫隐_刘
我们目前用的比较基础,主要作为一个加载器和依赖管理器, 用来管理大量js和外部插件 -- twin
6. 问: AMD现在是世界主流吧
是啊,国外流行的js组件,象jQuery,backbone都支持amd了.即使是不支持的组件,requirejs也提供了shim来实现依赖加载 --
【今日话题】讨论下函数式编程语言的特点和应用场景,比如:erlang/scala/haskell/
clojure 等等语言 -- 黑夜路人
haskell 很吊 写个排序算法只要三行就搞定了 -- 姚文强
twitter有个用scala写的数据处理框架,叫scalding, 可以很方便的处理数据 -- twin
多数人大部分起先学习的是面向对象编程吧,我先学的是面向过程,然后再转面向对象编程,这之间两种编程思想转换确实费劲,编程越久思想越固化。在这之前,我就知道编程分面向过程和对象,而对函数式编程一无所知。google了这种编程思想,多数人反映比较难学,但掌握之后编程能力进一个台阶。--
____誓誩大少爺
用函数式编程能够刷新思路 -- (黑夜路人)
函数式语言的变量是不可变的,很多算法需要用到递归实现。正因变量不可变,递归起来就不会出现性能问题 -- Shadow月
【今日话题】哪家的IaaS云比较好(阿里云,腾讯云,盛大云,青云,UClound,亚马逊AWS等等)
-- 黑夜路人
盛大云很杯具,母鸡坏了数据就丢了 不过盛大云的带宽相对比较便宜 -- Lphy
都不乐观 稍具规模还是自建吧 使用中问题多多 不可控 -- rain
阿里云的还可以,性能差点,带宽较贵 -- Lphy
青云很赞啊首先用起来很流畅,增加一个机器几秒钟就ok了而且他们的工单服务也特别及时按秒计费&& 计费方式也比较灵活& 监控也挺好的
sdn可以很灵活搭建自己的私有云集群 -- 王斌科
我用过阿里云 青云和美团& 个人感觉青云不错 -- 王斌科
之前在知乎,有个人讲小而美的公司,其中就提到了青云 -- 项超
现阶段uclound比较好,配置灵活性高,腾讯和阿里亲爹强大,日后估计能get不少新技能 -- 夏天
請問大陸有哪一家IaaS雲有提供動態CDN功能呢?還是說一般建議搭配藍汛或網宿這些公司?
腾讯云有cdn 但是得通过svn上传 好像还得手动生效 不是很方便 如果腾讯云cdn操作太麻烦不方便一键部署我们准备腾讯云七牛cdn --
阿里云腾讯云都用,售后服务响应差不多,1年对比下来阿里云稳定性要比腾讯云高些 -- 李智
[Speechless]我们在阿里上一个月一次当机,腾讯从来没当过&&&&& --
问:这个稳定怎么比较的呢 -- twin答: 腾讯云刚上线的时候出现过几次线路故障,后来倒是没什么问题了& -- 李智答:
阿里云小型的相当稳定。。亚马逊的貌似还没开始公测。。 -- 陈文力
青云的价格贵了技术来说挺先进阿里云有很大一个优势抗攻击 单机 5g 免费上次 ucloud 被打了几十g 带宽 一个机房挂了。阿里云
几十g 无视不会对大规模的用户影响&& -- @鲤鱼
阿里云除了io其他的现在好多了 -- flea答:io就是问题。很明显。。--
陈文力答:本质就是技术差&&&&
所以实际情况来看,看那个是常态问题&&&&
如果网络io是重点,那么就用阿里云,如果磁盘io是重点就用青云& -- (黑夜路人)
网络IO跟磁盘IO都关注,用腾讯腾讯最近就是不能升级单机数据库也只有内网入口数据盘也是不能增加的,就死配置青云就啥都能涨&
觉得uclound方便不如青云,价格便宜些 --黑夜路人
在阿里云工作过两年腾讯云用过一段时间Ucloud 各方面都还可以,没太多技术亮点--崔玉松
问:想问大家在下什么情况下会选择云服务?毕竟云服务比自己托管主机可要贵不少。答: 一个是服务,Ucloud 服务极好,出了任何问题都能有专门的人帮你解决
-- 崔玉松Ucloud 混合云还是很有吸引力,在你大了之后能将一些云上弊端放大,混合云能很好的解决这个问题 --
问: 大家用iaas感觉很好用吗?貌似运维的工作量和复杂度没有降低多少啊--- 闵敢&答:
上这个不会减少运维复杂度啊这是集中管理扩展方面的需求 -- Hank
问: 大家iaas真的便宜吗 -- 闵敢答:怎么可能便宜?要开发个系统来把物理机才成n台机,还要一群人来运维,成本比你自己托管高不少吧
--skc答: 自己做云平台不靠谱但是用别人的总体TOC成本要降低 -- 黑夜路人
【今日话题】说说常用的数据结构的使用场景和优缺点
数组 嘿嘿 -- 惠新宸&2.
我来说一个,用优先堆队列实现定时器。例如定时器里有很多任务,通常的实现是每分钟或每5秒唤醒一次来检查任务列表,执行满足执行时间的任务。定时唤醒可以改用优先队列,按唤醒时间排,然后定时器就可以休眠到最早要运行的时间点唤醒执行任务就可以了。优先队列通常用最大/小堆实现,算法导论关于堆算法有很详细的描述,可参考
-- skccc&3.
用得最多是list和map,列表、队列、栈均用list,有指针数组和链表两种实现方式,仅在元素量非常多、需要频繁在随机位置删除、增加元素的情况下用链表,map用于key-value,PHP的话用数组就能解决大部分问题
-- 水浸街&4.
关于优先队列,如果队列里的元素的优先级是有限的,比如有优先级的消息队列,那么最合适的是按优先级拆分队列,出队时按队列优先级依次出队就可以了,优先队列处理起来太繁琐,优先级不多的话性能原差于拆分队列
-- 水浸街&5.
问: 拆分队列是怎样的?&答:
举个例子,银行的业务办理排队系统,有VIP、金卡、普通三类客户,使用优先队列可以实现,也可以拆分为三个队列,按队列的优先级顺序出队&6.
数据结构按我所知的可分两类,一类是一对一的结构,比如线性表,线性表下又可化分为顺序表和链表,这是按内存地址划分的;另一类是一对多的结构,如树,图,树下又分二叉树和普通树,多树合成森林。对数据结构的基本操作可以总结为增删改查,高级操作都是复杂算法,不是我等数学老师死得早能够理解的
& ____誓誩大少爺
【今日话题】
如何防止注入?包括SQL注入,变量注入,XSS注入,系统命令注入等
- twin, skccc
Sql注入用pdo prepare可以杜绝 -- 光阴的故事2.
嗯,pdo bindparam -- 零度西瓜&3.
csrf :所有外站跳转统一走独立域名,然后用js 跳转,大多数浏览器302会透传refer(除非http-&https ,这种情况不会传refer
)。上行接口refer 限制时不仅要限制域名, 要求高的话还要限制整个url 以及post -- hilojack&4.
防sql注入:使用mysql预处理语句(pdo有提供方法)变量注入:不要从来自外部的数据导入变量xss注入:输入时过滤验证,输出时转义系统命令注入:禁用相应的提供系统操作的函数
-- 杨锡坤&5.
sql注入-检查变量的类型和格式,比如uid就只能是int,正则检查格式,2-过滤特殊符号,3-绑定变量,用mysqli -- 星星&6.
HTTP only cookie 能防止后台认证窃取 -- 吴子棋&7.
问: 为什么要过滤输入的值呢?比如什么情况就要过滤呢?&答:
HTML 怎么也得过滤,PHP中叫消毒 -- 吴子棋&答:
过滤输入的比过滤输出的容易处理些把。主要是防xss洞 -- skccc&答:
过虑输入要比在输出时处理的点要少,但逻辑要复杂很多,存在不少逃过检测的方法 -- 水浸街&8.
80sec 有一篇php 高级审核,不过有些点有点过时了,php 已经干掉了有些不安全的选项,像magic quotes, register global --
hilojack&9.
其实还要注意使用' ".万一被人使用&--注释你代码 -- Anonymous、z&10.
没有拼接就没有注入,SQL使用绑定变量,不使用过严格控制使用eval,构造html页面的变量必须经过编码。这种事情一再强调也会有人违反规范,特别是新员工。 --
水浸街&11.
问: review的时候能发现吧?&答:
人工review的成本挺高的,一般只是抽查 -- 水浸街&12.
常见做法防注入使用pdo的预处理,避免XSS使用过滤特殊字符串 -- adam&13.
Nginx lua 的waf框架可以搞定绝大部分 & 崔玉松&答:没啥业务或者业务简单几百年不变的写几个nginx
lua脚本处理确实靠谱,性能又好 & 合一14.
&对于今天的话题,先从开发管理入手,制定代码开发规范,对代码的审计。& Hank &&答:php代码规范可以直接用PSR规范
& skc答:SVN的钩子有设定,不满足格式的代码,无法提交
-- 夜丶有雪答:git下的hook也可以
& Hank &&15.
&注入的产生根源于程序代码与数据指令的混淆以及一个信任问题,分离程序代码与数据指令之间的耦合性以及对用户操作的信任与否是防止注入的最关键问题。 &
____誓誩大少爺&16.
一切有用户输入的地方都是 注入源。不仅仅包括 get post cookie http头。保持者一个思想,所有的这些信息都必须严格过滤。mysql 防止注入
请用参数绑定。pdo 或者。mysqli 。不要再用老旧的,mysql_connect 真的以为自己牛逼,过滤干净了?坚决抵制 mysql_connect
& & 理鱼&&
【今日话题】当你的程序(PHP,C/C
,Java,Python,Go等等)出错了,网络请求失败了,如何调试和定位? -- twin
断点,error log. -- 零度西瓜&2.
网络请求失败,比如404,500,cannot resolve host, 返回数据格式不正确等等 -- twin&3.
分析程序日志,系统日志,各种系统网络路由器监控日志,再结合机房的配合& 基本能搞定 -- Mandman&4.
一步步定位,看是哪个环节出错,把php的error_reporting打开,fpm日志打开,nginx日志打开,tcpdump抓包看是否正常请求和到达 --
调试一个请求:b/s 用浏览器的network,如果有302的话可选择preserve log 或者用插件stop掉302;b/s的话可以tail
-f查access.log 如需更详尽的请求信息可以用抓包工具fiddler、Charles 等。拿到请求后可在命令行下做调试(chrome
可以在networks右键得到curl)。高效率依赖于好工具,比如灵活使用用管道,查看json的话用:curl url |& php -r
'var_dump(json_decode(file_get_contents("php://stdin"))); 还有更强大的jq: curl url |
jq& 。如果需要直接编辑可以用vim:curl curl | vim - 。而代码调试中经常用到二分打印,或者二分法分断删除再执行。 --
hilojack&6.
wireshark抓包分析 -- 杨锡坤&7.
if(isset($_GET['debug']))&&
register_shutdown_function(function(){&&
var_dump(error_get_last());&&
}); //加在头部 无需修改任何配置 对程序无害 绿色 -- 吴子棋&8.
PHP firebug也不错啊 & 或者直接封装好函数输出&!&&& print_r($var) &&&& 查看源码
-- weizhao&9.
先判断是否是网络故障了, ping 不同ip, dig 不同域名或路由, 检查防火墙, curl 测试不同链接, 如果不是网络问题,
就要看网络请求失败的具体header status, 是否404,301,302, 或500, 如果500, 则基本可以断定是对方服务问题, 比如请求某接口,
超过频率限制, 或对方服务已挂 -- 老李&10.
ping, telnet, dig, route, traceroute, iptables, curl, 基本上可以确定问题了 --
开发要掌握dns的原理, 为啥/etc/hosts 可以绑定域名, /etc/resolv.conf用来干啥, 主要理解dns是怎样工作的 --
如果linux防火墙端口没开,talent是不是也会通?答:
恩 -- 老&13.
用户说你的网站打开太慢,请列出所有可能性,以及排查方法&一、网络问题&&
& 1、临时性&&&&&&
& 检查:ping, mtr 等命令,检查网络状况,DNS等&&&&&&
& 解决:联系机房或视具体情况而定&&
& 2、网络不同或距离太远&&&&&&
& 检查:客户端和机房所在网络情况&&&&&&
& 解决:双线机房或分布式部署,动态DNS,需要考虑成本&&&
& 3、资源加载慢&&&&&&&
& 检查:chrome控制台&&&&&&&
& 解决:CDN,合并请求,压缩页面代码等&二、前端问题&&&
& 1、浏览器太烂&&&
& 2、页面设计不佳&&&&&&&
& 检查:浏览器解析时间,是否DOM节点过多,JS有问题等&&&&&&&
& 解决:优化页面代码&三、服务端问题&&
& 1、服务器状态&&&&&&&
& 检查:负载,CPU, 网络,内存,磁盘空间等使用情况&&&&&&&
& 如果单台服务器性能受限,考虑调整为分布式架构,如nginx转发,DB分库分表等&&&
& 2、PHP响应慢&&&&&&&
& 检查webserver日志中的响应时间&&&&&&&
& 如果服务器整体负载不高,但PHP的数据返回时间过长,在PHP代码中分段输出处理时间&&&&&&&
& 更具环境的不同,可以选择直接输出或是写入日志&&&&&&&
& 如果是高访问量的在线调试,一般选取一定比例记录日志,防止日志过多带来的额外系统开销&&&&&&&
& 逐步缩小范围,定位、优化&&&
& 3、DB响应慢&&&&&&&
& 有分为读取慢和写入慢&&&&&&&&
& 读取慢&&&&&&&
& 检查:慢查询日志;&&&&&&&&&&&&&&&&&
& show processlist 查看当前DB状态,看哪些请求停留较多&&&&&&&&&&&&&&&&&
& top查看mysql进程的开销&&&&&&&&&&&&&&&&&
& 代码中记录SQL和执行时间&&&&&&&
& 解决:&&&&&&&&&&&&&&&&&
& 手动执行可疑SQL(注意排除query cache的影响),用explain,profile等工具分析SQL性能&&&&&&&&&&&&&&&&&
& 再考虑是否优化索引,或者分库分表,或者增加缓存&&&&&&&&
& 写入慢&&&&&&&
& 检查:除读取慢的检查方法外,还有&&&&&&&&&&&&&&&&&
& iostat 检查磁盘IO&&&&&&&&&&&&&&&&&
& 查看mysql binlog的写入速率&&&&&&&
& 解决:增加缓存,分库分表,优化索引,从业务逻辑上考虑减少DB操作,合并写入&&&
& 4、其他&&&&&&&
& 被攻击,webserver进程数受限,甚至内网流量过高等原因,都有可能导致访问缓慢,具体情况具体分析&--
XiangZ&14.
大家说了网络层面的,我说一下应用层面的吧,对于后端程序最靠谱的方法是看日志,因此代码里写日志就非常重要了,我这的后端产品都有全局的日志对象,每条日志记录编号、时间、类型、级别、执行经过时间、内容以及SessionID、请求编号、调用顺序号、访问渠道、用户编号、IP地址等标识请求方的字段,一般开发时的日志级别是Debug级别,线上运行时记录的日志级别是Error级别,可以通过配置指定特定的用户、IP地址的日志级别,比如某用户反映操作出错或相应很慢,排除网络问题后可以对该用户开启Debug级别的日志,通过日志定位问题。有两块日志是公共的,一是接口入口,记录接口的响应时间及未接管异常的错误信息、栈信息,二是统一封装的数据库模块记录的SQL执行日志,记录SQL响应时间及出错信息。
-- 水浸街&15.
问: 线上不开debug有哪些原因呢? 为什么要分两块日志呢?sql出错也可以归到异常的&答:
日志记录本身是要消耗资源的,debug的信息非常多,所以不能开,当然性能允许也可以开。我说的两块日志是公共日志,就是不需要业务模块显式写日志的,实际写还是一个入口的。SQL出错的原因有很多,比如违反唯一性约束,这种情况下还是可控的,称为错误(error)合适一些,而异常则会引起程序流程终止执行,属于更高级别的错误(fault)。&16.
对sql日志更多的应该还是一个审计,有没有异常,有没有慢sql. 要保障数据库的安全和稳定 -- 易元建&17.
对,这是另一个功能,这里再次说一下SQL绑定变量,使用绑定变量除了可以提高效率,还可以保证一个系统的SQL语句的数量是有限的,可以从日志统计出各SQL语句的平均耗时,发现有问题的SQL语句
-- 水浸街&18.
问: sql的error和fatal通过errorno区分?那业务逻辑不就变复杂了吗?每次都得考虑各种code&答:
写日志不需要通过errorno区分,在入口try-catch捕获异常就可以了。 -- 水浸街&19.
有个记log的形式叫cross
finger。debug类型日志会先放内存里不落地当出现error以上日志就会把所有debug(包括之前未记录)也落地。这样可以更了解出错时的情况,减少让用户去重现的次数
-- twin&20.
log strace tcpdump systemtap - 李奇&21.
出错比请求慢定位方便。取出URL,手动请求,根据返回一点点下去,一般会很容易发现问题在哪。--7 Days&22.
重点还是要log打的好 & 李秋林23.
java,机器挂了有报警,业务出错有日志,有专门监控异常的系统定期分析异常原因,自己也有业务api工具线上出问题先看接口是否异常,然后再跟踪日志 &
hello,zhuli&附加:问:命名空间的好处是什么呢?
& 李博&答:依赖管理和自动加载在下划线时代就有了
只是没现在这么成熟。 命名空间能做的,下划线基本都能做。要说好处
我看到的是开源大佬不再顾忌长类名的问题,通过命名空间设计出更优秀合理的架构symfony
doctrine 都是用了命名空间后 类名变长 分层变细的例子 &&twin&问:我们还在使用5.2.*这种版本的php。没有跟得很近。大家是否遇到什么强需求,会迫使或说主动使用更高版本的php?
& 李博&答:一般也可以不升级,唯一担心就是将来很多开源代码都支持很多新特性,你老版本不能用,就会郁闷哦
& 黑夜路人&答:5.2太老了,PHP优秀的开源类库,大多用上了命名空间,要求最低5.3.3
【今日话题】说几个自己掌握的php的技巧
-- 黑夜路人
list($a,$b) = array($b,$a) -- 姚文强&2.
list还有个奇怪的用法,可以忽略某一项,有go的下划线的感觉 list(, $a, $b) = array(1, 2, 3); --
autoload是最常用的了,不用象其他语言去写import,include -- twin&4.
autoload性能比较差 -- 列旭松&5.
相比这点性能太小了,到类非常多的时候,可以加一层缓存,象symfony的autoload就有缓存功能了,不用每次去查文件 -- twin&6.
我觉得根本不必关心这种末梢问题 鸡肋 食之无味 -- 吴子棋&7.
问: 那么你们怎么优化处理autoload呢?答:
PSR-0,PSR-4都是autoload的标准, 里面有两个做法,一个是预先生成classmap,一个是通过类前缀去查找类 --
按需加载我一般都会用到spl_autoload_register调试-调用栈:如果知道代码的结束点,可在代码结束点插入dump_trace.
不过这个不能实现调用栈的递归打印。如果不知道代码的结束点,一般是二分三分四分查找,插入debugging(__FILE__ . __LINE__)
确定结束点,。如果可以修改服务器,还是重量级的xdebug最爽,不过xhprof查看调试栈比xdebug要方便得多,因为xdebug还需要借助wincacheview/kcachewind(记不住名)去分析php的执行记录,做性能分析的话,也同样如此。查看类路径与定义的话,可以用反射:ReflectionClass::export();
-- hilojack&9.
debug_backtrace的是数组形式,不够精简。我直接用异常$e-&
getTraceAsString,封装到一个dTrace函数中自己调用,在里面加入时间,还可以查看每一段的执行时间,很方便。 --
hilojack&dTrace函数:&&10.
php有个配置,我说一个简单的,非常好用,叫做auto-prepend-file,能够在所有的php文件里自动加上一个其他文件 --
黑夜路人&回:
这个功能貌似可以用于作访问控制,一些文件不允许通过http直接访问的,以前我都是include一个小文件,有这个方法方便多了 --
水浸街&回:
通过auto-append-file可以引入phpids监控项目是否有安全问题 -- 唐毅&12.
交换变量$a=4;$b=5; list($b,$a) = array($a,$b); -- 梦想旅程13.
5.3或以前版本序列化json会对汉字作unicode编码,这会功能没什么作用还会增加调用者的工作量,我是在服务端对所有数据作urlencode之后再作json序列化,然后再作urldecode后返回,不知这个算不算技巧,从5.4开始就不用这么麻烦了
-- 水浸街&14.
向模板传递变量的时候可以用compact函数生成数组,而不必提前把数据组织成数组形式 & L1n&答:我们在model这层这么做的
& 崔玉松答:compact太麻烦了,得指定变量名,
用 get_defined_vars 更方便 & twin
【今日话题】程序员如何为创业做准备和如何创业?
我觉得程序员需要除了技术好,也要做一些有价值的事情,扩充自己的视野和爱好 -- 黑夜路人&2.
应该多了解市场和产品 还好 人人都可以是产品经理~. 转变思维 从执行任务到为别人服务 -- 刑雨&3.
找到风投很重要,产品要靠谱,屌丝创业,去中心化很重要 -- 悟空&4.
转变思维或者思维扩展,可以作为一个话题了,每天只是写}

我要回帖

更多关于 企业微信自动打卡设置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信