PHP 模板引擎的原理

代码分层的思想

PHP 作为轻巧灵活的脚本语言,非常适合 Web 开发这种开发周期短、需求变化快、强调用户体验的需求和业务。PHP 开发早期,通常都是 PHP 代码与 HTML 混写,代码中充斥着数据库操作、逻辑判断、HTML 代码生成,甚至 JavaScript 代码等。当项目规模不大时,这种编程风格能够很快地完成需求。但是一旦项目规模扩大后,再加上前端逻辑越来越复杂,这种完全混写的方式必将带来代码可读性差和后期维护困难等问题。

数据库应用优化

基本语句优化的10个原则

  1. 尽量避免在列上进行运算,这样会导致索引失效
  2. 使用JOIN时,应该用小结果集驱动大结果集。同时把复杂的JOIN查询拆分成多个Query。因为JOIN多个表时,可能导致更多的锁定和堵塞。

OS X - FileMerge 命令行交互技巧

命令行调用

使用命令行指定两个文件,并用 FileMerge 去比较其差异。

1
opendiff ${LEFT_FILE} ${RIGHT_FILE}

MySQL 存储过程和函数区别

参考链接

中篇小说五篇

迟到两周的读书笔记,仓促而惭愧的感想。

《化身博士》

半个小时后,当我再次、也是永远地变成我所深恶痛绝的那个人时,我知道我将坐在椅子上战栗着、哭泣着,或者就继续在房间里踱来踱去,聆听着每一声威胁,提心吊胆、失魂落魄。 —— 《化身博士》

WebView 设置 UserAgent

iOS

在 iOS 中的设置作用域为全局,一般在AppDelegate的初始化方法中设置即可。

1
2
3
4
5
6
7
8
9
10
11
//  AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// ...

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"My Agent", @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];

return YES;
}

MySQL 笔记 5

视图

  • 视图是虚拟的表

视图的作用

    MySQL 笔记 4

    插入数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    INSERT INTO customers VALUES(NULL, 'Fang');

    -- 推荐更安全、扩展性更好的方式
    INSERT INTO customers(cust_id, cust_name) VALUES(NULL, 'Fang');

    -- 进一步,无需插入 AUTO_INCREMENT 属性的列
    INSERT INTO customers(cust_name) VALUES('Fang');

    -- 插入多条数据,单条语句插入比多次语句性能更高
    INSERT INTO customers(cust_name) VALUES('Fang'), ('Quan');

    -- 插入检索出的数据
    INSERT INTO customers(cust_id, cust_name) SELECT cust_id, cust_name FROM custnew;

    MySQL 笔记 3

    分组数据

    1
    2
    3
    SELECT vend_id COUNT(*) AS num_prods FROM products GROUP BY vend_id;

    SELECT cust_id, COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >= 2;

    MySQL 笔记 2

    创建计算字段

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    -- 拼接字段 Concat()
    SELECT Concat(vend_name, ' (', vend_country, ')') FROM vendors ORDER BY vend_name;

    -- Trim() 去除空格
    SELECT Concat(RTrim(vend_name), ' (', RTrim(vend_country), ')') FROM vendors ORDER BY vend_name;

    -- 使用别名 AS
    SELECT Concat(RTrim(vend_name), ' (', RTrim(vend_country), ')') AS vend_title FROM vendors ORDER BY vend_name;

    -- 执行算术计算
    SELECT prod_i, quantity, item_price, quantity*item_price AS expanded_price FROM orderitems WHERE order_num = 20005;