置顶 讨论
为了便于用户理解,推出部分教程支持视频 选择有视频的课程,即可在教程文章中看到视频 登录后才可以观看哦
2年前 喜欢(5) 浏览(3546) 评论(0)
讨论
在提问的时候,适当使用一些小技巧,会让老师快速get到你的问题在哪里,这样会使问题更快被解答喔~ 提问技巧 标题:简洁、易懂,完整表达主题;避免无意义、模糊、口语化标题。 提问内容: 客观描述问题:中性客观描述问题,保证问题的可读性,避免过于简单或模糊; 提供编程环境:问题描述注明编程环境信息,包括操作系统、语言、使用的软件版本等; 输出报错信息:过程中出现异常的话,需提供重现异常的步骤; 输出错误信息:编码过程中的技术问题出现错误应该输出日志或控制台的全部信息,以便更好排查错误; 注明课程时间:针对课程的问题,请在问题描述中注明出现时间,便于及时解答; 排版规范合理:注意文本,代码,标点、语法使用规范,排版合理。 提倡有偿问答:对于有能力的学者,可以提供有偿提问,勾引大神们快速响应(提问者自愿为主,答题者不可强求) 注意: 不要在提问内容框里长篇粘入代码,只需粘出关键代码并加以描述即可 标题不等于提问内容,标题应简明扼要,提问内容应详细描述,二者尽量不要重复。 提问尽量以 PHP/Yii2.0 的内容为主。 千万不要贴一段业务报错代码,问为什么这里报错了,代码调试可以帮您解决大部分的问题。 学员和老师要互相尊重,尊重是有效解决问题的前提,对于人身攻击的问题管理员是有权隐藏的哦~ 说完了如何提问,那么大!神!般!的你在问答区看到了其他小伙伴提出的问题,想要回答时需要注意些什么呢?^_^ 回答建议: 回答保证内容的准确性,不模糊,能实际解决提问者疑问; 回答保证内容通俗易懂,语句通顺、有条理,排版利于阅读; 回答保证内容全面,避免过于简单,可对回答做详细阐释、扩展和引导; 回答保证内容与问题相关,避免所问非所答和过多的重复内容; 添加图片或代码应附上说明,代码用对应代码块包裹并合理排版; 核心思想:要持着“授人以鱼不如授人以渔”的心来回答提问者的问题~
2年前 喜欢(3) 浏览(3743) 评论(4)
讨论
简述php的垃圾收集机制 答案:php中的变量存储在变量容器zval中,zval中除了存储变量类型和值外,还有is_ref和refcount字段。refcount表示指向变量的元素个数,is_ref表示变量是否有别名。如果refcount为0时,就回收该变量容器。如果一个zval的refcount减1之后大于0,它就会进入垃圾缓冲区。当缓冲区达到最大值后,回收算循环遍历zval,判断其是否为垃圾,并进行释放处理。 PHP的内核组成 php总共包括3个模块:php内核,zend引擎,PHP扩展层 1.1 php内核:用于处理请求,文件流,错误处理等相关处理。 1.2. zend引擎:将源文件转换成机器语言,然后在zend 虚拟机上运行 zend 整体由两个部分组成: 编译器:负责将php代码编译为可执行的opcodes(中间码/字节码) 执行器:负责将执行编译器输出的opcodes,也就是执行php脚本中编写的代码逻辑 1.3.扩展 扩展层是一组函数、类库和流,php使用它们来执行一些特定的操作,比如安装php_openssl扩展来使用 open ssl函数 php性能优化 APC与Opcache都是字节码缓存也就是,PHP在被编译的时候,首先会把php代码转换为字节码,字节码然后被执行。 php文件第二次执行时,同样还是会重新转换为字节码,但是很多时候,文件内容几乎是一样的,比如静态HTML文件,生成后内容许久都不会改变,用户访问请求直接由服务器读取响应给客户端浏览器。都不用经过PHP进行解析构建了。 PHP APC提供两种缓存功能,即缓存Opcode(目标文件),我们称之为apc_compiler_cache。同时它还提供一些接口用于PHP开发人员将用户数据驻留在内存中,我们称之为apc_user_cache。 内存中的字节码数据,可以直接缓存进行二次编译。这样程序就会快一些,cpu的消耗也少了。 (这里字节码 就是 opcode) cgi、fast-cgi协议 cgi的历史:早期的webserver只处理html等静态文件,但是随着技术的发展,出现了像php等动态语言。 webserver处理不了了,怎么办呢?那就交给php解释器来处理吧! 交给php解释器处理很好,但是,php解释器如何与webserver进行通信呢? 为了解决不同的语言解释器(如php、python解释器)与webserver的通信,于是出现了cgi协议。只要你按照cgi协议去编写程序,就能实现语言解释器与webserver的通信。如php-cgi程序。 fast-cgi的改进 有了cgi协议,解决了php解释器与webserver通信的问题,webserver终于可以处理动态语言了。但是,webserver每收到一个请求,都会去fork一个cgi进程,请求结束再kill掉这个进程。这样有10000个请求,就需要fork、kill php-cgi进程10000次。 有没有发现很浪费资源?于是,出现了cgi的改良版本,fast-cgi。fast-cgi每次处理完请求后,不会kill掉这个进程,而是保留这个进程,使这个进程可以一次处理多个请求。这样每次就不用重新fork一个进程了,大大提高了效率。 PHP-FPM管理的方式是一个master主进程,多个pool进程池,一个pool进程池多个worker子进程。其中每个进程池监听一个socket php-fpm是什么 php-fpm即php-Fastcgi Process Manager. php-fpm是 FastCGI 的实现,并提供了进程管理的功能。 进程包含 master 进程和 worker 进程两种进程。 master 进程只有一个,负责监听端口,接收来自 Web Server 的请求,而 worker 进程则一般有多个(具体数量根据实际需要配置),每个进程内部都嵌入了一个 PHP 解释器,是 PHP 代码真正执行的地方。 php-fpm 与 swoole 之间的区别 PHP-FPM 1.Master 主进程 / Worker 多进程模式。 2.启动 Master,通过 FastCGI 协议监听来自 Nginx 传输的请求。 3.每个 Worker 进程只对应一个连接,用于执行完整的 PHP 代码。 4.PHP 代码执行完毕,占用的内存会全部销毁,下一次请求需要重新再进行初始化等各种繁琐的操作。 5.只用于 HTTP Server。 Swoole 1.Master 主进程(由多个 Reactor 线程组成)/ Worker 多进程(或多线程)模式 2.启动 Master,初始化 PHP 代码,由 Reactor 监听 Socket 句柄的事件变化。 3.Reactor 主线程负责子多线程的均衡问题,Manager 进程管理 Worker 多进程,包括 TaskWorker 的进程。 4.每个 Worker 接受来自 Reactor 的请求,只需要执行回调函数部分的 PHP 代码。 5.只在 Master 启动时执行一遍 PHP 初始化代码,Master 进入监听状态,并不会结束进程。 6.不仅可以用于 HTTP Server,还可以建立 TCP 连接、WebSocket 连接。 PHP7的新特性?重点 性能提升 ---- 1、变量存储字节减小,减少内存占用,提升变量操作速度 2、改善数组结构,数组元素和hash映射表被分配在同一块内存里,降低了内存占用、提升了 cpu 缓存命中率 3、改进了函数的调用机制,通过优化参数传递的环节,减少了一些指令,提高执行效率 对于大流量的网站,采用什么样的方法来解决访问量问题? 1.负载均衡(分流)微服务架构(服务拆分)读写分离(数据库主从) 2.静态页面 缓存 3.图片服务器分离,cdn加速 4.开启opcache,提高代码执行效率 1、HTML静态化 效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的 网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。 2、图片服务器分离 把图片单独存储,尽量减少图片等大流量的开销,可以放在一些相关的平台上,如七牛 3、数据库集群和库表散列及缓存 数据库的并发连接为100,一台数据库远远不够,可以从读写分离、主从复制,数据库集群方面来着手。另外尽量减少数据库的访问,可以使用缓存数据库如memcache、redis。 4、cdn加速 CDN加速意思就是在用户和我们的服务器之间加一个缓存机制,通过这个缓存机制动态获取IP地址根据地理位置,让用户到最近的服务器访问静态资源。 5、负载均衡: Apache的最大并发连接为1500,只能增加服务器,可以从硬件上着手,如F5服务器。当然硬件的成本比较高,我们往往从软件方面着手。 PHP限流方案 1.令牌桶限流方案(nginx可以实现,hyperf框架也支持) 算法:以固定的速度生产令牌,设置令牌上限。每个请求获取令牌token即可正常访问,获取不到即为拒绝访问。 比如每秒产生5个,桶令牌上限为20个,每次请求获取并消耗1个令牌,获取不到则拒绝访问。
1年前 喜欢(1) 浏览(624) 评论(0)
讨论
先问是不是,再问为什么。 难道美国的程序员就不加班吗?他们就一天八小时工作,还想来就来,想走就走?非工作时间完全找不到人?还有什么食物饮料都免费提供? 让我来告诉你真实的情况吧,还...真是这样的。 加班文化应该是中美两地最明显的不同了,形成这种差异的原因不是一两句可以讲清楚的。我在两个国家都工作过,也在不同岗位工作过,所以就尽量从不同角度来简要说一下。 国内程序员加班严重,首先问题不在程序员这个群体。 产品层面拍脑袋决策多 产品层面,拍脑袋决策多,美其名曰:互联网思维、小步快跑、试错思维,其实是没想清楚,反正我就需求一提,技术团队来做,上线后成功了我是产品天才,失败了也没啥坏处,找个借口说什么“互联网市场变化太快”也能搪塞过去,或者找个新项目,继续画大饼。 国内的产品经理实在是太多了,很多还是刚毕业的小鲜肉,没有一点经验积累,凭借天马行空的想象力,提一个需求,就能让一帮技术专家为之操劳好几个月去实现,这简直是不可思议的。即使产品经理很厉害,但人数一多,每个人都要业绩,都拼命想点子、提需求,技术团队怎么能招架得住那么多需求呢。于是就会这些现象:     - 节假日来了,我们上一个活动,或者节日小彩蛋功能。     - 竞品上了一个 xx 功能,看起来不错,我们也抓紧上一个。     - 10个产品经理同时跟你说:这个需求我跟老板对过了,xx 之前必须上线。 产品经理没有想清楚某个功能的价值,或者带来的收益不痛不痒,而技术团队则需要为此付出巨大的心血,也就是加班。当然这也不一定是产品经理的错,国内公司,老板的指令太多了,不说了,你懂的。 在美国这边,产品经理大多是行业经验非常丰富的人,要么是从工程师转过来,要么是从多年的商业领域经历然后读个 MBA转过来。上线一个功能,经过严谨的理论推演、多轮前期调研、科学的 AB test,从提出 idea 到最终用户看到更新,经常耗时半年或一年。很多不成功的 idea 还没面市,就因为数据不好而“胎死腹中”。这样一方面提高了产品需求的质量,另一方面也给技术团队足够多的时间来设计和实现一个可持续发展的架构。 技术团队话语权低 管理层在做决策时,往往更重视产品更新迭代,而忽视技术的建设。 比如说技术团队有100个小时,老板可能会把90小时都投入到实现产品功能,给技术优化、修补技术债务。于是就会出现技术实现非常粗糙的情况,举个栗子,给你一周时间,实现一个 IM 功能,你还会考虑什么模块化、可维护性、性能优化之类的吗?当然是怎么快怎么来,百度一下有没有别人实现过的代码,ctrl+v / ctrl+c,一点运行,诶,跑通了,上线。 所以国内很多程序员看别人的代码,感觉都是一团 shit,完全没法维护,干脆自己重写一个。 技术老大能跑到老板面前说“我们先把产品需求停一停,让我们的技术团队好好地优化一下基础设施吧。”吗?只要他不是傻子,都不会这样说。 话语权低还体现在,对产品几乎没有决策权,甚至不能质疑产品决策,提反对意见,总会被产品经理各种理由挡回来,产品经理有一句话终结争论的尚方宝剑:这是老板要做的。 久而久之,技术债务越堆越高,bug 越来越多,程序员不加班,谁加班? 而美国公司的现象是,技术话语权非常高,一个没想清楚的产品需求,能被技术团队直接打回去。同时,技术团队可以自主地花很多时间在技术优化上面。产品不能按时上线?经理说:没关系,延后,按照最优的技术方案来推进。有时候你想赶紧上线,提交一段粗制滥造的代码,会被同事鄙视死,被老板骂死。 每个季度最后一个月,专门抽出精力,来弥补技术债务,产品需求放一边先。 在这样的环境下,短期看起来效率低,但长期是最高效的。国内是“欲速侧不达”,美国是“慢工出细活”。 技术基础设施差 知乎上有一个比较热门的讨论:腾讯的技术建设是否落后? 这不但是腾讯的问题,实际上绝大部分公司的技术基础设施都非常差。 有多少个公司能养一个专门的 Infra 团队?有多少个技术团队能专门成立一个小团队,进行 Infra 优化?即使有,有多少个公司能保证 Infra 团队的成果能在全公司推行? 我相信能做到这样的公司是凤毛麟角的。 中小公司不必说,在这样高度竞争环境下,哪有财力养一个不能直接带来 KPI 提升的团队,即使有钱,也没时间搞优化。 而大公司呢,即使腾讯这样的体量,有一个 TEG 事业群做基础设施建设。但是现实情况是,依然没有全公司通用的内部工具,各个团队依然在重复造轮子。阿里算是做的很好的,前几年开始推行的大中台战略取得了显著的成果,解放了各个产品部门的生产力。 计算机程序这种东西,一个人写和一群人写,几千个用户使用和几千万用户使用,是完全不同的概念。没有强大的基础设施建设,技术团队越壮大,效率越低,用户数越多,bug 越多。出来混总是要还的,今天没有人关注基础设施,未来就会又无数个程序员为此加班。 而说回美国这边,专门的 Infra 团队几乎是每个公司的标配了。这也是工程师文化的结果,创始人、高管团队一定有很强的技术背景,走过了很多弯路,所以非常重视基础设施建设这种“重要而不紧急”的事情。 畸形的职场文化 最后再来说说文化的差异。 美国人非常注重个人和家庭,牺牲自己的时间来给公司加班,这是不可能的。一到下班时间准点走,非上班时间完全不查邮件。很多公司入职培训就专门强调了怎么平衡工作和生活,其实就是说:下班时间就是你的时间,你有权利不处理公司事务。 反观国内,不知道从什么时候起,加班就是约定俗成的。还出现了看似很有道理的人生经验,比如“年轻人就应该多拼一下”,“加班能学到更多东西,对未来也有好处”。 加班,竟然成了光荣的、可以拿来攀比的现象,比如说加班到凌晨一两点,拍个照,发个朋友圈,收到老板的点赞很开心。而管理者呢,还就吃这一套,谁加班多、会来事儿,考核的时候就更有好处。 在这种加班氛围下,甚至还出现了“伪加班”。早上十点到公司,上个厕所、看会儿新闻、刷刷朋友圈,就到十一点半了,什么工作也没做,然后准备吃午饭;饭后逛一逛、睡个觉,又到2点上班时间了,写会儿代码、刷刷知乎,一下午又过去了,很多公司有免费晚餐,吃完饭回来7点左右,再写写代码,磨到10点。哦耶,又是充实的一天呢,发个朋友圈给老板知道。 其实一天有效工作时间还不够8小时,但就是“加班”了。 综上,大概就是国内加班严重的原因。 我觉得这也是某个时代特有的现象,谁都没有错,谁也没有办法改变这种情况。在国内这样一个高度竞争的环境下,公司为了生存必须跑快点,个人为了发展必须多做事,毕竟你不做就会有千千万万的人来抢。等到中国真的发展到美国这样的发达程度,生存的减小了,才有资格谈更好的生活品质。
2年前 喜欢(1) 浏览(2175) 评论(0)
讨论
更新 2018年6月10日发布了Yii框架3.0.0 更新的第一个alfa版本 Yii 3.0中的新功能 包 “ezyang/htmlpurifier” 已经成为可选项,默认情况下不会安装 移除 Yii 自动加载器以支持 Composer 的 PSR-4 实现 删除了特定于 HHVM 的代码 在 ApcCache 中删除了 APC 支持, APCu 像以前一样工作 当覆盖默认值时,会更改yii\grid\DataColumn :: $filterInputOptions的行为 将屏蔽的输入字段小部件移动到单独的扩展https://github.com/yiisoft/yii2-maskedinput 邮件消息组成提取到单独的类,yii\mail\Composer,可以通过yii\mail\BaseMailer :: $composer获得设置 将yii\base\InvalidParamException重命名为yii\base\InvalidArgumentException 更新了未安装 intl 扩展时使用的后备日期格式,以匹配最新 ICU 版本的默认值 删除了 XCache 和 Zend 数据缓存支持作为缓存后端 更新了yii\widgets\ActiveField :: hint()方法签名以匹配label() 删除了yii\base\Object :: className(),支持本机PHP语法:: class,它不会触发自动加载 PHP的最低要求版本现在为7.1 所有框架小部件中run()方法的一致行为。现在返回结果以获得更好的可扩展性 yii\web\RequestParserInterface :: parse()的签名已更改为接受yii\web\Requestinstance作为唯一参数 删除了 CUBRID 数据库支持 删除了 PJAX 支持 包 'captcha','jquery','rest','mssql' 和 'oracle' 已被提取到扩展中 删除了在 2.0.x 中标记为已弃用的方法 Yii 3.0中的增强功能 使用random_int()而不是mt_rand()来生成加密安全的伪随机整数 对象yii\helpers\ReplaceArrayValue,yii\helpers\UnsetArrayValue现在支持在使用var_export()函数导出后恢复 添加了yii\web\AssetConverter::$isOutdatedCallback,允许自定义检查过时的资产转换结果 在yii\serialize\* 命名空间下添加了序列化抽象层 增加了对 PSR-3 'Logger' 支持 优化了yii\filters\AccessController处理访问规则 将$checkAjax参数添加到方法yii\web\Controller::redirect(),该方法控制 AJAX 和 PJAX 请求中的重定向 邮件视图呈现封装到yii\mail\Template类中,允许隔离呈现并通过视图内的$this-> context->message 访问 yii\mail\MessageInterface 实例 CAPTCHA渲染逻辑被提取到yii\captcha\DriverInterface中,该实例可通过 yii\captcha\CaptchaAction::$driver 字段获得 yii\web\Request :: getBodyParams() 在无效或缺失 'Content-Type' 头时,生成 415 “Unsupported Media Type” 错误 yii\web\Request :: getBodyParams() 的结果现在包括上传的文件 已上载的文件检索方法已从 yii\http\UploadedFile 移至 yii\web\Request 添加了对 PSR-7 HTTP Message 的支持 根据 PSR-16 “Simple Cache” 规范重构的缓存实现 相对与 Yii2 改动 Yii3这个版本改动相对于Yii2是非常的巨大,包括以下特性: Yii3需要PHP的最低版本是 7.1 并且 HHVM 不再被支持. Yii3 将采用新的版本规则,即 semver since 3.0规则. 不再使用Subtree-split 模式. 放弃使用 Yii自己的 autoloader 改为用 Composer 的autoloader. 框架的结构也进行了大量的调整,分出来好几个包,包括下面这些: yiisoft/yii-core - 这个是Yii Framework . Yii 2.0 的开发还是在 yiisoft/yii2 仓库. Yii2 只支持Bug 和安全补丁,新特性和加强的特性不在被接收。 yiisoft/di - PSR-11适应依赖注入的 container. yiisoft/log - PSR-3 适应 Psr-3的 logging library. yiisoft/cache - PSR-16 适应 psr-16的 caching library. yiisoft/db - 数据库的 abstraction and QueryBuilder. yiisoft/db-mysql - MySQL 的db扩展. yiisoft/db-pgsql - PostgreSQL 的db扩展. yiisoft/db-sqlite - SQLite 的db扩展. yiisoft/db-mssql - MSSQL 的db扩展. yiisoft/db-oracle - Oracle 的db扩展. yiisoft/active-record - ActiveRecord 库. yiisoft/rbac - RBAC 库. yiisoft/view - 视图渲染库. yiisoft/yii-web - Web 扩展. yiisoft/yii-rest - REST API 扩展. yiisoft/yii-console - console 扩展. yiisoft/yii-jquery - JQuery 扩展. yiisoft/yii-bootstrap3 - Bootstrap 3 扩展. yiisoft/yii-bootstrap4 - Bootstrap 4 扩展. yiisoft/yii-dataview - data displaying 扩展. yiisoft/yii-masked-input - Masked input field widget. yiisoft/yii-captcha - CAPTCHA 扩展. 更多的 PSR 兼容: PSR-3, PSR-11, PSR-16 框架核心只需要虚拟PSR实现包,您可以自由选择日志记录器和缓存实现。 更多PSR实现的兼容性预计将在稍后实现。 从Application and Module 删除ServiceLocator ,采用 container来替代. 数据库的扩展被分到几个composer包里面. 删除PJAX 的支持. yiisoft/yii2-composer 这个包不再被使用. 不再提供高级的项目模板. 项目模板也有所变化 yiisoft/yii-project-template - 工程模板; yiisoft/yii-base-web - web的基础应用模板. 我们将为您提供Yii框架中所有最新更改的最新信息。
2年前 喜欢(1) 浏览(8379) 评论(2)
讨论
说明 课程简介 素材及源码 纠错 课程简介 本课程主要内容是如何通过使用 yii2 框架,快速打造个人博客系统。 博客系统主要分两个部分: 后台管理系统(backend) 相关内容:yii2-admin扩展, RBAC基于角色的权限管理,基于Markdown的富文本编辑器,上传图片到七牛,Gii生成代码,自定义Gii模版 前台内容展示(frontend) 相关内容:挂件的应用(widget),博客首页界面排版,文章内容呈现,博客时间史 素材及源码 为了方便大家学习 yii2 相关的知识并应用于实践中,本次教程会提供学习素材。什么是素材呢?就是基于 hyii2 后台管理系统添加了学习教程时所需要的样式文件,js文件,界面排版等。让大家免去在学习后端框架的过程中,去写前端的页面和js。更加精确的掌握 yii2 框架的实战应用。通过教程的学习可以开发出相应的一套完整的博客系统。详情查看 应用搭建 一章 为了保证课程的高品质,我们需要对素材进行收费,购买链接。购买后请联系 391430388 获取素材和源码 前台界面预览:http://hyblog.itdocs.org 管理后台地址:http://hyblog-admin.itdocs.org 账户:test 密码:123456 作者会提供完整的开发素材和成品源码,希望不要借此传播,尊重原创,万分感谢。 纠错 教程中遇到的问题,可以先自己尝试解决,培养自身的问题排查能力是一个程序员基本的要求。 本地环境问题(本站统一环境教程:PHP开发环境部署)。 代码书写错误,引起的报错。 搜索本教程错误集锦(开发中) 若仍不能解决,请联系 QQ:391430388 当然人无完人,也许教程中也存在一些不可避免的疏漏,如果发现可以联系作者,先行致谢!
精华贴
2年前 喜欢(1) 浏览(3824) 评论(2)
社区公告
[公告] Yii中文网为优化用户体验进行大版本升级,老版网站会维持一段时间,可以点击顶部"旧版"链接访问旧版网站。
沟通交流

:492175201(技术1群)

:183620600(技术2群)

:291010569(技术3群)

订阅号 | 更多精彩内容推送
本周推荐