什么是索引?
提起索引,應該不會感到陌生,若說它就是目錄,大概都知道了,數(shù)據(jù)庫的索引與書的目錄很相似,都叫index.書的內(nèi)容相當于數(shù)據(jù)庫表中的數(shù)據(jù),書的目錄通過頁碼指向書的內(nèi)容,同樣,索引也記錄了表中的關鍵值,提供了指向表中行的指針.書的目錄使讀者很快的找到想看的內(nèi)容,而不必翻看書的每一頁,索引使得數(shù)據(jù)庫應用程序能夠不掃描全表而找到想要的數(shù)據(jù).
索引是不是多多益善?
索引可以創(chuàng)建在一列或多列的組合上,也可以在數(shù)據(jù)庫表的多個列上建立不同的索引,但這些列應該是經(jīng)常作為查詢條件的列.需要指出的是,并不是表上的索引越多越好,在數(shù)據(jù)庫設計過程中,還是需要為表選擇一些合適的索引。寧缺勿爛,這是建立索引時的一個具體選擇。在理論上,雖然一個表可以設置無限的索引,但表中的索引越多,維護索引所需要的開銷也就越大。每當數(shù)據(jù)表中記錄有增加、刪除、更新變化的時候,數(shù)據(jù)庫系統(tǒng)都需要對所有索引進行更新。
索引的分類
索引可以分為三類:聚集索引(clustered index),非聚集索引,唯一性索引(unique index).根據(jù)索引字段組成又有復合索引的說法,復合索引可以是唯一索引也可以不是唯一索引.一個表上最多創(chuàng)建一個聚集索引和249個非聚集索引.
創(chuàng)建索引的條件
(1)為經(jīng)常出現(xiàn)在關鍵字orderby、group by、distinct后面的字段,建立索引。
(2)在union等集合操作的結果集字段上,建立索引。
(3)為經(jīng)常用作查詢選擇的字段,建立索引。
(4)在經(jīng)常用作表連接的屬性上,建立索引。
(5)考慮使用索引覆蓋。對數(shù)據(jù)很少被更新的表,如果用戶經(jīng)常只查詢其中的幾個字段,可以考慮在這幾個字段上建立索引,從而將表的掃描改變?yōu)樗饕膾呙琛?/p>
創(chuàng)建索引的限制
(1)限制索引數(shù)目。
(2)唯一性太差的字段不適合單獨創(chuàng)建索引;
(3)更新頻繁的字段不適合創(chuàng)建索引;
(4)不會做為查詢條件的字段不創(chuàng)建索引
存儲過程和觸發(fā)器都是一組SQL語句集合,他們在數(shù)據(jù)庫開發(fā)過程中,在對數(shù)據(jù)庫的維護和管理等任務中,以及在維護數(shù)據(jù)庫參照完整性等方面,具有不可替代的作用.而觸發(fā)器是一種特殊的存儲過程,存儲過程獨立于表,具有訪問和操縱數(shù)據(jù)庫數(shù)據(jù)的功能,使應用程序執(zhí)行效率得到進一步提高.觸發(fā)器也是T_SQL語句的集合,它與表密切結合,實現(xiàn)表中更為復雜的業(yè)務規(guī)則.
存儲過程是以一個名字存儲在數(shù)據(jù)庫中的,經(jīng)過預編譯的T_SQL語句集合,可以獨立執(zhí)行或通過應用程序的調(diào)用來執(zhí)行.
觸發(fā)器是不由用戶直接調(diào)用的,而是在對表或視圖中數(shù)據(jù)進行update,insert或者delete操作時自動執(zhí)行.一個表或視圖可以有多個觸發(fā)器,每個觸發(fā)器可以包含復雜的SQL語句.數(shù)據(jù)庫表之間的引用完整性約束,除了可以采用主鍵和外鍵的對應約束來實現(xiàn)之外,還可以使用觸發(fā)器,從而實現(xiàn)更復雜的用戶定義完整性約束.
字符函數(shù)
這個函數(shù)一般接收字符作為參數(shù),并且可以返回字符或數(shù)字
其中最常用有以下兩個函數(shù)
1.CONCAT函數(shù)
主要用于字符串的連接,具體語法如下
CONCAT(c1,c2)
接收兩個參數(shù),將第二個參數(shù)連接到第一個參數(shù)的末尾,假如第二個參數(shù)是NULL,
則函數(shù)返回第一個參數(shù),假如第一個參數(shù)是NULL,則參數(shù)返回第二個參數(shù),
假如都為NULL,則函數(shù)返回NULL
為商品價格添加元單位示例如下:
2.NVL函數(shù)
這個函數(shù)主要用于函數(shù)替換
NVL(e1,e2)
接收兩個參數(shù),假如第一個參數(shù)不為NULL時,函數(shù)返回第一個參數(shù),
假如第一個參數(shù)為NULL時,函數(shù)返回第二個參數(shù)
具體的使用示例如下:
查詢商品表的相關信息,對沒有詳細介紹的商品默認設置顯示“暫無詳細描述”
可使用暫無詳細描述來代替NULL
字符常用函數(shù)還有很多,希望大家能在我的基礎上評論補充
SQL語言是一種高級的非過程化的查詢語言,用戶使用它主要進行數(shù)據(jù)庫的操作
可以把SQL語言看成是客戶端與服務器端溝通的一個工具,用來存取,查詢和更新,關系數(shù)據(jù)庫系統(tǒng)
Insert語句
INSERT語句的語法結構如下:
table值的是要插入數(shù)據(jù)的表的表名,Column指的是要插入數(shù)據(jù)的列名,Value指的是要插入的具體數(shù)據(jù)值
例如往會員表中插入一個新的會員數(shù)據(jù),可以這樣添加:
前者的優(yōu)點是可以指定哪些字段添加哪些數(shù)據(jù),缺點是表名后面的小括號中的字段名需要和Value值相對照
后者的優(yōu)點是書寫簡單,缺點是要把所有的字段都在Value中進行賦值
當需要插入數(shù)據(jù)包含有空值的時候,一般使用第一種方法,而第二種方法進行插入需要使用NULL關鍵字進行填充
假如插入的數(shù)據(jù)包含時間,而且時間是當前的時間,
假如插入的是時間,并且時間是某個具體的時間,我們可以將上述的語句進行修改如下:
以上操作的都是單行的數(shù)據(jù),而下面的操作是多行的數(shù)據(jù)
插入多行數(shù)據(jù)示例如下:
UPDATE語句
UPDATE語句結構如下:
如初始化所有會員密碼:
按條件更新:
做更新操作的時候,WHERE條件一般選擇類似主鍵這樣有唯一性約束的字段,除非特殊情況,
否則的話會引起意想不到的誤操作,比如更新用戶表時以name作為條件的話,就十分危險,
因為名字是可以重復的
Select語句
我們對數(shù)據(jù)庫做得最多的操作是數(shù)據(jù)檢索
select語句就顯得極其重要
其中最簡單的查詢實例如下:
*指的是所有列
而查詢所有VIP數(shù)據(jù)如下:
查詢兩個條件同時成立的示例如下:
查詢兩個條件成立其中一個,示例如下:
查詢條件為空的示例如下:
當要查詢會員中所有姓李的會員時,需要用到模糊查詢:
% 能匹配0到多個字符
_ 能任意匹配單個字符
查詢商品表中價格在300-400之間的商品數(shù)據(jù);
而查詢會員表中張三、李四、王五的信息方法如下:
使用別名查詢:
其中查詢中可能需要對查詢的結果進行排序,其結構如下:
查詢商品表,按上架時間進行排序:
如果想去掉查詢結果中的重復數(shù)據(jù),可以使用Distinction關鍵字,如下
Delete語句
語法結構如下
其中的table 和 condition在上面已經(jīng)有提及
刪除示例如下
在實際操作中我們應該使用假刪除,就是再增加一個狀態(tài)(一般為status)的字段
在刪除錯誤之后,我們可以用 ROLLBACK來回滾事務
摘要: 管理數(shù)據(jù)完整性一 學習目標 1.實現(xiàn)數(shù)據(jù)完整性約束 2.管理完整性約束 3.從數(shù)據(jù)字典中獲取約束信息二 保證數(shù)據(jù)完整性的方法 1.應用程序代碼控制 2.觸發(fā)器控制 3.聲明完整性約束三 約束的類型 (見圖) 1.not null (不能為空) ... 閱讀全文linux是一個多用戶,多任務的操作系統(tǒng),對于每一個文件它的屬性中都包括:文件所有者(owner),文件所屬組(group),其他用戶(other),還必須具備與這三個角色對應的讀,寫,執(zhí)行的權限,如下圖:
在tmp目錄下面有一個a.txt文件,我們通過ls -l命令可以查看其詳細信息:
-:表示普通文件,d:表示目錄文件,l:鏈接文件,b:設備文件中可以供存儲的接口設備,c:設備文件中串行端口設備如鍵盤。
由于最前面是-:所以a.txt是普通文件。
再看 rw-r--r--部分,我們將其分為三組,分別對應文件所有者,文件所屬組,其他用戶的權限.
其中r代表讀取權限,w:代表寫權限,x:代表執(zhí)行權限(這里沒出現(xiàn)),-:代表沒有某種權限。
那對上面的權限的解釋就是:
owner:可以讀和寫,不能執(zhí)行
group:可以讀取不能寫,不能執(zhí)行
other:可以讀取,不能寫,不能執(zhí)行
第一個root代表文件所有者,第二個root代表文件所屬組
那么現(xiàn)在我如果想修改文件所有者,文件所屬組,文件權限該怎么做,請繼續(xù)向下閱讀:
chgrp:修改用戶所屬組,chown:修改文件所有者,chmod:修改文件權限
假設我的系統(tǒng)中又一個叫gavin的組(通過/etc/group查看)
如上圖,通過chgrp命令將該文件的group修改為了gavin
下面修改其所有者:
修改其權限:
chmod 777 a.txt 這個777代表什么?
在linux中使用數(shù)字代表權限:
r:4 w:2 x:1
r-- =4+0+0=4;
rw- =4+2+0=6;
rwx =4+2+1=7
相信寫到這里大家都應該明白了吧。
權限對于文件和文件夾的意義是不一樣的,
對于文件:
r:代表可以讀取文件的內(nèi)容,w:代表可以修改文件的內(nèi)容,x:可以執(zhí)行這個文件
對于文件夾:
r:可以獲取文件夾中又哪些文件,w:可以添加和刪除文件夾中的內(nèi)容,x:可以進入文件夾,
如果某個角色對于一個文件夾的權限是rw-;
那么他僅僅可以使用ls獲取文件夾中的內(nèi)容,但是不可以使用cd進入該文件夾。
文件的權限告一段落,現(xiàn)在來看看linux中的那些常見目錄中的內(nèi)容:
/bin 系統(tǒng)有很多放置執(zhí)行文件的目錄,但是/bin比較特殊,因為/bin放置的是在單用戶維護模式下還能夠被操作的命令,在/bin下面的命令可以被root和一般賬戶使用,如:cat,chmod,chown,data,mv,mkdir,cp ,bash等常用命令。
/boot 主要放置開機使用到的文件
/dev 在linux系統(tǒng)中任何設備與接口設備都是以文件的形式存在于這個目錄當中,你只要訪問某個文件就相當于訪問該設備
/etc 系統(tǒng)的主要配置文件幾乎都在這個文件夾類。
/home 這是系統(tǒng)默認的用戶主文件夾
/lib 系統(tǒng)的函數(shù)庫非常多,二/lib放置的是開機會使用到的函數(shù)庫
/mnt 如果你想臨時掛在一些外部設備(光盤)一般建議放置到這個目錄。
/opt 這是給第三方軟件放置的目錄
/root 系統(tǒng)管理員的主文件夾
/tmp 這是讓一般用戶或者正在執(zhí)行的程序放置文件的地方,這個目錄是任何人都可以訪問的,所以你需要定期清理一下,當然重要數(shù)據(jù)時不能放到這里來的。
關于文件權限的最后一點就是:文件默認權限umask
現(xiàn)在我們已經(jīng)知道如何新建或者改變一個目錄的屬性了,不過你知道當你新建一個新的文件或則目錄是,它的默認權限是什么嗎?那就是于umask這東西有關了,那么umask是在搞什么呢,基本上,umask就是制定目前用戶在新建文件或目錄的時候權限的默認值,如果獲得或設置umask,方法如下:
#umask 或則 umask -S
(四位數(shù),第一位我們先不管,表示特殊權限,我們從第二位開始看起)
在默認權限上,文件和目錄是不一樣的,對于一個目錄,x權限是非常重要的 ,而對于一個文件,x權限在默認是不應該有的,因為文件大多是用來存儲數(shù)據(jù)的,所以在linux中,文件的默認權限是666,目錄的默認權限是777
要注意的是umask的分數(shù)指的是“默認值需要剪掉的權限”,
所以新建文件時權限:rw--r--r--
新建目錄:r-xr-xr-x
一.單行函數(shù)介紹
---單行函數(shù)對單行操作
---每行返回一個結果
---有可能返回值與原參數(shù)數(shù)據(jù)類型不一致(轉換函數(shù))
---單行函數(shù)可以寫在SELECT,WHERE,ORDER BY子句中
---有些函數(shù)沒有參數(shù),有些函數(shù)有一個或多個參數(shù)
---函數(shù)可以嵌套
分類:字符函數(shù),數(shù)字函數(shù),日期函數(shù),轉換函數(shù),通用函數(shù)
二.字符函數(shù)
1.簡介
定義:主要指參數(shù)類型是字符型,不同函數(shù)返回值可能是字符或數(shù)字類型
<1>.LOWER:全小寫
LOWER('SQL Course')——>sql course
<2>.UPPER:全大寫
UPPER('SQL Course')——>SQL COURSE
<3>.INITCAP:首字母大寫
INITCAP('SQL Course')——>Sql course
<4>.CONCAT:字符串連接
CONCAT('Good','String')——>GoodString
<5>.SUBSTR:字符串截取
SUBSTR('String',1,3)——>Str
<6>.LENGTH:返回字符串長度
LENGTH('String')——>6
<7>.INSTR:返回一個字符串在另一個字符串中的位置
INSTR('String','r')——>3
<8>.LPAD:左填充
LPAD(sal,10,'*')——>******5000
<9>.RPAD:右填充
RPAD(sal,10,'*')——>5000******
<10>.TRIM:去掉左右兩邊指定字符
TRIM('S' FROM 'SSMITH')——>MITH
<11>.REPLACE:替換字符串
REPLACE('abc','b','d')——>adc
三.數(shù)字函數(shù)
<1>.ROUND:四舍五入函數(shù)
ROUND(12.3)——>12
ROUND(12.5)——>13
<2>.TRUNC:截斷函數(shù)
TRUNC(65.654,0)——>65
TRUNC(65.654,-1)——>60
<3>.MOD:取余函數(shù)
MOD(10,12)——>10
MOD(7,12)——>7
MOD(10,4)——>2
四.日期函數(shù)
<1>.SYSDATE:返回系統(tǒng)日期
<2>.MONTHS_BETWEEN:返回兩個日期間隔的月數(shù)
select months_between('02-2月-06','02-2月-06') from dual;
<3>.ADD_MONTHS:在指定日期基礎上加上相應的月數(shù)
select add_months('02-2月-06',8) from dual;
<4>.NEXT_DAY:返回某一日期的下一個指定日期
select next_day('1-2月-12','星期一') next_day from dual;
<5>.LAST_DAY:返回指定日期當月最后一天的日期
select last_day('1-2月-12') last_day from dual;
<6>.ROUND(date[,'fmt'])對日期進行指定格式的四舍五入操作,按照YEAR、MONTH、DAY等進行四舍五入
SELECT employee_id, hire_date, ROUND(hire_date, 'MONTH') FROM employees WHERE SUBSTR(hire_date,-2,2)='98';
<7>.TRUNC(date[,'fmt'])對日期進行指定格式的截斷操作。按照 YEAR、MONTH、DAY等進行截斷
SELECT employee_id, hire_date, TRUNC(hire_date, 'MONTH') FROM employees WHERE SUBSTR(hire_date,-2,2)='98';
<8>.EXTRACT:返回從日期類型中取出指定年、月、日
SELECT last_name, hire_date, EXTRACT (MONTH FROM HIRE_DATE) MONTH FROM employees WHERE department_id = 90;
五.轉換函數(shù)
---通常在字符類型、日期類型、數(shù)字類型之間進行顯性轉換。
<1>.TO_CHAR(date|number|'fmt'):把日期類型/數(shù)字類型的表達式或列轉換為字符類型
--‘fmt’:指的是需要顯示的格式,需要寫在單引號中,并且是大小寫敏感,可包含任何有效的日期格式
常用日期格式:
---YYYY:4位數(shù)字表示年份 ---DY:星期的英文前三位字母
---YY:兩位數(shù)字年份,但是無世紀轉換 ---DAY:星期的英文拼寫
---RR:2位數(shù)字表示年份,有世紀轉換 ---D:數(shù)字表示一星期的第幾天,星期天是一周的第一天
---YEAR:年份的英文拼寫 ---DD:數(shù)字表示一個月中的第幾天
---MM:兩位數(shù)字表示月份 ---DDD:數(shù)字表示一年中的第幾天
---MONTH:月份英文拼寫 ---AM或PM:上下午表示
---HH 或HH12或HH24:數(shù)字表示小時 ---MI:數(shù)字表示分鐘
HH12代表12小時計時,HH24代表24小時計時 ---SS:數(shù)字表示秒;
特殊格式:
TH:顯示數(shù)字表示的英文序數(shù)詞,如:DDTH顯示天數(shù)的序數(shù)詞
SP:顯示數(shù)字表示的拼寫
SPTH:顯示數(shù)字表示的序數(shù)詞的拼寫
select to_char(sysdate,’ddspth’) from dual;
“字符串”:如在格式中顯示字符串,需要兩端加雙引號
select to_char(sysdate,’dd “of” month ‘) from dual;
數(shù)字到字符型轉換:
進行數(shù)字類型到字符型轉換,格式中的寬度一定要超過實際列寬度,否則會顯示為###
-- 9:一位數(shù)字
-- 0:一位數(shù)字或前
-- $:顯示為美元符
-- L:顯示按照區(qū)域
-- .:小數(shù)點
-- ,:千位分割符
select to_char(9832, '$9,999.00') from dual;
<2>.TO_NUMBER(char[,’fmt’]): 把字符類型列或表達式轉換為數(shù)字類型
select to_number('9832', 9999) from dual;
<3>.TO_DATE(char[,‘fmt’]): 把字符類型列或表達式轉換為日期類型
select to_date('20120304', 'yy-mm-dd') from dual;
六.通用函數(shù)
<1>NVL(表達式1,表達式2)函數(shù):該函數(shù)功能是空值轉換,把空值轉換為其他值,解決空值問題。如果表達式1為空,則表達式2就是要轉換成的值。
注意:數(shù)據(jù)格式可以是日期、字符、數(shù)字,但數(shù)據(jù)類型必須匹配
select nvl(null,1) from dual;
select nvl(2,1) from dual;
<2>.NVL2(表達式1, 表達式2, 表達式3)函數(shù):該函數(shù)是對第一個參數(shù)進行檢查。如果第一個參數(shù)不為空,則輸出第二個參數(shù),如果第一個參數(shù)為空,則輸出低三個參數(shù),表達式1可以為任何數(shù)據(jù)類型。
select nvl2(null,1,2) from dual;
select nvl2(3,1,2) from dual;
<3>.NULLIF(表達式1,表達式2)函數(shù):該函數(shù)主要完成兩個參數(shù)的比較。當兩個參數(shù)不相等時,返回值是第一個參數(shù)值;當兩個參數(shù)相等時,返回值是空值。
select nullif(1,1) from dual;
返回值是:不是null;
select nullif(1,2) from dual;
<4>.COALESCE(表達式1, 表達式2, ... 表達式n)函數(shù):該函數(shù)是對NVL函數(shù)的擴展。COALESCE函數(shù)功能是返回第一個不為空的參數(shù),參數(shù)個數(shù)不受限制。
select coalesce(null,null,0,1) from dual;
<5>.CASE表達式:
SELECT last_name, commission_pct,
(CASE commission_pct
WHEN 0.1 THEN '低'
WHEN 0.2 THEN '中'
WHEN 0.3 THEN '高'
ELSE '無'
END) Commission
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY last_name;
<6>.DECODE函數(shù):
DECODE(字段|表達式, 條件1,結果1[,條件2,結果2…,][,缺省值])
select last_name, commission_pct,decode( commission_pct,0.1,'低',0.2,'中',0.3 , '高','無') commission
from employees where commission_pct is not null orderbylast_name;
剛開始學習存儲過程的時候,就把它想象成生活中把一些東西存儲在某些地方,需要的時候再把它取出來使用。而在數(shù)據(jù)庫學習和總結中,才發(fā)現(xiàn)存儲過程是一種數(shù)據(jù)庫對象,是為了實現(xiàn)某個特定任務,將一組預編譯的SQL語句以一個存儲單元的形式存儲在服務器上,供用戶調(diào)用。
電話錄音服務只是內(nèi)部進行錄音以及調(diào)用PhoneManager對象。許多時候服務在處理業(yè)務后需要和其它程序進行通信。.startService()和stopService()適用于調(diào)用者和服務者之間沒有交互的情況,否則應該適用bindSerivce()和unbindService()方法
調(diào)用bindService()方法時:
1. 服務若沒有創(chuàng)建
s.onCreate()--às.onBind()-à服務于訪問者綁定在一起
如果訪問者退出:
s.onUnBind()às.onDestroy();
2.服務已經(jīng)創(chuàng)建
不會導致調(diào)用多次服務的創(chuàng)建(onCreate()和綁定(onBind()),如若解除綁定可調(diào)用unbindService()方法,系統(tǒng)同樣會調(diào)用服務的onUnbind()-àonDestory()方法。
onBind()只有調(diào)用bindService()方法才會觸發(fā)方法的調(diào)用,如果服務已經(jīng)被綁定,該方法不會執(zhí)行多次
onUnbind()方法只有調(diào)用unbindService()方法才會導致該方法的執(zhí)行。
電話錄音服務只是在服務內(nèi)部進行錄音以及調(diào)用PhoneManager對象,許多時候服務在處理業(yè)務后,需要和其它程序進行通信.startService()和stopservice()使用使用者和服務之間沒有交互的情況,否則應該使用bindService()和unbindService()方法。
調(diào)用bindService()方法時:
1. 服務若沒有創(chuàng)建
s.onCreate()-às.onBind()-à服務于訪問者綁定在一起。
如果訪問者退出:
s.onUnBind()-às.onDestroy();
2.服務已經(jīng)創(chuàng)建
不會導致調(diào)用多次服務的創(chuàng)建(onCreate())和綁定(onBind()),如果解除綁定可調(diào)用unbindService()方法,系統(tǒng)同樣會調(diào)用服務的onUnbind()-àonDestroy()方法。
onBind()只有調(diào)用bindService()方法才會觸發(fā)該方法的調(diào)用。如果服務已經(jīng)被綁定,該方法不會被執(zhí)行多次。
onUnbind()方法只有調(diào)用unbindService()方法才會導致該方法的執(zhí)行。
客戶端和服務通過Ibinder對象聯(lián)系在一起。bindService()方法調(diào)用時,需要Intent,ServiceConnection和flag參數(shù),其中serviceConnection對象用于接收服務onBind()方法,返回的Ibinder對象,并且該對象會傳入到第二個參數(shù)serviceConnection對應的方法中,觸發(fā)方法的回調(diào),總而言之,使用客戶端持有到達service對象的引用。
一、Handler的定義:
主要接受子線程發(fā)送的數(shù)據(jù), 并用此數(shù)據(jù)配合主線程更新UI.
解釋: 當應用程序啟動時,Android首先會開啟一個主線程 (也就是UI線程) , 主線程為管理界面中的UI控件,進行事件分發(fā), 比如說, 你要是點擊一個 Button, Android會分發(fā)事件到Button上,來響應你的操作。 如果此時需要一個耗時的操作,例如: 聯(lián)網(wǎng)讀取數(shù)據(jù),或者讀取本地較大的一個文件的時候,你不能把這些操作放在主線程中,如果你放在主線程中的話,界面會出現(xiàn)假死現(xiàn)象, 如果5秒鐘還沒有完成的話,會收到Android系統(tǒng)的一個錯誤提示 "強制關閉". 這個時候我們需要把這些耗時的操作,放在一個子線程中,因為子線程涉及到UI更新,Android主線程是線程不安全的,也就是說,更新UI只能在主線程中更新,子線程中操作是危險的. 這個時候,Handler就出現(xiàn)了來解決這個復雜的問題,由于Handler運行在主線程中(UI線程中),它與子線程可以通過Message對象來傳遞數(shù)據(jù),這個時候,Handler就承擔著接受子線程傳過來的(子線程用sedMessage()方法傳弟)Message對象,(里面包含數(shù)據(jù)) , 把這些消息放入主線程隊列中,配合主線程進行更新UI。
二、Handler一些特點
handler可以分發(fā)Message對象和Runnable對象到主線程中, 每個Handler實例,都會綁定到創(chuàng)建他的線程中(一般是位于主線程),
它有兩個作用: (1): 安排消息或Runnable 在某個主線程中某個地方執(zhí)行, (2)安排一個動作在不同的線程中執(zhí)行
Handler中分發(fā)消息的一些方法
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
以上post類方法允許你排列一個Runnable對象到主線程隊列中,
sendMessage類方法, 允許你安排一個帶數(shù)據(jù)的Message對象到隊列中,等待更新.
三、Handler實例
(1) 子類需要繼承Handler類,并重寫handleMessage(Message msg) 方法, 用于接受線程數(shù)據(jù)
以下為一個實例,它實現(xiàn)的功能為 : 通過線程修改界面Button的內(nèi)容
來LAMP兄弟連就是我給自己的一個新起點,相信來這里的兄弟們的想法也和我一樣。無論我們來自全國的什么地方,無論我們以前有過什么不同的經(jīng)歷,來到這里的我們都一定是想讓自己改變而有一個新的開始,好的發(fā)展。那么,既然我們來了就開始吧!
在這里給大家推薦一首歌,楊培安的《夢想從心開始》,其中主要的歌詞是:夢想從心開始歌手:楊培安
點亮四面和八方
我要活得不一樣
所有堅固的城墻
看我發(fā)熱又發(fā)光
夢想從心開始
只有我能寫下自己的精彩故事
夢境從心開始
未來的路 等我展翅高飛 奔馳好的東西總要和大家分享一下,希望這首歌能給大家?guī)砀嗟年柟?、更多的鼓舞,當你學習疲倦時、遇到疑惑時、遇到困難時都來聽一聽,以此激勵和督促自己。我最喜歡其中的這幾句:
夢想從心開始
只有我能寫下自己的精彩故事
今天是 7 月30 號,上一次的最后的規(guī)劃小結應該是5.21 號吧,算起來有兩期的規(guī)劃小結都沒有寫了。索性這次就將第四期和第五期的規(guī)劃小結一起寫了。
在5.22 到 6.21 號
在第三期結束后的第四期了,最后只完成了ARM USB藍牙移植這一個小的實驗項目
項目又是一周,做完也就是 5.26號了,這時也是應該是在學校的第18周了吧!后來就到了考試周了,不停的考試,然后不停的突擊各科的考試科目,在每天的一小段時間里,應該是從5月28開始,我不不停的在網(wǎng)上開始去需找一些Linux 嵌入式方向的實習職位。幾乎是每天平均有3封求知郵件從我的Gmail 郵箱里發(fā)出去,當然也有很多求知信是直接從智聯(lián),51job 和大街網(wǎng)上發(fā)出去的。應該是平均每兩天收到一個電話恢復,或者是郵件回復,但肯定不都是面試通知,因為自己當時在學校不是在北京,所以僅僅收到一些電話面試,和有些公司的面試安排,其中有redhat 的電話面試,這次電話面試真的是讓我自己搞砸的,我總以為redhat 的電話面試會和英語方面有一定的關系,因為自己英語水平真的很差,所以就著重在英語上好好準備了一下,而對Linux 的基本知識只是簡簡單單的看了一下,總認為自己平時總是在用這些命令,要是他們問起來,我肯定能回答上來。結果就這樣把電話面試搞砸了。后來反正就是不停的投簡歷,不停的接電話,不停的復習,然后不輕的在這一期的規(guī)劃里基本都做了這些事。
6.22—7.9號
這不是一期的時間不過這也算是在這兩期里面一個比較關鍵的時間點吧。因為在這一段時間里,估計簡歷申請就要都一個有結果的時間了,是否有面試安排,是自己決定去北京,去北京如何安排的關鍵影響因素,再加上最后都是專業(yè)課考試。突擊壓力也是比較大。到7月7號我們所有科目考試結束,我收到的5面試。我7月9 火車來北京,10 號到這里。11 號是一個周三的七天,就開始參加面試。面試并不想多說,畢竟只是實習生職位的一些面試經(jīng)歷,沒多大的參考價值,也就不記錄了。但是還是不免嘮叨,有些招實習生職位的公司,完全是為了在招聘網(wǎng)站上給公司打廣告去了。面試的時候提的問題,真是!罷了!不說這些了。
7.10—7.30
就如上面所說,11 號的面試挺讓人失望的,并非我自己Linux 方向專業(yè)能力有問題,而是公司和自己的方向比不是很對口,無論如何最后就有點失望的回到了住所,到了第二天,12號(周四)還有面試,一大早,9點整吧,這個時間是北京公司剛開始上班的時間,有公司能挑這個時間段面試,是挺奇怪的。沒辦法,早早的干到面試公司,9點整,進入公司,開始面試,還是一樣,實習職位面試經(jīng)過不提也罷。面試成功。因為公司是做嵌入式開發(fā)板的,大多是教學用ARM 或者其他開發(fā)板之類的,有點不情愿去。中午打電話去另外一家公司,下午就轉戰(zhàn)去他們公司面試,也是我現(xiàn)在正在實習的公司。公司不必多說,至少方向是我喜歡的那類型。14 號(周四)下午面試通過,通知7.16號( 周一)入職實習。到目為止在公司有兩個周了,那些老生常談的在公司學習和 在學校學習很有差距的話我就不多寫了,經(jīng)歷過就知道了。項目緊天天加班,周末也不例外。但自己畢竟是一個實習生,有時總感覺心有余而力不足啊。雖然在學校的實驗項目也沒少做,但學校的實驗項目,所有代碼都是從網(wǎng)上下載,修改來的。而現(xiàn)在讓你寫,真的不行,曾經(jīng)的自大,曾經(jīng)的不可一世,到現(xiàn)在早已經(jīng)完全沒有了,現(xiàn)在有的就是默默的,虛心的,慢慢的,勤勤懇懇的學習和練習工作。那么在過去的兩個月里,過去的沒得改,就寫寫。以后的,我不要永遠做菜鳥,我也不會永遠做菜鳥。我要找到那個不可一世的自己!
背景:
有兩個圖片,一個是目標背景圖片, 一個是帶有自身背景色彩的彩色圖片
先將這彩色圖片繪制到目標背景圖片中, 這一步通過BITBLT就可實現(xiàn)。 但實現(xiàn)后的效果是: 目標圖片上,繪制上去的彩色圖片帶有其本身的背景。
問題就來了, 我們想將彩色圖片本身的背景去掉,應該如何解決?
解決方法:
使用API函數(shù):TransparentBlt 此函數(shù)將原DC中的圖片繪制到目標DC中,并同時設置原圖形在目標圖形上的透明色。
如本例中,將透明色設置為彩色圖形自帶背景色時, 則使用此函數(shù)后,所得最終圖形上彩色圖形的自身背景色就消除了。
示例:
原理: 通過設置掩碼位圖來實現(xiàn)
1)首先建立掩碼位圖
2)使用掩碼位圖作用于彩色原圖,得到變異新圖(透明色為黑,其他區(qū)域為原色)
3)使用掩碼位圖與目標背景圖相與 (透明區(qū)域為透明色,其他區(qū)域為黑色)
4)使用變異新圖與目標背景圖相或 ,得到最終圖
圖例如下:
希望將上面小圖的自身背景色去掉,得到最終圖
所采取的步驟如下:
前天apple發(fā)布了最新的mountain lion操作系統(tǒng),于是趕緊給mac mini升級了系統(tǒng)。寫篇博客分享一下如何升級mountain lion。
如果你是6月11號之后購買的蘋果電腦,那么你可以免費獲取到升級兌換碼,然后在app store里面點兌換就可以直接升級了。
如果你有mac developer的開發(fā)者帳號,你也可以登陸developer.apple.com去獲取一個mountain lion的兌換碼,還可以獲取mountain lion server的兌換碼的哦。
沒有兌換碼的話你可以選擇花128元rmb升級,也可以自己到網(wǎng)上去下載一個安裝包,4.34G。蘋果的東西不像windows的,不是靠注冊碼,所以只要有安裝包升級,就和花錢升級沒有區(qū)別了。
具體到哪找升級包可以自己google一下哦。
忘了說,升級mountain lion,操作非常簡單。不需要設置什么東西,升級完成之后會自動幫你刪除掉升級包的,如果需要保存升級包全新安裝mountain lion的話,請做好安裝包的備份工作。
時間:2007年5月場合:在一份Android的規(guī)格文檔中話語:觸屏是不可能完全代替物理按鍵的后續(xù):G1手機是一款有著全鍵盤的手機,后續(xù)的真正的G2(不是HTC的)也是有鍵盤的結果:谷歌似已完全放棄了鍵盤手機,更不用說平板了
08年,谷歌推出了G1手機,這個手機雖然擁有鍵盤,但很明顯,觸屏功能是最主要的。兩年多后,還是由t-mobile與谷歌合作,發(fā)布了真正的G2手機,也是有鍵盤的——這是和HTC的G2最明顯的一個區(qū)別。雖然就我個人而言,還是喜歡有鍵盤的手機,但從大趨勢上來看,觸屏正在以勢不可擋的力量,將鍵盤從移動設備中驅逐出去。
作為一個移動設備,輕便是很重要的。鍵盤雖然比觸屏在長篇文字輸入上更有優(yōu)勢,但犧牲的是輕便性——這個道理很淺顯。但并不完全是因為這個。
電腦大致上是由輸入、輸出和算法三樣東西構成的。輸出上,今天已是液晶屏的世界,算法上則有云計算(非本地計算)的變革。輸入端上,我們則看到了一系列的變化。相當古老的輸入裝置是磁帶機,后來演變?yōu)殒I盤,再后來加入了鼠標以做快速屏幕定位。鍵盤為主鼠標為輔的輸入工具,是很長一段時間的電腦標配。
我之所以用鍵盤為主鼠標為輔這樣的字眼,概因為一臺電腦不配鼠標總還是能運作,但不配鍵盤基本就歇菜了。這兩個東西,鍵盤屬于重輸入,鼠標偏向輕輸入。06年的時候,在一場會議中聆聽keso的發(fā)言。他說道,在互聯(lián)網(wǎng)上,用鼠標的人比用鍵盤的人多。這話背后的意思大致就是,數(shù)字世界里,看的人多,寫的人少——這一點,無論是從當時的博客數(shù)據(jù),還是今天的微博數(shù)據(jù),都得到了印證。
在游戲世界里,用鼠標的,通常都是比較簡單的游戲。而大型游戲的高手級玩法,需要動用鍵盤快捷鍵。然而,一旦脫離電腦,游戲的指令輸入,就已經(jīng)發(fā)生了變革。
這就是WII.WII游戲機配有一個無線遙控器,玩家手握這個遙控器做各種動作來完成指令。而到了kinect,連這個遙控器都省了——這是人體動作輸入。人體動作輸入(捕捉)使得使用者無需經(jīng)過一定意義上的培訓(使用鍵盤還是要小小的操練一下子的),立刻便可以上手。這也是經(jīng)??梢钥吹胶苄〉男『⒃谀抢锬芡鎖Pad而玩不了電腦的原因。
觸屏的動作捕捉,極大地降低了使用門檻——想想黑莓那個讓人望而生畏的全鍵盤手機吧。智能手機的另外一個解讀就是“傻瓜化使用的手機”。雖然它是高科技產(chǎn)品,但如果一派技術風范,是很難讓最大范圍上的大眾產(chǎn)生親近感的。
后來推出的iPad2,不僅有觸屏輸入,還提供了另外一種動作輸入的可能,那就是這款設備提供了攝像頭。Kinect就是依靠攝像頭來完成人體動作捕捉的。
動作捕捉還沒完,還有一種輸入法也已經(jīng)從實驗室里走了出來,那就是語音輸入。蘋果的Siri推出后,出現(xiàn)了席卷全球的所謂“調(diào)戲Siri”的實驗。語音輸入目前還有一些問題(比如口音重的人很難得到好的體驗),但它依然是一種傻瓜化的輸入方法。
我個人一直向很多人推薦《鐵甲鋼拳》(Real Steel)這部好萊塢電影。從這部主要是講機器人拳擊的電影中,你會看到若干種“指令輸入”。人類可以用語音來指揮機器人,還可以通過一種形似iPad的東西來觸屏輸入指令,最后,還可以通過自己做一些動作來機器人捕捉并效仿。對比一下其它科幻片里,人類敲擊著鍵盤讓電腦完成各種任務的場景,效率之高低,一目了然。
我總覺得一個企業(yè)并不是沒有靈魂的純粹意義上的多人集合體,企業(yè)有其根深蒂固的基因。谷歌是一個高科技公司,雖然它推出的搜索服務從使用者角度而言非常簡單,但完成這個服務需要極其復雜的運算。在谷歌的習慣性思維里,復雜是一個繞不過去的潛意識。兩位創(chuàng)始人博士雖然沒有畢業(yè),但好歹讀到了這個份上,天然也是往“復雜”里靠的。堅持鍵盤輸入,大概就是這樣的意識驅動:一個可以視為電腦的智能手機,怎么可以沒有鍵盤這種重輸入裝置呢?
但蘋果不是,它其實是一個消費品公司。喬布斯在apple機時代就要求工程師去除電腦的散熱器——這個要求在工程師里眼里很荒唐,但喬布斯的立場是:消費者會被電腦散熱器的嗡嗡聲搞得很煩躁。雖然喬布斯這個很荒唐的想法沒有實現(xiàn),但從中我們的確可以咀嚼出點什么:谷歌要造電腦,是絕不會有這個荒唐的念頭的。
鍵鼠輸入,還是有些機器本位的:人需要學習才能使用機器。動作輸入(觸屏或攝像頭捕捉)、語音輸入,則偏向人本位:人無需學習。只是不得不追問這樣一句話:當我們越來越能傻瓜化地使用智能設備時,我們會不會傻瓜化呢?
創(chuàng)業(yè)四個月,感受頗多,幾點分享:
1.一旦選擇離開以前的環(huán)境創(chuàng)業(yè),必須以最快的速度給自己重新定位,特別是自己以前是企業(yè)中的高管,請盡快放棄隨時一副牛逼很大的樣子。離開了那個組織屬性,其實你什么也不是。
2.永遠不要覺得自己已經(jīng)掌控了一切,沉下去認真分析才是正事。當覺得自己掌控一切的時候,是個極其危險的信號,任何事情都需要有充分的風險保障考慮。
3.關系是需要用心經(jīng)營的,蹲點越低,跳的越高。
4.不要選擇性的去接受自己喜歡的信息,信息本身不因為個人喜好而變化,盡量的去收集信息,信息掌握越全面,做出的決策正確性越高。
5.管理三部曲:布局、造勢、擺平。暗布局,明造勢,借勢擺平!