
211230 领导力阶梯
每个人都会有都会达到无法再晋级的岗位,企业会因此而落入无法成长的陷阱。 职位 管理方式 技能 时间分配 价值实现 岗位转型 职位挑战 个人贡献者 管理自我 产品...
每个人都会有都会达到无法再晋级的岗位,企业会因此而落入无法成长的陷阱。 职位 管理方式 技能 时间分配 价值实现 岗位转型 职位挑战 个人贡献者 管理自我 产品...
公司 技术委员会职责 委员会成立条件,及背景 具体价值体现 顶层架构设计真正落地 识别新赛道,布局新技术 功过是非评定 民生银行技术委员会 开发组织→多个板块→...
全球影视站No.1送顶级UHD会员,所有区域高清片源免费看
善于演讲的人 在相同技艺的情况下,会得到更多的机会,从此刻开始。
国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。 stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版 gith...
本文是我逛贴吧无意间看到的神贴的一部分,原文:http://tieba.baidu.com/p/3559962721 这里只转载关于炒股部分的一些概念: 首先,...
博客主题换回inove,还是觉得inove比较适合Coder风格的主题。换回主题后觉得得配上英文才够b格,于是乎遥想用什么slogn来装b,脑海里奔出来的头一个...
一般Windows用户在使用Excel处理数据文件时都不会关心文件的编码,因为Excel支持Windows上默认使用的简体中文编码GB2312,但使用MAC的用...
Hey doyawannaluv, Thanks for the question. The following article provides the lo...
DNS 加密代理——這玩意兒應對 DNS 污染很有用。 它在本地建立一個 DNS 伺服器,然後當有解析請求時,將請求通過加密的 TCP 信道傳遞給 OpenDN...
1、实现目标 想对电脑屏幕每1秒钟(时间可以改动)截图一次,保存截图到电脑指定位置,可指定图片格式(*.jpg *.bmp *.gif) 同时能规...
在电脑领域,彩蛋通常是指制作者隐藏在产品中的、用于愉悦用户的隐秘物。包括文字、图片、声音或者某些小变化。通常在用户进行了某些特定的操作时出现。例如当用户执行某些...
司的一个合伙人,也是公司的产品经理/人资经理/产品设计师,总喜欢捉弄我们。比如,在万圣节派对上,你能看到一个跟我本人一样大小的我的相片,那是她从我的Facebo...
半年没进过星巴克,我的金星卡的星星都清零了,于是乎我终于踏进了星巴克,作为一个不常来的人,怎么才能显得常来呢?尤其是作为一个手持星巴克金卡的人,要逼格略高又不落...
关于百度分享: 恩,很糟糕,很遭罪的设计,你可以理解百度内部人员都不会用这么烂得东西。 http://huodong.baidu.com/zhongzi/ind...
每个人都会有都会达到无法再晋级的岗位,企业会因此而落入无法成长的陷阱。
职位 | 管理方式 | 技能 | 时间分配 | 价值实现 | 岗位转型 | 职位挑战 |
个人贡献者 | 管理自我 | 产品、运营、开发等 | 1. 按时交付 | 1. 高绩效表现 | ||
一线经理 | 管理他人 | 1. 工作计划 2. 知人善用 3. 分配任务 4. 激励员工 5. 教练辅导 6. 绩效评估 | 1. 部分时间用在管理上 | 1. 重视管理工作而非亲力亲为 2. 通过他人,完成任务 | 1. 岗位说明&培训 2. 确认困难 3. 反馈&教练辅导 | 1. 视下属提出问题为障碍 2. 补救下属工作失误,而非教会如何正确去完成挑战性工作 3. 拒绝与下属分享成功,逃避下属的问题和失败 4. 没有给予足够的支持和建立员工的文化价值观 |
部门总监 | 管理经理人员 | 1. 选拔人才担任一线经理为一线经理 2. 分配管理工作 3. 教练辅导 4. 评估一线经理的进步 5. 超越部门,全局性考虑问题,有效协作 | 1. 主要精力用于管理工作 | 1. 管理工作比个人贡献重要 2. 重视其他部门的价值与公司的整体利益 | 1. 工作效率提高程度 2. 教练辅导的频率和效果 3. 新任一线经理成功率 4. 工作质量提高幅度 5. 工作中和新领域的团队合作 6. 为其他部门输送一线经理 | |
事业部副总经理 | 管理职能部门 | 1. 新的、高超的沟通技巧 2. 制定业务战略实施计划 3. 与其他部门写作,同时争夺资源 | 1. 花时间学习本专业以外的知识 | 1. 大局意识,长远思考 2. 开阔视野,重视未知领域 | 1. 成熟度 2. 拥有战略思维 3. 制定职能战略 4. 管理职能部门 5. 综合学习能力 | |
事业部总经理 | 管理事业部 | 1. 制定和业务战略规划 2. 管理不同的职能部门 3. 兼顾各部门利益、顺畅沟通 4. 与各方面的人共同工作 5. 兼顾长远目标与近期目标 6. 对支持性部门的欣赏 | 1. 花更多的时间分析、思考和沟通 | 1. 从盈利的角度考虑问题 2. 从长远的角度考虑问题 | 1. 协同三角模型: 人员能力(经验,思维,视角,技能)→组织能力(工作设计,工作流程,权利配置,人员配置,组织架构)→战略方向 循环协同 2. 评估与协调工作 3. 提高工作透明度 4. 开拓眼界和知识 5. 分析时长竞争优势 | 1. 缺乏激励的沟通 2. 没有能力组织强大团队 3. 没有掌握业务赚钱技巧 4. 时间管理很难平衡 |
集团高管 | 管理业务群 | 1. 评估财务预算与人员战略规划 2. 教练辅导事业部经理 3. 管理新的业务 4. 评估业务的投资组合策略 5. 冷静客观地评估管理的资源和核心能力 | 1. 花时间学习本专业以外的知识 | 1. 大局事业,长远思考 2. 开阔视野,重视未知领域 | ||
首席执行 | 管理集团 | 1. 善于平衡短期和长期利益,实现可持续发展 2. 决定公司发展方向 3. 确保执行到位 4. 管理全球化背景下的公司 5. 培育公司软实力,激发全体员工的潜能 | 1. 不能忙于外部应酬忽视公司内部管理 2. 要在公司软实力建设方面投入时间 | 1. 推动公司渐进的变革和转型 2. 长期与短期之间寻找平衡点并有效执行 3. 保持与董事会密切沟通与协作倾听 4. 倾听各利益有关意见 | 领导力: 1. 挑战平衡短长期利益 2. 设定公司发展方向 3. 战略执行到位 4. 管理全球化背景下的公司培育公司软实力 工作理念转变: 1. 耐心等待循序渐进的转型 2. 如何听取董事会意见 3. 善于提问题,听取意见和分享 | |
公司 | 技术委员会职责 | 委员会成立条件,及背景 | 具体价值体现 | 顶层架构设计真正落地 | 识别新赛道,布局新技术 | 功过是非评定 |
---|---|---|---|---|---|---|
民生银行技术委员会 | 开发组织→多个板块→单元体,委员会是最高层的,板块会有1-2个专家,单元有资深的技术经理,形成 多层架构,分别进行 方案设计,方案评审,架构规划工作 | 技术架构转型,应用架构转型。需要架构层次化的组织来推送,一方面是未了横向打通,协调;一方面执行过程中需要有人出谋划策,重大项目有人把关和评审 | 下沉机制,共同规划形成白皮书,让每一个程序员清楚的了解架构是怎么规划的;架构下沉,无论是技术管理中心还是各个板块都要轮动,深入核心项目做下沉,写代码 | 组织内部实现创新。板块那没有任何行政机构,所有人都是技术维度。创新机制是板块自驱,技术专家起到年初规划同频,并将更多的创新和想法释放板块,单元。必要时告知什么东西不合适。 | ||
蚂蚁金服技术委员会 | BU+领域技术负责人 形成委员会,下设多个工作小组, 包含架构组织小组,同时配备团队,主要工作项:新技术布局,技术规划落地,技术文化建设 | 组织强控模式不适用,成立技术委员会,把关键同学拉到一起,共同未三个顶层设计责任 | 3-4年有一个重大架构升级,技术委员会对顶层设计后,分解架构规划来满足战役达到想要的目标 | 中台能力需要沉淀,包含标准统一,数据统一,工程平台统一。过程中因为多业务之间没有达成共识,技术委员会参与解决,确保规划顺利落地。 工程师文化,代码是工程师重要的名片,晋升的同学需要把代码晒出来,发出决议后团队就往下落地实行 | 新技术:通过市面上成熟的新技术改造成产品,引领行业。举例 区块链,会颠覆金融行业,其实也可以是一个分布式数据库,提前卡位,目前专利是最多的 | 技术委员会是培养很多人才,让技术人才快速成长的组织,关注到项目是否赚钱,是否做到了架构转型等 |
VIPKID技术委员会 | 内部职级晋升评审,技术影响力输出。技术委员会完成现在有组织架构没有完成的使命 | 技术晋升呼声,中立的机构做评审 | 不负责技术架构的制定,对技术架构宣传、落地做推动作用 | 做技术储备判断,语音识别、语音评测、会议测评等技术准备,在大周期上讨论哪些东西适合中台化,在大的方向上起到判断的作用 | 工程师组织架构,对自己工作的热爱,更多的是发光、发热贡献能量的过程,对团队的热爱会让他自动的把事情做好 | |
OPPO技术委员会 | 形成是各业务线技术负责人。整个技术委员会的定位是形式CTO职能。CTO需要平衡业务和平台之间的关系,既不冲击产品持续迭代发展,又能够在平台规划上推动,完善技术基础设施建设 | 业务发展块,有多样的产品线,相对独立又需要拉通协作;具备成熟的资深专家团队可以一起讨论。早期是多项目执行、沟通。现在偏向于规划落地和关键事项决策相对务虚的事项 | 比较强调协调拉通作用,明确长期意义和价值、短期目标,打法,并确定怎么循序渐进的推动,是技术负责人,平台主要负责人充分讨论对齐决策协力推动完成。(两地三中心的实现以及演练) | 规范定制在技术委员会里,在规范形成的过程中解决过程问题,落地的时候水到渠成 | 存在务虚会,问题都在技术委员会上讨论解决。当讨论内容偏大偏长,会明确讨论话题,安排专人以小组轮换的形式承接,做初步预研、竞品调查、整理讨论的输入信息,形成系列可讨论的问题,找到技术强领域相关的人一起讨论,充分研究事情的潜在发展可能 | 以终为始,思考技术委员会成功的样子,来指引确认职能和持续改进策略,如果暂时做不到,想清楚继续改进。 |
小米技术委员会
第一、技术委员会最重要的意义就在于,我们在业务管理之外,增加技术职能的管理。我们将建立和完善一整套技术级别的评定,让优秀的技术天才专注技术领域,不仅有获得感,还拥有成就感,小米的技术根基也会变得更加踏实。 第二、我们将持续加大对技术的研发投入。我们要继续提升研发效率,强化预研探索,同时继续提升研发分摊成本的水平。过去三年,小米研发投入达 111 亿,仅 2018 年就投入了 58 亿,相较上一年提高 83.3%。小米是一家成立仅 9 年的年轻的公司,投入的绝对数字和很多世界级公司还有差距,集团技术委员会要领导各个专业委员会要帮助我们把投入用到刀刃上。 第三、我们将建立起年轻化、高端化、规模化的人才梯队,让公司充满技术活力。一家公司能不能做出好的产品,研发投入很重要,但核心是要吸纳非常多优秀的人才,这也是技术委员会要做的工作。 第四、我们将更大规模地参与国内外技术标准制定。今天,我们不仅任命了来自各个事业部的技术委员会委员,还将标准与新技术部并入了技术委员会。过去几年,在标准与新技术部的带领下,我们广泛参与了国际标准的制定。随着 5G 和 AIoT 时代的到来,我们还将继续加大技术标准的参与规模。
技术委员会的存在需要解决的问题
研发体系,落伍一个时代:没有统一框架,各组自造轮子;代码管理系统逻辑混乱 Bug 多;开发中的单元测试、A/B 测试缺乏;内网隔离,Linux 不得入域。 技术领袖,2012~2014 的出走:在腾讯和 MSN 大战期间,从微软挖来不少人才。然而,这些人才,在 2012 之后,却一个一个地离开了, 连 CTO 都走了。 喜欢招聘研究型技术人才:腾讯偏爱研究型人才,谈起技术却喜欢用“技术必须服务于业务”来搪塞,学术型人才跟工业产品之间脱节严重。 企业 IT 部门权力过大:该部门在腾讯内部不仅关联到内网环境,而且在开发、测试、部署、发布方面都有很大的话语权。 缺乏代码规范,包括开源代码在内都 Bug 多多; SVN 主导,对 Git 支持非常有限; 开源文化落后,几乎所有的基础框架都没有内部开源; 技术支持不足,内部之间敝帚自珍,数据技术不互通。
公司战略思考
技术制定标准,流程与规范 - 开发标准与规范 - 质量与安全标准与规范 - 研发流程 统一核心技术选型:框架组件,基础服务,技术平台 前瞻性技术研究与探索:区块链,TiDB 潜在问题: 1. 没有标准,以日志规范为例 2. 没有统一的技术体系 3. 新技术研究各自为战 4. 没有人为技术战略方向负责 部分实践: 公司高T组成的虚拟组织 以项目形式推动的一些事宜 - 职级平生,校园招聘,技术培训 有实体组织承接与技术落地战略 - 架构不,基础服务部,技术平台部 需要获得老板授权,实习组织必须配合相关项目与技术落地 职级的评审的目的 - 帮助员工看清直接发展道路(明确目标) - 通过职级评审,帮助员工进行工作总结(强制总结) - 评审过程中自己能力的不足 (发现不足) - 在工作中有意识的提高资深各方面能力(提高员工能力) - 员工逐步提升,达到提升公司整体技术能力的目的 (提高公司能力)
框架 | 要素 | T3 | T4 | T5 |
---|---|---|---|---|
专业知识 | 业务知识 | |||
行业知识 | ||||
产品知识 | ||||
专业技能 | 开发能力 | 熟悉掌握一种开发语言,熟悉进程及线程开发模式,熟练掌握常用数据结构和算法 | ||
应用能力 | 熟悉公司化框架和三方库的使用 | |||
业务架构设计能力 | 能独立进行复杂业务系统的设计与开发,并解决其中的重点和难点 | |||
系统架构设计能力 | 熟知自己负责系统及相关系统各环节的表现,能够熟练应用各种方法定位性能问题,能够主动运用通用的方法对自己的系统进行性能调优 | |||
通用素质 | 沟通能力 | |||
项目管理能力 | ||||
解决问题能力 |
答辩 T4->T5 未过 1. 行业知识 不太确定时长恐惧和行业对app的要求重点 需要更加深入了解行业 2. 调优能力 未有太多体现 在APP整体性能要全面考虑 对weexsdk的崩溃不清楚 2. 架构设计 有较好的思想,但整体架构需要加强 整体架构有设计的方案,落地和产出不太够 3. 综合评价: 技术影响力不够,加强分享和人员分享 通用能力: 1. 解决问题方面:解决复杂问题思路不足 2. 学习能力方面: 分享不多 3. 创新能力方面: 没有创新思维 在业务解决中需要引入新的技术,新的思路 这方面的产出和体现比较少,后续要加强
善于演讲的人 在相同技艺的情况下,会得到更多的机会,从此刻开始。
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
composer install
composer update
composer require [options] [--] [vendor/packages]...
$conn = Yii::$app->db;
Yii::$app->db->createCommand("SELECT * FROM `user`");
Yii::$app->db->createCommand("SELECT * FROM `user` WHERE uid=:uid",[":uid"=>1]);
Yii::$app->db->createCommand("SELECT * FROM `user` WHERE uid=:uid")->addValue([":uid"=>1]);
Yii::$app->db
->createCommand('INSERT INTO user (email, password) VALUES("test3@example.com", "test3");')->execute();
Yii::$app->db->createCommand()->insert('user', [
'email' => 'test4@example.com',
'password' => 'changeme7',
'first_name' => 'Test'
])->execute();
Yii::$app->db->createCommand()->batchInsert('user', ['email', 'password', 'first_name'],
[
['james.franklin@example.com', 'changeme7', 'James'],
['linda.marks@example.com', 'changeme7', 'Linda']
['roger.martin@example.com', 'changeme7']
])->execute();
Yii::$app->db->createCommand()->update('user', ['updated_at' => time()], 'id = 2')->execute();
Yii::$app->db->createCommand()->delete('user', 'id = 3')->execute();
Yii::$app->db->createCommand("SELECT * FROM `user`")->queryAll();
Yii::$app->db->createCommand("SELECT * FROM `user` WHERE id = 1")->queryOne();
Yii::$app->db->createCommand("SELECT count(*) AS total FROM `user` WHERE id = 1")->queryScalar();
Yii::$app->db->createCommand("SELECT username FROM `user`")->queryColumn();
Yii::trace($message,$category)
Yii::info($message,$category)
Yii::warning($message,$category)
Yii::error($message,$category)
["username",'required']
[["username","email"],'required']
[["username"],'required',"message"=>"{attribute}必须填写"]
[["username"],'required','requiredValue'=>"abei"] // 用户填写的值必须等于requiredValue才能通过验证。
["email",'email']
[["email","work_email"],'email']
['sex', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => true];// 可以认为置顶 true / false 值。
['verificationCode', 'captcha'];
['username', 'compare', 'compareAttribute' => 'province','message'=>'username和province必须一样'] //错误信息将提示给username
['age', 'compare', 'compareValue' => 30, 'operator' => '>=','type' => 'number'];//compareValue:比较常量值 operator:比较操作符 type为值类型,默认为string,会一个每个字符对比,若为number则直接判断数值
// operator 待选值==、===、!=、!==、>、>=、<、<=
["birth","date","format"=>"Y-m-d"]
['age','default','value'=>null] // 当age为空的时候设置为null
['country','default','value'=>'USA'] // 当 country为空时设置为USA
/* 如果from为空,则=今天+3天,如果to为空,则=今天+6天 */
[['from','to'],'default','value'=>function($model,$attribute){
return date('Y-m-d', strtotime($attribute === 'to' ? '+3 days' : '+6 days'));
}]
['v','double'] // 判断v是否为数字
['v','double','max'=>90,'min'=>1]//判断v是否为数字且大于等于1、小于等于90
数组各元素验证
/* 要求验证的元素必须为数组,否则会返回假并报错 */
["categoryIds","each","rule"=>['integer']]
/* 所谓对存在的检查实质为where的与操作,必须同时瞒住的记录存在方可。兄弟们可以研究下,exist是对sql语句EXISTS的应用*/
["username","exist"] // username输入的值已经存在
["username","exist","targetAttribute"=>"province"] // username的输入值必须在province列存在
["username","exist",'targetAttribute' => ['username', 'province']] // username的输入值必须在username和province中存在
[["username","province"],"exist",'targetAttribute' => ['username', 'province']] // username和province的输入值必须在username和province中存在
/* maxFiles代表一次最多传几个,mimeTypes代表上传文件类型 */
['primaryImage', 'file', 'extensions' => ['png', 'jpg', 'gif'],'mimeTypes'=>["image/*"], 'maxSize' => 1024*1024,'minSize'=>100*1024,'maxFiles'=>6,'checkExtensionByMimeType'=>true],
[['username', 'email'], 'filter', 'filter' => 'trim', 'skipOnArray' => true],
['phone', 'filter', 'filter' => function ($value) {
// normalize phone input here
return $value;
}],
/* 上传png/jpg格式,最大宽度不能超过1000px,最小宽度不能低于100px,最大高度不能高于1000px。最小高度不能低于100px */
['primaryImage', 'image', 'extensions' => 'png, jpg','minWidth' => 100, 'maxWidth' => 1000,'minHeight' => 100, 'maxHeight' => 1000]
["ip_addess","ip"]
["level","in","range"=>[1,2,3]]
["age",'integer'];
["age","integer","max"=>90,"min"=>1]
["username","match","pattern"=>"/^[a-z]\w*$/i"]
["description","safe"]
string验证
["username","string","length"=>[4,24]];
["username","string","min"=>4];
["username","string","max"=>32];
["username","string","encoding"=>"UTF-8"];
["username","unique"]
["username","unique","targetAttribute"=>"province"]
["website","url"]
["website","url","validSchemes"=>["http","https"]]
StringHelper::countWords("hello world");//2
StringHelper::basename("/path/hello.txt",".txt"); // hello
StringHelper::dirname("/home/path/hello.txt");// /home/path
StringHelper::truncate("hello world",7,'...'); //hello w...
StringHelper::truncate("hello world",7,'...',null,true);//hello w...
StringHelper::truncateWords('This is a test sentance', 4, '...') //This is a test ...
StringHelper::truncateWords('This is a test for a sentance', 5, '...',true) //This is a test for...
StringHelper::startsWith("hello world","he");//true
StringHelper::endsWith("hello world","ald");//false
StringHelper::explode('It, is, a first, test'));//['It','is','a first','test']
StringHelper::explode("a@b@c","@");['a','b','c']
StringHelper::explode("a, b ,c ");['a','b','c']
$session = Yii::$app->session;
Yii::$app->session->isActive
Yii::$app->session->open()
Yii::$app->session->close();
Yii::$app->session->destroy();
/* 以下三种方法效果等同 */
$language = $session->get('language');
$language = $session['language'];
$language = isset($_SESSION['language']) ? $_SESSION['language'] : null;
/* 以下三种方法效果等同 */
$session->set('language', 'en-US');
$session['language'] = 'en-US';
$_SESSION['language'] = 'en-US';
/* 下面三种方法效果等同 */
$session->remove('language');
unset($session['language']);
unset($_SESSION['language']);
/* 以下三种方法效果一致 */
if ($session->has('language')) ...
if (isset($session['language'])) ...
if (isset($_SESSION['language'])) ...
$cookies = Yii::$app->request->cookies;
设置cookie
$cookies = Yii::$app->response->cookies;
$language = $cookies->getValue('language', 'en');// 如果获取language失败,则返回"en"代替
if (($cookie = $cookies->get('language')) !== null) {
$language = $cookie->value;
}
if (isset($cookies['language'])) {
$language = $cookies['language']->value;
}
if ($cookies->has('language')) ...
if (isset($cookies['language'])) ...
$cookies->add(new \yii\web\Cookie([
'name' => 'language',
'value' => 'zh-CN',
]));
$cookies->remove('language');
unset($cookies['language']);
Yii::$app->request->getAbsoluteUrl();
Yii::$app->request->getHostInfo();
Yii::$app->request->getQueryString()
Yii::$app->request->getServerPort();
Yii::$app->request-> getAcceptableContentTypes ();// Header Accept
Yii::$app->request-> getAcceptableLanguages(); // Header Accept-Language
Yii::$app->request->get();
Yii::$app->request->get("id");
Yii::$app->request->POST();
Yii::$app->request->POST("username");
Yii::$app->request->isAjax // 判断是否为ajax请求
Yii::$app->request->isConsoleRequest // 判断是否为控制发起的请求
Yii::$app->request->isDelete // 判断是否为DELETE请求
Yii::$app->request->isGet // 判断是否为GET请求
Yii::$app->request->isPost // 判断是否为POST请求
Yii::$app->request->isPjax // 判断是否为isPjax请求
Yii::$app->request->getUserIP();
Yii::$app->response->statusCode = 200;
yii\web\BadRequestHttpException: status code 400.
yii\web\ConflictHttpException: status code 409.
yii\web\ForbiddenHttpException: status code 403.
yii\web\GoneHttpException: status code 410.
yii\web\MethodNotAllowedHttpException: status code 405.
yii\web\NotAcceptableHttpException: status code 406.
yii\web\NotFoundHttpException: status code 404.
yii\web\ServerErrorHttpException: status code 500.
yii\web\TooManyRequestsHttpException: status code 429.
yii\web\UnauthorizedHttpException: status code 401.
yii\web\UnsupportedMediaTypeHttpException: status code 415.
throw new \yii\web\HttpException(402); // 如果系统没有,可以通过HttpException自己写状态码
throw new \yii\web\HttpException(402,"message");
HTTP Headers
$headers = Yii::$app->response->headers;
// add a Pragma header. Existing Pragma headers will NOT be overwritten.
$headers->add('Pragma', 'no-cache');
// set a Pragma header. Any existing Pragma headers will be discarded.
$headers->set('Pragma', 'no-cache');
// remove Pragma header(s) and return the removed Pragma header values in an array
$values = $headers->remove('Pragma');
Yii::$app->response->content = 'hello world!';
$this->render('index',['model'=>$model])
$this->renderPartial('index',['model'=>$model])
// 注入所有注册的JS/CSS脚本和文件,通常使用在响应AJAX网页请求的情况下
$this->renderAjax('index',['model'=>$model])
$this->renderContent($content);
$form = ActiveForm::begin([
'enableClientValidation'=>false
]);
$form = ActiveForm::begin([
'enableClientScript'=>false
]);
$form = ActiveForm::begin([
"action"=>$url
])
$form = ActiveForm::begin([
"method"=>"POST"
]);
$form = ActiveForm::begin([
'options'=>["class"=>"f","data-name"=>"xxx"]
]);
$form->field($model, 'date')->textInput(["key"=>"value"]);
$form->field($model, 'date')->textarea(["key"=>"value"]);
$form->field($model,'sex')->radioList($arr,["key"=>"value"]);
$form->field($model,"password")->passwordInput();
$form->field($model,"city_id")->checkboxList($arr);
$form->field($model,"image")->fileInput();
$form->field($model,"name")->hiddenInput();
FileHelper::findFiles('/path/to/search/');
FileHelper::findFiles('.', ['only' => ['*.php', '*.txt']]); // 只返回php和txt文件
FileHelper::findFiles('.', ['except' => ['*.php', '*.txt']]); // 排除php和txt文件
FileHelper::getMimeType('/path/to/img.jpeg');
FileHelper::copyDirectory($src, $dst, $options = [])
FileHelper::removeDirectory($dir, $options = [])
FileHelper::createDirectory($path, $mode = 0775, $recursive = true)
$file = UploadedFile::getInstance($model,'avatar')
$files = UploadedFile::getInstances($model,'avatar')
//view $form->field($model,'avatar[]')->fileInput()
$file = UploadedFile::getInstanceByName('avatar');
$file = UploadedFile::getInstancesByName('avatar');
// view Html::fileInput('avatar[]')
$file->saveAs(Yii::getAlias("@webroot").'/data/test.jpg');
$file->getBaseName();//test.jpg ===> test
$file->getExtension();// 是png、不是image/png
$file->name;//test.jpg
$file->type;// image/png
$file->tempName;
$file->size;// 21744
Html::a('链接的文本', $url);
Html::a('链接文本', Url::to(['/site/index'], true));
Html::a('链接文本', Yii::$app->urlManager->createUrl(['/site/index']));
Html::img("/images/logo.png",['class'=>'img']);
Html::button("按钮文本",['class'=>'button-action']);
Html::mailto("阿北",'abei@nai8.me',$options);
$list = ['china','usa'];
Html::ol($list);
$list = ['china','usa','japan'];
Html::ul($list);
Html::script("alert('hello world');")
Html::style("color:#F60");
Html::style(".list {background:#FFF;}");
Html::cssFile("http://baidu.com/style.css",[]);
Html::jsFile($url,[]);
Html::encode($html);
Html::decode($string);
Yii::setAlias('@baidu', 'http://www.baidu.com');
Yii::getAlias($name);
Yii::getAlias('@yii')
Yii::getAlias('@app')
Yii::getAlias("@vendor")
Yii::getAlias("@bower");
Yii::getAlias("@npm");
Yii::getAlias("@runtime");
Yii::getAlias("@webroot");
Yii::getAlias("@web");
Yii::getAlias("@common");
Yii::getAlias("@frontend");
Yii::getAlias("@backend");
Yii::getAlias("@console");
$query = (new \yii\db\Query()); // yii2使用Query对象来采集SQL的各个部分,然后由Query Builder组成SQL语句后由DAO发给数据库获得请求。
$query->select("id,username");// 字符串形式
$query->select(['id','username']); // 数组形式
$query->select(["userId"=>"id","fName"=>"user.frist_name"]); // 起别名
$query->select(["full_name"=>"CONCAT(id,'-',username)"]); // 支持MYSQL函数
$query->from("user"); // 字符串形式
$query->from(["u"=>"user"]); // 数据表别名
$query->select("username")->distinct()->from("user"); // distinct
/* 传递字符串 */
$query->where("id = 1");
$query->where("id = :id")->addParams([":id"=>1]);
$query->where("id = :id",[":id"=>1]);
/* 传递数组 */
$query->where(["username"=>"abei","age"=>[20,19,26]])->from("user");// select * from user where username="abei" AND age in (20,19,26)
/* 操作符 */
$query->where([">","id",10]);// id > 10
$query->where(["<","id",10]); // id < 10
$query->where(["<>","id",10]); // id <> 10
$query->where(["in","id",[10,12]]);// id in (10,20)
$query->where(["not in","id",[10,12]]);// id not in (10,20)
$query->where(["and","id=1","id=2"]); id=1 AND id=2
$query->where(['or', ['type' => [7, 8, 9]], ['id' => [1, 2, 3]]]); // (type IN (7, 8, 9) OR (id IN (1, 2, 3)))
$query->where(["between", 'id', 1, 10]);// id between 1 AND 10
$query->where(["not",["id"=>5]]);// not (id=5)
$query->where(["not between","id",1,10]);// id not between 1 AND 10
$query->where(["like","username","abei"]); // username like "%abei%"
$query->where([['like', 'username', ['abei', 'liuhuan']]]); // username like "%abei%" AND username like "%liuhuan%"
$query->where(['like', 'username', '%abei', false]); // username like "%abei"
$query->where(["or like", 'username', ['abei', 'liuhuan']]);// username like "%abei%" OR username like "%liuhuan%",
$query->where(["not like",xxxxx]);// 与``like用法一致
$query->where(["or not like",xxx])// 与not like用法一致
/* EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False */
$query->where(['exists', (new Query())->select('id')->from('user')->where(['id' => 1])]);
$query->orderBy("id DESC");
$query->orderBy(["id"=>SORT_DESC]);
$query->orderBy(["id"=>SORT_DESC,'create_time'=>SORT_ASC]);
GROUP BY && HAVING
$query->groupBy(["username"]);
$query->groupBy(["id"])->having([">",'id',20]);
$query->createCommand()->sql;
$query->all();// 二位数组
$query->one();
(new \yii\db\Query)->from('user')->exists();
$query->count();
$query->scalar();
$query->column();// 一位数组
$query = new \yii\db\Query;
$query->from("user");
$query->select(["fname"=>"username"]);
$query->where([">",'id',10]);
$query->all();
./yii migrate/create script_name // script_name为脚本名字(需要英文格式)
./yii migrate
./yii migrate/up
./yii migrate/up 脚本名 // 不用含有扩展名
$basePath // 资源文件所在的web服务器目录路径,一般为@webroot
$baseUrl // js和css文件相对url基地址
$css // asset bundle 所包含的css文件数组
$cssOptions // 对link标签的属性控制
$js // asset bundle 所包含的js文件数组
$jsOptions // 对script标签的属性控制
$publishOptions // 发布操作
$sourcePath // 当资源网络不可以访问,则必须指定此目录。
'appendTimestamp' => true // 在web.php里的components - assetManager
public $publishOptions = [
'only' => [
'fonts/*',
'css/*',
'test.js'
],
'except'=>[
'img'
],
];
public $jsOptions = ['position' => \yii\web\View::POS_HEAD];//js文件发布到head标签内
public $jsOptions = ['position' => \yii\web\View::POS_END];//js文件发布到body标签底部
public $jsOptions = ['position' => \yii\web\View::POS_BEGIN];//js文件放到body标签开始处
public $cssOptions = ['condition' => 'IE 11'];// 代表兼容ie11
'linkAssets' => true // 在web.php里的components - assetManager
// 在web.php里的components - assetManager,配置自定义的也可以
'bundles' => [
'yii/web/YiiAsset'=>[
'js'=>[],
......
]
]
Application::EVENT_BEFORE_REQUEST
Application::EVENT_AFTER_REQUEST
Controller::EVENT_BEFORE_ACTION
Controller::EVENT_AFTER_ACTION
Model::EVENT_BEFORE_VALIDATE
Model::EVENT_AFTER_VALIDATE
Module::EVENT_BEFORE_ACTION
Module::EVENT_AFTER_ACTION
View::EVENT_BEGIN_PAGE
View::EVENT_END_PAGE
View::EVENT_BEFORE_RENDER
View::EVENT_AFTER_RENDER
View::EVENT_BEGIN_BODY
View::EVENT_END_BODY
Widget::EVENT_INIT
Widget::EVENT_BEFORE_RUN
Widget::EVENT_AFTER_RUN
ActiveQuery::EVENT_INIT
BaseActiveRecord & ActiveRecord # 这也许是内置事件中最重要的一批了。
BaseActiveRecord::EVENT_INIT
BaseActiveRecord::EVENT_AFTER_FIND
BaseActiveRecord::EVENT_BEFORE_INSERT
BaseActiveRecord::EVENT_AFTER_INSERT
BaseActiveRecord::EVENT_BEFORE_UPDATE
BaseActiveRecord::EVENT_AFTER_UPDATE
BaseActiveRecord::EVENT_BEFORE_DELETE
BaseActiveRecord::EVENT_AFTER_DELETE
在数据refresh成功之后触发
BaseActiveRecord::EVENT_AFTER_REFRESH
Connection::EVENT_AFTER_OPEN
Connection::EVENT_BEGIN_TRANSACTION
Connection::EVENT_COMMIT_TRANSACTION
Connection::EVENT_ROLLBACK_TRANSACTION
Response::EVENT_BEFORE_SEND
Response::EVENT_AFTER_SEND
Response::EVENT_AFTER_PREPARE
User::EVENT_BEFORE_LOGIN
User::EVENT_AFTER_LOGIN
User::EVENT_BEFORE_LOGOUT
User::EVENT_AFTER_LOGOUT
// conf/web.php
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'suffix'=>'.html',// 统一后缀名,若不需要则无需配置
'enableStrictParsing'=>false,//默认为false,是否采用严格解析
'rules' => [
],
]
// Apache需要支持url重写其AllowOverride为all
AllowOverride:all
//web目录下增加.htaccess,隐藏index.php文件 内容如下
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
location / {
if (!-e $request_filename){
rewrite ^/(.*) /index.php last;
}
}
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA]
GET /users
GET /users?page=2
GET /users?fields=id,username,created_at
GET /users?sort=id,-username
200: OK。一切正常。
201: 响应 POST 请求时成功创建一个资源。Location header 包含的URL指向新创建的资源。
204: 该请求被成功处理,响应不包含正文内容 (类似 DELETE 请求)。
304: 资源没有被修改。可以使用缓存的版本。
400: 错误的请求。可能通过用户方面的多种原因引起的,例如在请求体内有无效的JSON 数据,无效的操作参数,等等。
401: 验证失败。
403: 已经经过身份验证的用户不允许访问指定的 API 末端。
404: 所请求的资源不存在。
405: 不被允许的方法。 请检查 Allow header 允许的HTTP方法。
415: 不支持的媒体类型。 所请求的内容类型或版本号是无效的。
422: 数据验证失败 (例如,响应一个 POST 请求)。 请检查响应体内详细的错误消息。
429: 请求过多。 由于限速请求被拒绝。
500: 内部服务器错误。 这可能是由于内部程序错误引起的。
crontab -l
//通过 查看当前用户文件是空的
//尝试手动写入
crontab file
//返回 0
echo $?
//依然是空
crontab -l
查看硬盘
df -h
发现 /var 100% used
/var 包含系统一般运行时要改变的数据。通常这些数据所在的目录的大小是要经常变化
或扩充的。原来/ v a r目录中有些内容是在/ u s r中的,但为了保持/ u s r目录的相对稳定,就把那
些需要经常改变的目录放到/ v a r中了。每个系统是特定的,即不通过网络与其他计算机共享。
下面列出一些重要的目录(一些不太重要的目录省略了)。
1. /var/catman
包括了格式化过的帮助( m a n )页。帮助页的源文件一般存在/ u s r / m a n / m a n中;有些m a n页
可能有预格式化的版本,存在/ u s r / m a n / c a t中。而其他的m a n页在第一次看时都需要格式化,
格式化完的版本存在/var/man 中,这样其他人再看相同的页时就无须等待格式化了。
(/var/catman 经常被清除,就像清除临时目录一样。)
2. /var/lib
存放系统正常运行时要改变的文件。
3. /var/local
存放/usr/local 中安装的程序的可变数据(即系统管理员安装的程序)。注意,如果必要,
即使本地安装的程序也会使用其他/var 目录,例如/var/lock 。
4. /var/lock
锁定文件。许多程序遵循在/var/lock 中产生一个锁定文件的约定,以用来支持他们正在
使用某个特定的设备或文件。其他程序注意到这个锁定文件时,就不会再使用这个设备或文
件。
5. /var/log
各种程序的日志( l o g )文件,尤其是login (/var/log/wtmp log纪录所有到系统的登录和注
销) 和syslog (/var/log/messages 纪录存储所有核心和系统程序信息)。/var/log 里的文件经常不
确定地增长,应该定期清除。
6. /var/run
保存在下一次系统引导前有效的关于系统的信息文件。例如, /var/run/utmp 包含当前登
录的用户的信息。
7. /var/spool
放置“假脱机( s p o o l )”程序的目录,如m a i l、n e w s、打印队列和其他队列工作的目录。每
个不同的s p o o l在/var/spool 下有自己的子目录,例如,用户的邮箱就存放在/var/spool/mail 中。
8. /var/tmp
比/tmp 允许更大的或需要存在较长时间的临时文件。
注意系统管理员可能不允许/var/tmp 有很旧的文件。
crontab在liunx 存放的目录也是在/var下
/var/spool/cron/
class ab{
public function gg(){
// try{
if(1!=2){
echo "run is 1!=2".PHP_EOL;
throw new Exception("Error Processing Request", 1);
}
// }catch(Exception $e){
// echo "run back".PHP_EOL;
// }
}
public function __destruct() {
print "Destroying " . self::class . "\n";
}
}
$ab=new ab();
$ab->gg();
执行结果
run is 1!=2
PHP Fatal error: Uncaught Exception: Error Processing Request in /Users/ab/Sites/try.php:8
Stack trace:
#0 /Users/ab/Sites/try.php(22): ab->gg()
#1 {main}
thrown in /Users/ab/Sites/try.php on line 8
Fatal error: Uncaught Exception: Error Processing Request in /Users/ab/Sites/try.php:8
Stack trace:
#0 /Users/ab/Sites/try.php(22): ab->gg()
#1 {main}
thrown in /Users/ab/Sites/try.php on line 8
FAIL: 255
trycatch 下的 throw异常
class ab{
public function gg(){
try{
if(1!=2){
echo "run is 1!=2".PHP_EOL;
throw new Exception("Error Processing Request", 1);
}
}catch(Exception $e){
echo "run back".PHP_EOL;
}
}
public function __destruct() {
print "Destroying " . self::class . "\n";
}
}
$ab=new ab();
$ab->gg();
执行结果
run is 1!=2
run back
Destroying ab
最新评论
会讲故事的人,很容易被赏识。
Europe, and in Ancient Russia
Since the era of Charlemagne
核心是启动的 参数 -Xmx -Xms -Xmn 改成 跟系统相关的, 堆内存大小设置,我之前经验不足 ,你应该关注服务器 本身的gc情况调整
你好,我想请假一下,windows环境遇到内存溢出应该如何修改,信息
Yii框架现在使用的也挺多的,正好学习一下!
看完后,有感而发:如果某天我们拨打某人的手机号码是空号,表示对方可能已离开地球了。
高端技术贴