最新发布 RSS Toggle Comment Threads | 键盘快捷键

  • 柯昌盛 am 10:52 on 2011 年 10 月 4 日 链接地址 | 回复  

    TPK宸鴻董事長─江朝瑞 從大負翁變大富翁 

    少年得志、中年負債、卻又在年近六十再度攀上人生頂峰,身價超過五百億的江朝瑞,靠著堅韌毅力,走過人生和事業的大風大浪。

    堅韌卓絕,是台灣人昂首在全球的本事。

     

    台北市區內的民權東路大橋旁,一棟全新辦公大樓,最近搬來一家神祕的台商公司。在二○○七年六月蘋果iPhone首賣之前,沒有人知道TPK宸鴻是什麼公司。現在,宸鴻成為台股最熱門的「三千金」之一。

     

    宸鴻董事長江朝瑞,三十年前,他是台灣外銷顯示器的大王,現在他是全球最大的觸控感應器供應商,全世界每三台智慧型手機與平板電腦的觸控面板感應器,就有一台來自宸鴻的工廠。

     

    個頭不高,臉上總是堆滿笑容,身價超過五百億元的江朝瑞,這一輩子活得很精彩。少年得志,中年挫敗負債,到了快六十歲再度登上人生的巔峰,「Michael(江朝瑞英文名字)靠的是他堅韌毅力,他相信方向是對的,就會堅持走到底,」身為江朝瑞二十多年老友,宸鴻科技總顧問施國清形容。

     

    下午五點,宸鴻廈門廠健身房,傳出陣陣的桌球聲。「我的人生只有笑與苦笑,五十歲以後,知道什麼不行,比知道什麼行還重要,江朝瑞滿頭汗水,使盡全力殺球,面部表情絲毫沒有一絲的殺氣,反而面帶微笑,這是十五億的一場教訓,所換來的珍貴心得。

    江朝瑞人生大起大落的故事,不願放棄的決心,象徵了台灣人的獨特個性。

     

    身為台北土城農家子弟,江朝瑞在一九七八年大學畢業後,他就拿著家裡給的五萬元創業資金,開始做起顯示器的生意,不到三十歲時,江朝瑞就賺到人生的第一個億元。

     

    TPK宸鴻 壓寶觸控 一夕躍升明星股

     

     

    每天,全球有超過五千萬人的指尖,滑動在蘋果iPhone、iPad觸控面板上,流暢地操作電話、上網、與玩遊戲。卻很少人知道,全世界一半蘋果產品的精密玻璃投射式電容觸控螢幕,來自於TPK宸鴻的廈門工廠。

     

    五十八歲的TPK宸鴻董事長江朝瑞,人生就像是一齣高潮起伏的戲劇。三十歲前,就靠著自己創辦的台灣錄霸,生產當時熱銷的CRT監視器,賺到人生第一桶金。一九八九年,CRT監視器產業受殺價競爭,與經營成本攀高的衝擊,江朝瑞只好跟大多數的台商一樣南進,到印尼設廠。不久,卻慘遭印尼合夥人詐欺,背負十五億元債務。這次的慘痛跌跤,讓江朝瑞重新思考到技術創新,與投資環境透明的重要性。因此二○○四年,他赴廈門投資設廠,就放棄台商聚集的珠三角與長三角。

     

    燒光錢  專注研發觸控技術

     

    江朝瑞的投資眼光,往往能看見別人忽略掉的細節,「當時,廈門才剛爆發遠華走私案,廈門政府徹底改造,是投資環境最清明的年代,」與江朝瑞熟識的正達國際光電董事長鍾志明回憶。

     

    六年前,玻璃投射式電容觸控面板的技術,不被產業界看好,但江朝瑞卻嗅到了「指尖觸控」所帶來的產業革命。

     

    二○○三年,江朝瑞創立TPK宸鴻,他就投入超過十二億元,鑽研觸控技術,幾乎把他過去二十多年來所賺到的錢,全部燒光。為留住關鍵人才,甚至在公司還在燒錢的初期投資階段,他也堅持每年發兩個月年終獎金。八年所累積下來的觸控面板研發實力,終於讓TPK宸鴻敲開蘋果的大門,成為iPhone、iPad的最重要供應商。

     

    二○一○年,TPK宸鴻創下合併營收六二一.三二億元的歷史新高,較前年大幅成長二三二%。

     

    頓時,個頭不高的江朝瑞從負債台商,躍升為外資法人、投資人所追捧的蘋果明星類股。

     

    「方向對了,市場起來只是遲早的問題,」坐在放滿TPK宸鴻觸控產品的會議室,江朝瑞拿著iPad,展示最先進的多點觸控技術,卻也掩不住心中的激動。

     

    江朝瑞的經營管理很講求快速反應,卻不拖泥帶水,從他選設廠地就可看出端倪,TPK宸鴻在廈門機場十分鐘內車程蓋工廠,「客戶與員工只要一下飛機,就可以馬上進入廠區開會,毫不浪費時間,」江朝瑞指出。就連他自己也都住在辦公室附近,只要走路就可以上班。

     

    江朝瑞經歷過人生兩次的大起大落,TPK宸鴻股價衝破七百元大關,「拳王不是把別人打倒才是拳王,而是撐一口氣,讓別人打不倒,」他為TPK宸鴻躍居全球觸控面板龍頭下了最佳註腳。 

     

     

     

     
  • 柯昌盛 am 1:35 on 2011 年 9 月 24 日 链接地址 | 回复  

    只有坚强,只有蜕变成新! 

         时光不在回,故相思明知晓,我还保持这那份爱,你去已离去去,何为情意,何为等待?

    转眼秋天到来,两年飞逝~~我已成长独立,梦飘远,隐隐约约有些不堪回首的记忆,可却也没留下什么过硬的伤痕!

     

    曾经因为多了一份牵挂,好重好重的牵挂……你已成为我生命中的一部分,我开始患得患失,开始敏感,开始为未来做了一系列打算,甚至是一些幻想。你说,过好今天就行。你说,不要想这么多。你说,未来有太多不定性。你说你也不知道未来会怎样,你说你也不确定以后你会怎么想。你的“不确定”确实动摇了我的“坚定”,我终于知道,我的“坚定”也是如此的不确定,只是被你几句话就打碎了......

     

    我只想在你面前,做的更好!......

     

    如今的柯昌盛已经从时间中被解救,现在的我,现实的我,成长的我,才是真正的我......

     

      从来没有像现在这样感情真空过,我知道我长大的了,不会因小事而烦恼,听着情歌流眼泪,在思念别人时失落。。。

    懂得观察,懂得何为珍惜,懂得掩藏内心的不愉快心情。。。

    我时常告诉自己:

    you are not a kid anymore
    你不再是小孩
    You are not a kid
    你不是小孩

     

     
  • 柯昌盛 pm 11:14 on 2011 年 9 月 14 日 链接地址 | 回复  

    修改SQL2005数据库表中所有者 

    文章纯属个人体会和实践,如有错误,请转告于我。大家一起研究一下!
    今天遇到一个问题,就是网站登录后台的时候,出错了,提示找不到admin表。但是在数据库的表中是能够看到的,只是表名略有不同。
    先说说问题吧:
    首先,网站是从别的服务器上转到这个服务器上的,我们都知道网站有数据库的,况且这个网站是SQL2005的数据库,也就是传到这个服务器上之后,我们要附加数据库,但是附加完毕之后,也就需要配置数据库。
    然后我们需要进行新建这个数据库的账号和密码,但是默认原本数据库里面的账号就必须得删除,但是就在删除的时候,出错了!说是用户在架构中存在,我们大家都知道用户默认新建之后会出现在数据库的架构里面,所以要删除此用户,必须先要到架构里面删掉这个用户的架构。
    但是,可惜的是在删除的时候,又出现了错误,也就是数据库的架构在admin的表中已经使用,也就是我在本文开始前的一句话,表名变了,默认的表名一般为dbo_admin ,但是此时的表名为用户名加admin,例如:“51cto_admin”就像这种格式。
    所以,情况恶劣了,就是架构也删不掉,就意味着用户删不掉,也意味着现在的表也不能使用。理所当然的是先要修改表名。但是,表有很多,批量修改表名的命令是有,但是要与储存过程一起使用。
    首当其冲的当然是要新建一个储存过程,但是百度不给力,搜了半天没有结果,根据公司网建加研发的一些人给经验,然后弄出来了。
    解决办法 :
    1、 首先在此数据库里面新建查询,直接复制下面的代码到查询窗口里面,点执行就可以了,代码如下:
    if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[changename]‘)
    and OBJECTPROPERTY(id, N’IsProcedure’) = 1)
    drop procedure [dbo].[changename]
    GO
    SET QUOTED_IDENTIFIER OFF
    GO
    SET ANSI_NULLS OFF
    GO
    Create PROCEDURE dbo.changename
    @OldOwner as NVARCHAR(128),
    @NewOwner as NVARCHAR(128)
    AS
    DECLARE @Name as NVARCHAR(128)
    DECLARE @Owner as NVARCHAR(128)
    DECLARE @OwnerName as NVARCHAR(128)
    DECLARE curObject CURSOR FOR
    select ‘Name’ = name,
    ‘Owner’ = user_name(uid)
    from sysobjects
    where user_name(uid)=@OldOwner
    order by name
    OPEN curObject
    FETCH NEXT FROM curObject INTO @Name, @Owner
    WHILE(@@FETCH_STATUS=0)
    BEGIN
    if @Owner=@OldOwner
    begin
    set @OwnerName = @OldOwner + ‘.’ + rtrim(@Name)
    exec sp_changeobjectowner @OwnerName, @NewOwner
    end
    FETCH NEXT FROM curObject INTO @Name, @Owner
    END
    close curObject
    deallocate curObject
    GO
    SET QUOTED_IDENTIFIER OFF
    GO
    SET ANSI_NULLS ON
    GO
    2、执行完毕之后,也就是存储过程已经建立完毕,然后开始执行,下面的代码,复制之后,修改成你表中的名称,比如我以51CTO_admin为例,代码如下:
    exec Changename ’51CTO’,'dbo’
    3、执行完这两段代码之后,在刷新一下数据库,此时数据库的表就显示为“dbo_admin”这样才算解决完毕。
    其实文章到上面一段已经结束了,不过我还说一下吧!
    这个被上传到这个服务器上的网站属于ASP的,所以他的配置文件在admin的conn文件和conn2文件里面配置。所以新建SQL用户和密码之后,在里面配置进去,就可以了。
    感谢大家的关注,谢谢!

     
  • 柯昌盛 am 12:35 on 2011 年 9 月 13 日 链接地址 | 回复  

    SQL排序技巧 

    1.使用排序使数据有序
    通常,你的所有数据真正需要的仅仅是按某种顺序排列。SQL的ORDER BY语句可以以字母或数字顺序组织数据。因此,相似的值按组排序在一起。然而,这个分组时排序的结果,并不是真的分组。ORDER BY显示每条记录而分组可能代表很多记录。
    2.进行分组除去重复值
    排序和分组之间的最大区别是:排序的数据显示所有记录(在限定标准范围之内),而分组数据不是显示所有记录。GROUP BY语句对于同样的值只显示一条记录。例如,下面的语句中的GROUP BY语句对数据源中重复出现的数据只返回唯一的zip编码列。
    SELECT ZIP FROM Customers GROUP BY ZIP
    只包括由GROUP BY和SELECT语句共同定义的那些记录,换句话说,SELECT列表必须满足GROUP BY列表,但是有一个例外就是SELECT列表可以包含聚合函数(GROUP BY语句不允许使用聚合函数)。需要注意的是GROUP BY语句不会对结果分组进行排序。为了使分组按字母或数字有序排列,需要添加ORDER BY语句。此外,在GROUP BY语句中不能引用使用了别名的字段。分组栏目必须是潜在的数据,但它们并不需要显示在结果中。
    3.在分组之前进行数据筛选
    你可以添加一个WHERE语句来筛选有GROUP BY所得分组中的数据。例如,下面的语句只返回肯塔基州顾客的唯一ZIP编码列。
    SELECT ZIP FROM CustomersWHEREState = ‘KY’ GROUP BY ZIP
    必须注意的是WHERE语句是在GROUP BY语句求值之前进行数据过滤的。与GROUP BY语句一样,WHERE语句也不支持聚合函数。
    4.返回所有分组
    当你使用WHERE语句过滤数据时,结果分组中只显示你指定的那些记录,而符合分组定义但是不满足过滤条件的数据不会包含在某个分组中。当你想在分组中包含所有数据时添加关键字ALL即可,这时WHERE条件就不起作用。例如,在前面的例子中添加关键字ALL就会返回所有的ZIP分组,而不是仅在肯塔基州的那些。
    SELECT ZIP FROM CustomersWHEREState = ‘KY’ GROUP BY ALL ZIP
    这样看来,这两个语句存在冲突,你可能不会以这种方式使用关键字ALL。当你使用聚合函数计算某一列时,使用ALL关键字可能会很方便。例如,下面的语句计算每个肯塔基州ZIP中的顾客数,同时,还会显示其它的ZIP值。
    SELECT ZIP, Count(ZIP) AS KYCustomersByZIP FROM

    CustomersWHEREState = ‘KY’ GROUP BY ALL ZIP
    结果分组包括潜在数据中的所有ZIP值,然而,对于那些不是肯塔基州ZIP分组的聚合列(KYCustomersByZIP)将会显示0。远程查询不支持GROUP BY ALL。
    5.分组后筛选数据
    WHERE语句在GROUP BY语句之前进行计算。当你需要在分组之后筛选数据时,可以使用HAVING语句。通常情况下,WHERE语句和HAVING语句的返回结果是一样的,但是值得注意的是这两个语句不可互换。当你迷惑时,可以遵循下面的说明:使用WHERE语句过滤记录,使用HAVING语句过滤分组。
    一般情况,你会使用HAVING语句和某个聚合函数计算一个分组。例如,下面的语句返回一个唯一的ZIP编码列,但是可能不会包含潜在数据源中所有的ZIP。
    SELECT ZIP, Count(ZIP) AS CustomersByZIP FROM

    Customers GROUP BY ZIP HAVING Count(ZIP) = 1
    只有那些包含一位顾客的分组显示在结果中。
    6.进一步了解WHERE和HAVING语句
    如果你对何时应该使用WHERE,何时使用HAVING仍旧很迷惑,请遵照下面的说明:
    WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。
    HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。
    7.使用聚合函数统计分组数据
    分组数据可以帮助我们分析数据,但是有时我们可能需要更多的信息而不仅仅是分组。你可以使用聚合函数来统计分组数据。例如,下面的语句显示每批订购单的总价钱。
    SELECT OrderID, Sum(Cost * Quantity) AS OrderTotal

    FROM Orders GROUP BY OrderID
    对于其它的分组来说,SELECT和GROUP BY列必须匹配。而SELECT语句包含聚合函数时这一规则是一个例外.

    8.统计聚合数据
    你可以继续统计数据为每个分组显示一个分类统计。SQL的ROLLUP操作符可以为每个分组显示一个额外的分类统计。这个分类统计是使用聚合函数计算每个分组中的所有记录得到的结果。下面的语句为每个分组计算OrderTotal:
    SELECT Customer, OrderNumber, Sum(Cost * Quantity)

    AS OrderTotal FROM Orders GROUP BY Customer,

    OrderNumber WITH ROLLUP
    对于有两个分别为20和25 OderTotal值的分组,ROLLUP显示一个OrderTotal值45。ROLLUP结果中的第一条记录是唯一的,因为它是计算所有分组记录,这个值是整个记录集的总值。
    ROLLUP在聚合函数中不支持 DISTINCT,也不支持GROUP BY ALL语句。
    9.统计每个列
    CUBE操作符比ROLLUP更进一步,它返回每个分组中重复值的个数。它的结果和ROLLUP相同,但是对每位客户的每一列CUBE包含一个额外的记录。下面的语句显示每个分组的统计和额外每位客户的统计。
    SELECT Customer, OrderNumber, Sum(Cost * Quantity)

    AS OrderTotal FROM Orders GROUP BY Customer,

    OrderNumber WITH CUBE
    CUBE可以给最综合的统计。它不仅完成聚合和ROLLUP的功能,还可以计算定义分组的其它列,换句话说,CUBE统计每个可能的列组合。
    CUBE不支持GROUP BY ALL语句。
    10:对统计结果排序
    当CUBE的结果令人迷惑时(它经常是这样),可以添加一个GROUPING函数,如下所示:
    SELECT GROUPING(Customer), OrderNumber,

    Sum(Cost * Quantity) AS OrderTotal FROM Orders GROUP

    BY Customer, OrderNumber WITH CUBE
    结果中每行包含两个额外的值:
    值1表示左边的值是一个统计值,是ROLLUP或CUBE的操作符。
    值0表示左边的值是一条由最初的GROUP BY语句产生的详细记录。

     
  • 柯昌盛 am 7:52 on 2011 年 9 月 10 日 链接地址 | 回复  

    MySQL入门详细的操作 

    创建数据库luowei
    mysql> CREATE DATABASE luowei;

    使用数据库
    mysql> use luowei

    创建表study
    mysql> CREATE TABLE study ( ID bigint(20) NOT NULL AUTO_INCREMENT UNIQUE,  Name varchar(255) NOT NULL, Age int(10),Gender enum(‘F’,'M’)  DEFAULT ‘M’);

    查询表study;
    mysql> SELECT * FROM study;

    查看表的结构:
    mysql> DESC study;
    +——–+—————+——+—–+———+—————-+
    | Field  | Type          | Null | Key | Default | Extra          |
    +——–+—————+——+—–+———+—————-+
    | ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
    | Name   | varchar(255)  | NO   |     | NULL    |                |
    | Age    | int(10)       | YES  |     | NULL    |                |
    | Gender | enum(‘F’,'M’) | YES  |     | M       |                |
    +——–+—————+——+—–+———+—————-+

    插入数据;
    mysql> INSERT INTO study (Name) VALUE (‘luowei’); //单个插入
    mysql> INSERT INTO study (Name) VALUE (‘Qi’),(‘Ro’),(‘RQ’); //批量插入
    mysql> INSERT INTO study SET Name=’Hua’;  //使用SET插入
    mysql> SELECT * FROM study;
    +—-+——–+——+——–+
    | ID | Name   | Age  | Gender |
    +—-+——–+——+——–+
    |  1 | luowei | NULL | M      |
    |  2 | Qi     | NULL | M      |
    |  3 | Ro     | NULL | M      |
    |  4 | RQ     | NULL | M      |
    |  5 | Hua    | NULL | M      |
    +—-+——–+——+——–+
    5 rows in set (0.00 sec)
    这是插入数据后的一个简单的表的内容

    修改表的数据
    mysql> UPDATE study SET Gender=’F’ WHERE ID=2; //把ID=2的Gender改为F
    mysql> UPDATE study SET Gender=’F’ WHERE ID IN (4,5);//批量处理
    mysql> SELECT * FROM study;
    +—-+——–+——+——–+
    | ID | Name   | Age  | Gender |
    +—-+——–+——+——–+
    |  1 | luowei | NULL | M      |
    |  2 | Qi     | NULL | F      |
    |  3 | Ro     | NULL | M      |
    |  4 | RQ     | NULL | F      |
    |  5 | Hua    | NULL | F      |
    +—-+——–+——+——–+

    删除表中的数据
    mysql> DELETE FROM study WHERE ID=5;//删除指定的行
    mysql> SELECT * FROM study;
    +—-+——–+——+——–+
    | ID | Name   | Age  | Gender |
    +—-+——–+——+——–+
    |  1 | luowei | NULL | M      |
    |  2 | Qi     | NULL | F      |
    |  3 | Ro     | NULL | M      |
    |  4 | RQ     | NULL | F      |
    +—-+——–+——+——–+
    但是这个时候如果我们在再次插入的话ID号会从原来删除的编号增加
    mysql> SELECT LAST_INSERT_ID();//显示上次插入的是第几个
    +——————+
    | LAST_INSERT_ID() |
    +——————+
    |                5 |
    +——————+
    mysql> INSERT INTO study (Name) VALUE (‘aQ’);
    mysql> SELECT * FROM study;
    +—-+——–+——+——–+
    | ID | Name   | Age  | Gender |
    +—-+——–+——+——–+
    |  1 | luowei | NULL | M      |
    |  2 | Qi     | NULL | F      |
    |  3 | Ro     | NULL | M      |
    |  4 | RQ     | NULL | F      |
    |  6 | aQ     | NULL | M      |
    +—-+——–+——+——–+
    看到了吧,不是依次增长的,而是有间隔,现在我们在删除了ID为6的行,然后插入设置他的ID为5,接着再自动插入;
    mysql> DELETE FROM study WHERE ID=6;
    mysql> INSERT INTO study SET ID=5,Name=’pk’;
    mysql> INSERT INTO study (Name) VALUE (‘jk’);
    mysql> SELECT * FROM study;
    +—-+——–+——+——–+
    | ID | Name   | Age  | Gender |
    +—-+——–+——+——–+
    |  1 | luowei | NULL | M      |
    |  2 | Qi     | NULL | F      |
    |  3 | Ro     | NULL | M      |
    |  4 | RQ     | NULL | F      |
    |  5 | pk     | NULL | M      |
    |  7 | jk     | NULL | M      |
    +—-+——–+——+——–+
    可以看出还是不会按照我们的意思让他接着自动增长,这个时候我们可以通过设置,让他重新按照我们设置的为起点自动增长
    mysql> DELETE FROM study WHERE ID=7;
    mysql> ALTER TABLE study AUTO_INCREMENT=5;//设置自动增长的起点
    mysql> INSERT INTO study (Name) VALUE (‘jk’);
    mysql> INSERT INTO study (Name) VALUE (‘OL’);
    mysql> SELECT * FROM study;
    +—-+——–+——+——–+
    | ID | Name   | Age  | Gender |
    +—-+——–+——+——–+
    |  1 | luowei | NULL | M      |
    |  2 | Qi     | NULL | F      |
    |  3 | Ro     | NULL | M      |
    |  4 | RQ     | NULL | F      |
    |  5 | pk     | NULL | M      |
    |  6 | jk     | NULL | M      |
    |  7 | OL     | NULL | M      |
    +—-+——–+——+——–+
    又OK了,我估计QQ在设置QQ号的时候也是通过这种方式,保留小于5位的QQ号,所有大家用的都是7位以上的(题外话,呵呵)。

    修改表结构
    如果想插入一个新的字段,可以使用ALTER来修改
    mysql> DESC study;//原本表的结构
    +——–+—————+——+—–+———+—————-+
    | Field  | Type          | Null | Key | Default | Extra          |
    +——–+—————+——+—–+———+—————-+
    | ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
    | Name   | varchar(255)  | NO   |     | NULL    |                |
    | Age    | int(10)       | YES  |     | NULL    |                |
    | Gender | enum(‘F’,'M’) | YES  |     | M       |                |
    +——–+—————+——+—–+———+—————-+
    mysql> ALTER TABLE study ADD Work INT ;
    mysql> DESC study;
    +——–+—————+——+—–+———+—————-+
    | Field  | Type          | Null | Key | Default | Extra          |
    +——–+—————+——+—–+———+—————-+
    | ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
    | Name   | varchar(255)  | NO   |     | NULL    |                |
    | Age    | int(10)       | YES  |     | NULL    |                |
    | Gender | enum(‘F’,'M’) | YES  |     | M       |                |
    | Work   | int(11)       | YES  |     | NULL    |                |
    +——–+—————+——+—–+———+—————-+
    默认插入最后一行,如果想插入指定的行,可以使用AFTER,FIRST等参数
    mysql> ALTER TABLE study ADD Master VARCHAR(30) AFTER Gender;
    mysql> DESC study;
    +——–+—————+——+—–+———+—————-+
    | Field  | Type          | Null | Key | Default | Extra          |
    +——–+—————+——+—–+———+—————-+
    | ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
    | Name   | varchar(255)  | NO   |     | NULL    |                |
    | Age    | int(10)       | YES  |     | NULL    |                |
    | Gender | enum(‘F’,'M’) | YES  |     | M       |                |
    | Master | varchar(30)   | YES  |     | NULL    |                |
    | Work   | int(11)       | YES  |     | NULL    |                |
    +——–+—————+——+—–+———+—————-+
    这就把新插入的字段放在了Gender的后面了
    如果我们想把原来的表中字段的名字改一下,比如我想把Work改成work
    mysql> ALTER TABLE study CHANGE Work work INT;//修改表中的字段
    mysql> DESC study;
    +——–+—————+——+—–+———+—————-+
    | Field  | Type          | Null | Key | Default | Extra          |
    +——–+—————+——+—–+———+—————-+
    | ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
    | Name   | varchar(255)  | NO   |     | NULL    |                |
    | Age    | int(10)       | YES  |     | NULL    |                |
    | Gender | enum(‘F’,'M’) | YES  |     | M       |                |
    | Master | varchar(30)   | YES  |     | NULL    |                |
    | work   | int(11)       | YES  |     | NULL    |                |
    +——–+—————+——+—–+———+—————-+
    可以实现效果
    当让还可以通过使用MODIFY来试下对表中字段的属性进行设置
    mysql> ALTER TABLE study MODIFY work VARCHAR(30) NOT NULL ;
    mysql> DESC study;
    +——–+—————+——+—–+———+—————-+
    | Field  | Type          | Null | Key | Default | Extra          |
    +——–+—————+——+—–+———+—————-+
    | ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
    | Name   | varchar(255)  | NO   |     | NULL    |                |
    | Age    | int(10)       | YES  |     | NULL    |                |
    | Gender | enum(‘F’,'M’) | YES  |     | M       |                |
    | Master | varchar(30)   | YES  |     | NULL    |                |
    | work   | varchar(30)   | NO   |     | NULL    |                |
    +——–+—————+——+—–+———+—————-+
    但是如果你表中原本work中没有字段的话,会有warning,所以在你做的时候可以先添加数据,然后在修改。
    随着发展,我发现后面的work这个字段没用了,想删除study表中的这个属性
    mysql> ALTER TABLE study DROP work;
    mysql> DESC study;
    +——–+—————+——+—–+———+—————-+
    | Field  | Type          | Null | Key | Default | Extra          |
    +——–+—————+——+—–+———+—————-+
    | ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
    | Name   | varchar(255)  | NO   |     | NULL    |                |
    | Age    | int(10)       | YES  |     | NULL    |                |
    | Gender | enum(‘F’,'M’) | YES  |     | M       |                |
    | Master | varchar(30)   | YES  |     | NULL    |                |
    +——–+—————+——+—–+———+—————-+
    当然如果我们表中有索引(目前),也可以使用DROP删除索引
    mysql> SHOW INDEX FROM study;//查看表的索引
    mysql> ALTER TABLE study ADD INDEX index_name(Name);//添加索引
    也可以私用KEY(mysql> ALTER TABLE study ADD KEY index_name(Name);)
    mysql> SHOW INDEX FROM study;
    +——-+————+————+————–+————-+———–+————-+———-+——–+——+————+———+
    | Table | Non_unique | Key_name   | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
    +——-+————+————+————–+————-+———–+————-+———-+——–+——+————+———+
    | study |          0 | ID         |            1 | ID          | A         |           7 |     NULL | NULL   |      | BTREE      |         |
    | study |          1 | index_name |            1 | Name        | A         |        NULL |     NULL | NULL   |      | BTREE      |         |
    +——-+————+————+————–+————-+———–+————-+———-+——–+——+————+———+
    mysql> ALTER TABLE study DROP INDEX index_name;//删除索引
    现在我觉得表明有点长,想换一个短的来方便下面的实验,当然在实际的过程中,我们应该见名知意
    mysql> ALTER TABLE study RENAME TO st;//把表名从study改成st
    mysql> SHOW TABLES;
    +——————+
    | Tables_in_luowei |
    +——————+
    | st               |
    +——————+
    想查看当前的数据库可以使用一下命令
    mysql> SELECT DATABASE();
    mysql> SHOW TABLES;//显示当前数据库中的表

    mysql> SELECT * FROM st;
    +—-+——–+——+——–+——–+
    | ID | Name   | Age  | Gender | Master |
    +—-+——–+——+——–+——–+
    |  1 | luowei | NULL | M      | NULL   |
    |  2 | Qi     | NULL | F      | NULL   |
    |  3 | Ro     | NULL | M      | NULL   |
    |  4 | RQ     | NULL | F      | NULL   |
    |  5 | pk     | NULL | M      | NULL   |
    |  6 | jk     | NULL | M      | NULL   |
    |  7 | OL     | NULL | M      | NULL   |
    +—-+——–+——+——–+——–+
    这里我只有一个表,现在我修改一下表中的数据,把Master的类型改为INT,并添加一些数据在里面
    mysql> ALTER TABLE st CHANGE MODIFY Master INT;
    mysql> UPDATE st SET Master=1 WHERE ID=1;
    mysql> UPDATE st SET Master=2 WHERE ID=2;
    mysql> UPDATE st SET Master=3 WHERE ID=3;
    mysql> UPDATE st SET Master=4 WHERE ID=4;
    mysql> UPDATE st SET Master=7 WHERE ID=5;
    mysql> UPDATE st SET Master=8 WHERE ID=6;
    mysql> UPDATE st SET Master=5 WHERE ID=7;
    mysql> SELECT * FROM st;
    +—-+——–+——+——–+——–+
    | ID | Name   | Age  | Gender | Master |
    +—-+——–+——+——–+——–+
    |  1 | luowei | NULL | M      |      1 |
    |  2 | Qi     | NULL | F      |      2 |
    |  3 | Ro     | NULL | M      |      3 |
    |  4 | RQ     | NULL | F      |      4 |
    |  5 | pk     | NULL | M      |      7 |
    |  6 | jk     | NULL | M      |      8 |
    |  7 | OL     | NULL | M      |      5 |
    +—-+——–+——+——–+——–+
    现在表的基本情况如上所示。当然我们为了方便记录Master,使用是INT来标,其实Master是一个姓名,所以我们再建立一个新表mt,来记录Master的对应的关系
    mysql> CREATE TABLE mt(
        -> id INT NOT NULL UNIQUE AUTO_INCREMENT ,
        -> name VARCHAR(30) NOT NULL );
    mysql> INSERT INTO mt (name) VALUE (‘A’);
    ……
    自己多插入几行,我这里就省略了
    mysql> SELECT * FROM mt;
    +—-+——+
    | id | name |
    +—-+——+
    |  1 | A    |
    |  2 | B    |
    |  3 | C    |
    |  4 | D    |
    |  5 | E    |
    |  6 | F    |
    +—-+——+
    好了现在两个表准备好了,接下来我将做一下多表之间的查询
    多表之间的查询可以分为:
      交叉查询:笛卡尔乘积,两表相乘;
      内连接:对称连接,就是显示两个表中都有的,一个表中如果没有,就不显示了;
      外连接:非对称连接
        左外连接:LEFT JOIN ON 左表中的都显示,右表中无的话显示为NULL
        右外连接:RIGHT JOIN ON 右表中的都显示,左表中无的话显示为NULL
      自连接:一个表中的一列建立在同张表的另一列;
      UNION:连接两个表;
    接下来分别对上面的情况进行实验;
    1.交叉查询:
    mysql> SELECT * FROM st,mt;
    42 rows in set (0.00 sec)//中间的数据就省略了,这里的结果就是两个表的行数相乘的结果;
    2.内连接:
    mysql> SELECT st.Name,mt.name FROM st,mt WHERE st.Master=mt.id;
    +——–+——+
    | Name   | name |
    +——–+——+
    | luowei | A    |
    | Qi     | B    |
    | Ro     | C    |
    | RQ     | D    |
    | OL     | E    |
    +——–+——+
    3.左外连接:
    mysql> SELECT st.Name,mt.name FROM st LEFT JOIN  mt  ON st.Master=mt.id;
    +——–+——+
    | Name   | name |
    +——–+——+
    | luowei | A    |
    | Qi     | B    |
    | Ro     | C    |
    | RQ     | D    |
    | pk     | NULL |
    | jk     | NULL |
    | OL     | E    |
    +——–+——+
    这时候我们可以看到,凡是左表中有的,都显示了,右表中没有的都显示为NULL了;
    4.右外连接:
    mysql> SELECT st.Name,mt.name FROM st RIGHT JOIN  mt  ON st.Master=mt.id;
    +——–+——+
    | Name   | name |
    +——–+——+
    | luowei | A    |
    | Qi     | B    |
    | Ro     | C    |
    | RQ     | D    |
    | OL     | E    |
    | NULL   | F    |
    +——–+——+
    5.自连接:
    mysql> SELECT k1.Name,k2.Gender FROM st AS k1,st AS k2 WHERE k1.ID = k2.Master;
    +——–+——–+
    | Name   | Gender |
    +——–+——–+
    | luowei | M      |
    | Qi     | F      |
    | Ro     | M      |
    | RQ     | F      |
    | OL     | M      |
    | pk     | M      |
    +——–+——–+
    6.UNION;
    mysql> SELECT ID AS new_id,Name AS new_name FROM st UNION SELECT id AS new_id,name AS new_name FROM mt;
    +——–+———-+
    | new_id | new_name |
    +——–+———-+
    |      1 | luowei   |
    |      2 | Qi       |
    |      3 | Ro       |
    |      4 | RQ       |
    |      5 | pk       |
    |      6 | jk       |
    |      7 | OL       |
    |      1 | A        |
    |      2 | B        |
    |      3 | C        |
    |      4 | D        |
    |      5 | E        |
    |      6 | F        |
    +——–+———-+
    13 rows in set (0.00 sec)这样就把两个表连接到了一起了。

    多表操作就到此了,接下来要说的是数据库中的视图,子查询,事务,同步的相关知识了;
    我就以st这个表为基础:
    mysql> SELECT * FROM st;
    +—-+——–+——+——–+——–+
    | ID | Name   | Age  | Gender | Master |
    +—-+——–+——+——–+——–+
    |  1 | luowei | NULL | M      |      1 |
    |  2 | Qi     | NULL | F      |      2 |
    |  3 | Ro     | NULL | M      |      3 |
    |  4 | RQ     | NULL | F      |      4 |
    |  5 | pk     | NULL | M      |      7 |
    |  6 | jk     | NULL | M      |      8 |
    |  7 | OL     | NULL | M      |      5 |
    +—-+——–+——+——–+——–+
    视图:就是建立在基表上执行查询语句的一系列的虚表
    创建视图:
    mysql> CREATE VIEW view AS SELECT ID,Name,Gender FROM st;//创建一个查询显示ID,Name,Gender的视图;
    mysql> SELECT * FROM view;
    +—-+——–+——–+
    | ID | Name   | Gender |
    +—-+——–+——–+
    |  1 | luowei | M      |
    |  2 | Qi     | F      |
    |  3 | Ro     | M      |
    |  4 | RQ     | F      |
    |  5 | pk     | M      |
    |  6 | jk     | M      |
    |  7 | OL     | M      |
    +—-+——–+——–+
    删除视图可以使用
    mysql> DROP VIEW view;
    子查询语句:(其实MySQL的子查询支持的还不是很好)
    mysql> SELECT * FROM view WHERE ID > 0;
    我就借用刚建立的视图进行查询,其实这个是多此一举的做法,呵呵,只是演示一下效果,当让在工作中可能会遇到更多的问题的。

    事务:transact
    事务就是几个Sql语句要么都执行,要么都不执行,这样就防治一方执行,另一方没执行,从而产生虚拟的假象,比如A通过银行向B转账,如果这个时候A刚转出去,B那边的断电了(假设,其实这样的事出现的概率还是蛮小的,呵呵),所以等A和B见面之后,就说不清了,所以事务就是如果两个都没实现,就是A发送成功,B接受成功,才能算是真正的成功,所以这样就能避免不必要的损失。
    接下来介绍一下事务隔离的级别:
    1.读未提交 READ UNCOMMITED
    2.读提交 READ COMMITED
    3.可重读 REPEATABLE READ 默认
    4.串行化 SERIABLIZABLE
    从1–>4隔离级别依次增加,并发性依次降低
    mysql> SHOW VARIABLES LIKE ‘tx_isolation’;//查看系统使用的默认的隔离级别
    +—————+—————–+
    | Variable_name | Value           |
    +—————+—————–+
    | tx_isolation  | REPEATABLE-READ |
    +—————+—————–+

    但是如果我们的数据库使用的引擎是MyISAM的话,就不支持事务,查看数据库使用的引擎命令如下
    mysql> SHOW ENGINES;或使用SHOW TABLE STATUS LIKE ‘st’;或使用SHOW TABLE STATUS ;都能查看
    +————+———+—————————————————————-+
    | Engine     | Support | Comment                                                        |
    +————+———+—————————————————————-+
    | MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance         |
    | MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables      |
    | InnoDB     | YES     | Supports transactions, row-level locking, and foreign keys     |
    | BerkeleyDB | YES     | Supports transactions and page-level locking                   |
    | BLACKHOLE  | NO      | /dev/null storage engine (anything you write to it disappears) |
    | EXAMPLE    | NO      | Example storage engine                                         |
    | ARCHIVE    | NO      | Archive storage engine                                         |
    | CSV        | NO      | CSV storage engine                                             |
    | ndbcluster | NO      | Clustered, fault-tolerant, memory-based tables                 |
    | FEDERATED  | NO      | Federated MySQL storage engine                                 |
    | MRG_MYISAM | YES     | Collection of identical MyISAM tables                          |
    | ISAM       | NO      | Obsolete storage engine                                        |
    +————+———+—————————————————————-+
    显示为DEFAULT的是默认使用的引擎,应为这个时候数据库不支持事务,为了演示事务的效果,我把mysql的引擎改为InnoDB ,使用如下命令:
    mysql> SET SESSION storage_engine = InnoDB;
    然后在这个引擎的基础上建立一个表
    mysql> CREATE TABLE tt (
        -> tid INT UNIQUE NOT NULL AUTO_INCREMENT,
        -> tname VARCHAR(30) NOT NULL,
        -> tage INT);
    插入数据如下图所示,当然你可以自己随便添加表中的数据
    mysql> SELECT * FROM tt;
    +—–+——-+——+
    | tid | tname | tage |
    +—–+——-+——+
    |   1 | ser   | NULL |
    |   2 | linux | NULL |
    |   3 | php   | NULL |
    +—–+——-+——+
    查看当前表的存储引擎
    mysql> SHOW TABLE STATUS LIKE ‘tt’;
    显示的结果是InnoDB的引擎;
    1.设置为READ UNCOMMITTED(读未提交)的级别
    mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;//修改隔离级别为READ UNCONMMITED显示为REPEATABLE-READ
    mysql> SHOW VARIABLES LIKE ‘tx_isolation’;
    +—————+——————+
    | Variable_name | Value            |
    +—————+——————+
    | tx_isolation  | READ-UNCOMMITTED |
    +—————+——————+
    这个级别下,如果两个事务同时进行,任何一方的改变,对方都能看到,因为我们在设置的时候采用的是SESSION,会话的模式,所以两个终端都要进行READ UNCOMMITTED设置

    所以这个的设置的并发性最好,但是受到的影响却是最大的
    2.设置为READ COMMITED(读提交)级别
    这个级别下,当其中的任意一个事务提交了,其他处于事务状态的就能同步到信息,如下图是没有提交之前的图,这个时候还不能看到


     
    如果B的事务提交了,再来看看这个结果,如下图所示:

    尽管A没有提交,但是也能看到信息了
    3.设置为REPEATABLE READ(可重读)级别
    如果设置为这个级别的话,两个同时进行的事务,相互不受影响,只用当两个事务都提交了才能看到所有变化的信息,否则,各自只能看到自己完成的
    我现在打开两个终端A、B,同时进入事务
    mysql> START TRANSACTION;//A进入事务状态
    mysql> START TRANSACTION;//B进入事务状态
    然后我在B事务状态下向表进行插入一行数据,然后在两个表中都查看,结果发现数据不一样,如下图所示:

    如果我现在把B的事务提交了,再在A、B上查看,发现只有B上的有新插入的一行,而A任然没有,如图所示:

    如果我现在把A的也提交了,在查看的话,两个就会出现数据同步了,如图所示:

    这就是REPEATABLE READ级别的效果,就是两个事务操作的时候相互不干扰,只有当两个事务都提交了,数据才会同步。
    4.设置为SERIABLIZABLE级别
    这个时候只有当前一个事务执行完成并提交了,下一个事务才开始,做了更加严格的限制,所以一般不做这样的级别限制
     
    同步:(clock)
      通过锁机制来解决同步问题
      锁:
        共享锁(读锁):
        独占锁(写锁): 
        写锁的优先级高于读锁
        锁级别:
          表锁,行锁,页锁(内存空间)
        锁的实现:
          服务器级别的;只能实现表锁
          存储引擎级别的:可以实现行锁
        >LOCK TABLES tab_name READ;加锁
        >UNLOCK TABLES;释放锁
        (注意:如果在InnoDB中,定义时候并不生效,只有真正的事务开始,
         定义的锁才生效)
        降低粒度,可以更好的支持并发性,这样锁的颗粒就越小,类似行锁,锁的
        范围小一些。
     
    MYSQL的用户管理:
    创建用户
    CREATE USER username@host
    删除用户
    DROP USER username@host
    授权
    GRANT PRIV_LIST ON db.table TO username@host [IDENTIFIED BY 'redhat'];
    收回权限
    REVOKE priv_list ON db.table FROM username@host;
    WITH GRANT OPTION 同时把授权也一并授权给他
    设置其使用的资源:
    WITH MAX_QUERIES_PER_HOUT N;每个小时只能做N次查询
    WITH MAX_UPDATES_PER_HOUT N每个小时只能做N次更新
    WITH MAX_CONNECTIONS_PER_HOUT N  每个小时只能做N次连接
    WITH MAX_USER_CONNECTIONS N 每个用户同时最大连接数
    FLUSH USER_RESOURCES;
    GRANT SELECT(name) ON db.table TO uername@host;字段级别的权限
    执行存储过程的权限
    GRANT EXECUTE ON XXXX TO username@host
     
     
    忘记MySQL的密码:
    方法1.重装数据库
    方法2.
    vim /etc/init.d/mysqld
    先停止MySQL服务
    #service mysqld stop
    找到mysqld的二进制文件的位置,我这里就在/user/local/mysql/下
    #/user/local/mysql/bin/mysqld_safe –skip-grant-tables –skip-networking & 后台运行安全模式
    然后连接数据库
    #mysql
    >use mysql
    >UPDATE user SET Password=PASSWORD(‘redhat’) WHERE User=’root’ AND Host=’localhost’;
    >UPDATE user SET Password=PASSWORD(‘redhat’) WHERE User=’root’ AND Host=’127.0.0.1′;
    #killall mysqqld
    #service mysqld start
    #mysql -uroot -p  登录
     
     
     
     
     
    作者 “IT梦-齐-分享”

     
  • 柯昌盛 am 7:50 on 2011 年 9 月 10 日 链接地址 | 回复  

    mysql学习之基础篇 

      mysql 作为一款开源软件,拥有良好的性能服务于各中小企业,小介绍下几个重要的数据库产品及使用的地方
     大型企业
       oracle
       sybase
       informix
       DB2
      中小型企业
       SQL Server
       MYSQL
       PostgreSQL 支持集群和实务较好,恢复机制不行
           EnterpriseDB
    mirror.souhu.com
    MYSQL
       MariaDB 原mysql开发者在mysql被oracle收购后开发的
       企业版
       社区版
    mysql的工作模式如下图


     
    作为LAMP重要组成的mysql ,其配置文件的查找顺序:
    /etc/my.cnf
     /etc/mysql/my.cnf
     $MYSQL_HOME/my.cnf
     /path/to/file when default-extra-file=/path/to/file is specified
     ~/.my.cnf
     mysql 常用选项
         \c   取消本条语句
         \d   修改结束符   
         \g   忽略默认的结束符,直接送服务器端处理
         \G  
      
    数据库管理
        
       mysqladmin
           mysqladmin [options] command [arg] [command[art]]…
           mysqladmin -h host ping  测试服务器工作情况 
                              debug 错误日志在数据文件下
           mysqladmin create databasename
           mysqladmin drop databasename
           mysqladmin extended-status  显示运行状态
           mysqladmin flush-logs
                        flush-status  重置变量的值
                        flush-tables  关闭当前打开表的句柄
           mysqladmin flush-privileges   刷新权限
           mysqladmin processlist 显示进程列表
           mysqladmin start-slave
                      version 显示版本号和当前信息
                      status  显示当前数据库信息 –sleep num –count num
           mysqladmin variables  显示变量
          
         top -d 3 -n 2
    mysql> show variables like ‘%变量%’;
           show variables like ‘datadir’;
           show status;== mysqladmin extended-status
           show processlist  ==  mysqladmin processlist 显示进程列表
           show variables  == mysqladmin variables
    时间类型
        date  yy-mm-dd
        time  hhmmss
        datetime yymmddhhmmss
        year 2011 11
     
    类型
       字符                     字符数
          char(num)           255
          varchar(num)     65535
          
       浮点型   
          collation 排序方式
          character
          binary(–)
          float
          double
       属性
          not null
          null
          default
      show character set;  显示所有字符集
      show collation;       排序方式
        数值
          auto_increment 必须是主键或唯一键,与not null
          unsigned   无符号类型
          int(num) 定义显示长度,固定类型长度为4
        布尔
          0 真
          1 假
        枚举和集合
          enum   enum(‘–’,'–’) default ‘–’
          set
    使用insert 插入数据时values 中的值定义
        如果是字符串 必须用‘—’
        如果是int类型  直接写数字
    mysql 模型  定义所接受sql语句格式、数据类型在违反定义的时候能否插入数值
         变量类型
             全局变量 show global variables
                 对每一个新建立的会话都生效
             会话变量 show session variables
                 只对当前会话生效
         修改类型
             set sql_mode=’—’
             set global sql_mode=’—’
         常用模式
            ansi quotes   定义符号
            ignore_space  忽略内建函数
            strict_all_tables 所有非法数据不允许插入
            traditional   传统模式
           
    大小写
       触发器区分大小写
       别名区分大小写
       binary 类型区分
       数据库和表的名字的大小写与操作系统支持的类型有关
    数据库
      
    create database if [not] exists databasename character set ‘—’ collate ‘–’; 
    show create database basename; 查看创建时的字符集    
    alter database basename character set ‘—’
    alter database basename clooate ‘—’ 

       key (键,constraints )index
          候选键
          主键  primary key
          唯一键 unique key  允许出现空值
          外键 foreign key 多个表之间建立关系
              存储引擎必须支持事务
              show engines;显示所有存储引擎 default 默认
              存储引擎是表级别的 InnoDB
          索引 降低更新
                 提高查询效率

     
  • 柯昌盛 am 7:46 on 2011 年 9 月 10 日 链接地址 | 回复  

    用一条SQL快速生成10万条测试数据 

    数据库开发或管理的人经常要创建大量的测试数据,动不动就需要上万条,如果一条一条的录入,那会浪费大量的时间,本文介绍了Oracle中如何通过一条SQL快速生成大量的测试数据的方法。
    产生测试数据的SQL如下:
    select rownum as id, to_char(sysdate + rownum / 24 / 3600, ‘yyyy-mm-dd hh24:mi:ss’)
           as inc_datetime,
           trunc(dbms_random.value(0, 100)) as random_id,
           dbms_random.string(‘x’, 20) random_string   
     from dual  connect by level <= 10;  
     上面SQL是利用了Oracle数据库语法的几个实用小技巧实现的:
    1、利用Oracle特有的“connect by”树形连接语法生成测试记录,“level <= 10”表示要生成10记录;
    2、利用rownum虚拟列生成递增的整数数据;
    3、利用sysdate函数加一些简单运算来生成日期数据,本例中是每条记录的时间加1秒;
    4、利用dbms_random.value函数生成随机的数值型数据,本例中是生成0到100之间的随机整数;
    5、利用dbms_random.string函数生成随机的字符型数据,本例中是生成长度为20的随机字符串,字符串中可以包括字符或数字。
    ok,那要生成10万条测试记录表可以用如下SQL:
     
    create table myTestTable as    
    select rownum as id,   
                   to_char(sysdate + rownum/24/3600, ‘yyyy-mm-dd hh24:mi:ss’) as inc_datetime,   
                   trunc(dbms_random.value(0, 100)) as random_id,   
                   dbms_random.string(‘x’, 20) random_string   
              from dual   
            connect by level <= 100000;
     
     
     
     作者 “ERDP技术架构”

     
  • 柯昌盛 am 7:45 on 2011 年 9 月 10 日 链接地址 | 回复  

    MYSQL性能调优及架构设计-影响MYSQL性能的相关因素之实例分析 

     

    需求概述

    一个简单的讨论区系统,需要有用户,用户组,组讨论区这三部分基本功能

    简要分析

    1) 须要存放用户数据的表;

    2) 须要存放分组信息和用户与组关系的表;

    3) 须要存放讨论信息的表

     

    解决方案

    原始方案一:

    分别用4个表来存放用户,用户组,用户与组关系,以及各组的讨论帖子的信息。

    user用户表

     

    Field

    Type

    Null

    Key

    Default

    Extra

    id

    int(11)

    NO

     

     

     

    nick_name

    varchar(32)

    NO

     

    NULL

     

    password

    char(64)

    YES

     

    NULL

     

    email

    varchar(32)

    NO

     

    NULL

     

    status

    varchar(16)

    NO

     

    NULL

     

    sexuality

    char(1)

    NO

     

    NULL

     

    msn

    varchar(32)

    YES

     

    NULL

     

    sign

    varchar(64)

    YES

     

    NULL

     

    brithday

    date

    YES

     

    NULL

     

    hobby

    varchar(64)

    YES

     

    NULL

     

    location

    varchar(64)

    YES

     

    NULL

     

    description

    varchar(1024)

    YES

     

    NULL

     

     

    groups分组表

     

    Field

    Type

    Null

    Key

    Default

    Extra

    id

    int(11)

    NO

     

     

     

    gmt_create

    datetime

    NO

     

    NULL

     

    gmt_modified

    datetime

    NO

     

    NULL

     

    name

    varchar(32)

    NO

     

    NULL

     

    status

    varchar(16)

    NO

     

    NULL

     

    description

    varchar(1024)

    YES

     

    NULL

     

     

    user_group关系表

     

    Field

    Type

    Null

    Key

    Default

    Extra

    user_id

    int(11)

    NO

    MUL

    NULL

     

    group_id

    int(11)

    NO

    MUL

    NULL

     

    user_type

    int(11)

    NO

     

    NULL

     

    gmt_create

    datetime

    NO

     

    NULL

     

    gmt_modified

    datetime

    NO

     

    NULL

     

    status

    varchar(16)

    NO

     

    NULL

     

     

    group_message讨论组帖子表

     

    Field

    Type

    Null

    Key

    Default

    Extra

    id

    int(11)

    NO

     

    NULL

     

    gmt_create

    datetime

    NO

     

    NULL

     

    gmt_modified

    datetime

    NO

     

    NULL

     

    group_id

    int(11)

    NO

     

    NULL

     

    user_id

    int(11)

    NO

     

    NULL

     

    subject

    varchar(128)

    NO

     

    NULL

     

    content

    text

    YES

     

    NULL

     

     

    优化后方案二如下

    user用户表分成user用户表与user_profile表

    group_message讨论组表分成group_message讨论组与group_message_content

    user用户表

     

    Field

    Type

    Null

    Key

    Default

    Extra

    id

    int(11)

    NO

     

     

     

    nick_name

    varchar(32)

    NO

     

    NULL

     

    password

    char(64)

    YES

     

    NULL

     

    email

    varchar(32)

    NO

     

    NULL

     

    status

    varchar(16)

    NO

     

    NULL

     

     

    user_profile用户属性表

     

    Field

    Type

    Null

    Key

    Default

    Extra

    id

    int(11)

    NO

     

     

     

    sexuality

    char(1)

    NO

     

    NULL

     

    msn

    varchar(32)

    YES

     

    NULL

     

    sign

    varchar(64)

    YES

     

    NULL

     

    brithday

    date

    YES

     

    NULL

     

    hobby

    varchar(64)

    YES

     

    NULL

     

    location

    varchar(64)

    YES

     

    NULL

     

    description

    varchar(1024)

    YES

     

    NULL

     

     

    group_message讨论组帖子表

     

    Field

    Type

    Null

    Key

    Default

    Extra

    id

    int(11)

    NO

     

    NULL

     

    gmt_create

    datetime

    NO

     

    NULL

     

    gmt_modified

    datetime

    NO

     

    NULL

     

    group_id

    int(11)

    NO

     

    NULL

     

    user_id

    int(11)

    NO

     

    NULL

     

    subject

    varchar(128)

    NO

     

    NULL

     

    author

    varchar(32)

    NO

     

    NULL

     

     

    group_message_content帖子内容表

     

    Field

    Type

    Null

    Key

    Default

    Extra

    group_msg_id

    int(11)

    NO

     

     

     

    content

    text

    NO

     

    NULL

     

    分析考虑:

    1. 从实际出发,一个讨论区系统,访问最多的页面应该是帖子标题列表页面。而帖子标题列表页面最主要的信息都来自于group_message表中,同时帖子标题后面的作者一般都是通过用户名(昵称)来展示。因此:

    1) 按照第一种解决方案:

    SELECT t.id, t.subject, user.id, u.nick_name

    FROM

    (

    SELECT id, user_id, subject

    FROM group_message

    WHERE group_id = ?

    ORDER BY gmt_modified DESC LIMIT 20

    ) t, user u

    WHERE t.user_id = u.id

    2) 按照第二种解决方案:

    SELECT t.id, t.subject, t.user_id, t.author

    FROM group_message t

    HWERE group_id = ?

    ORDER BY gmt_modified DESC LIMIT 20

       两个查询一比较,打搅就能很明显地看出谁优谁劣了。

    2. 由于第一方案中的group_message 表中还包含一个大字段’content’,该字段存放的信息要占整个表的绝大部分存储空间,但在1中表现的最频繁的Query完全不需要该字段所存放的信息,所以,造成了Query读取大量没有任何意义的数据。因此,需要把content字段单独分出来存放在group_message_content帖子内容表中。

    作者”邪恶的小Y的博客“

     
  • 柯昌盛 am 7:43 on 2011 年 9 月 10 日 链接地址 | 回复  

    Oracle字符集大全 

     如何查询Oracle的字符集
        很多人都碰到过因为字符集不同而使数据导入失败的情况。这涉及三方面的字符集,一是Oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做数据导入的时候,需要这三个字符集都一致才能正确导入。
        1、查询Oracle Server端的字符集
        有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:
        SQL>select userenv(‘language’) from dual;
        结果类似如下:AMERICAN _ AMERICA. ZHS16GBK. android删除第三方jar的方法
        2、如何查询dmp文件的字符集
        用Oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有 几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:
        SQL> select nls_charset_name(to_number(’0354′,’xxxx’)) from dual;  ZHS16GBK
        如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):
        cat exp.dmp |od -x|head -1|awk ‘{print $2 $3}’|cut -c 3-6
        然后用上述SQL也可以得到它对应的字符集。
        3、查询Oracle client端的字符集
        这个比较简单。在Windows平台下,就是注册表里面相应OracleHome的NLS_LANG.还可以在Dos窗口里面自己设置,比如:
        set nls_lang=AMERICAN_AMERICA.ZHS16GBK
        这样就只影响这个窗口里面的环境变量。在Unix平台下,就是环境变量NLS_LANG.
        $echo $NLS_LANG AMERICAN_AMERICA.ZHS16GBK
        如果检查的结果发现Server端与Client端字符集不一致,请统一修改为同Server端相同的字符集。
        修改Oracle的字符集
        上文说过,oracle的字符集有互相的包容关系。
        如us7ascii就是zhs16gbk的子集,从us7ascii到zhs16gbk不会有数据解释上的问题,不会有数据丢失。在所有的字符集中utf8应该是最大,因为它基于unicode,双字节保存字符(也因此在存储空间上占用更多)。
        一旦数据库创建后,数据库的字符集理论上讲是不能改变的。因此,在设计和安装之初考虑使用哪一种字符集十分重要。根据Oracle的官方说明,字符集的转 换是从子集到超集受支持,反之不行。如果两种字符集之间根本没有子集和超集的关系,那么字符集的转换是不受oracle支持的。对数据库server而 言,错误的修改字符集将会导致很多不可测的后果,可能会严重影响数据库的正常运行,所以在修改之前一定要确认两种字符集是否存在子集和超集的关系。一般来 说,除非万不得已,我们不建议修改oracle数据库server端的字符集。特别说明,我们最常用的两种字符集ZHS16GBK和 ZHS16CGB231280之间不存在子集和超集关系,因此理论上讲这两种字符集之间的相互转换不受支持。
        修改Server端字符集(不建议使用):
        在Oracle 8之前,可以用直接修改数据字典表props$来改变数据库的字符集。但Oracle8之后,至少有三张系统表记录了数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:
        $sqlplus /nolog SQL>conn / as sysdba;
        若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器,然后执行以下命令:
        SQL>STARTUP MOUNT;
        SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
        SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
        SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
        SQL>ALTER DATABASE OPEN;
        SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;
        SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;
        SQL>SHUTDOWN IMMEDIATE; SQL>STARTUP
        修改dmp文件字符集:
        上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第2第3字节的内容就可以‘骗’过oracle的检查。这样做理论上也仅 是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,如 US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp文件,所以影响不大。
        具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码:
        SQL> select to_char(nls_charset_id(’ZHS16GBK’), ‘xxxx’) from dual; 0354
        然后将dmp文件的2、3字节修改为0354即可。
        如果dmp文件很大,用ue无法打开,就需要用程序的方法了。网上有人用java存储过程写了转换的程序(用java存储过程的好处是通用性教好,缺点是比较麻烦)。我在Windows下测试通过。但要求Oracle数据库一定要安装JVM选项。
    作者“墙头草的博客”

     
  • 柯昌盛 pm 7:41 on 2011 年 9 月 8 日 链接地址 | 回复
    Tags: 中国首富   

    胡润2011百富榜:李彦宏财富560亿元排名第三 

    中国富豪创造的数字再一次发生巨变。胡润研究院昨日(9月7日)公布了《2011海南清水湾胡润百富榜》前50名,其中三一重工董事长梁稳根以700亿元财富赶超宗庆后,成为新一届中国首富;娃哈哈董事长宗庆后及其家族今年以680亿元财富退居第二;百度董事长李彦宏以560亿元财富排名第三。《每日经济新闻》记者了解到,今年是胡润研究院自1999年以来第13年发布“胡润百富榜”,而1000人总榜及系列子榜将在今年10月中旬陆续发布。
    55岁的梁稳根以700亿元的财富首次成为“2011年中国首富”,这是“胡润百富榜”过去13年中,诞生的第十位中国首富。与去年相比,梁稳根财富增长89%,排名上升3位。梁稳根持有三一集团58%的股权,他的财富主要来源于三一集团旗下的两家上市公司。
    去年首富,66岁的宗庆后及其家族今年以财富680亿元退居第二。与去年相比,宗庆后家族财富缩水120亿元,主要原因是娃哈哈2010年净利润下降了两成。43岁的李彦宏以560亿元财富首次进入前三名,排名第三。与去年相比,李彦宏财富增长56%,排名上升2位。榜单显示,今年IT行业财富呈总体上升趋势,李彦宏的百度是过去一年表现最为抢眼的中国IT行业上市公司。
    此次榜单前50名平均财富292亿元,比去年前50名平均财富上涨了12%,较前年上涨了35%。前50名的上榜门槛从去年的155亿元跃升到170亿元,前年为145亿元。前50名的平均年龄为53岁,比百富榜总榜的平均年龄大2岁。
    百富榜也勾勒出了富豪从发家到交棒第二代的完整时间样本:上榜富豪大多于1960年出生,受改革开放大潮的影响在1993年前后下海经商,经过数年的打拼于1997年前后获得第一桶金,2010年开始出现套现的情况。
    胡润预测,到2015年前后,中国富豪逐渐出现全球化浪潮,最迟在2030年前后将完成企业的交接工作,届时富二代将全面接管家族财富。据记者了解,在这些富豪榜中,不少“富二代”已经开始涉足企业的管理。

     
  • 柯昌盛 am 8:24 on 2011 年 9 月 4 日 链接地址 | 回复  

    sql语句中出现笛卡尔乘积 

    没有join条件导致笛卡尔乘积
    学过线性代数的人都知道,笛卡尔乘积通俗的说,就是两个集合中的每一个成员,都与对方集合中的任意一个成员有关联。可以想象,在SQL查询中,如果对两张表join查询而没有join条件时,就会产生笛卡尔乘积。这就是我们的笛卡尔乘积导致的性能问题中最常见的案例:开发人员在写代码时遗漏了join条件。

    发生笛卡尔乘积的sql:

    view plaincopy to clipboardprint?select sum(project_fj.danjia*project_fj.mianji) from project_fj,orderform where project_fj.zhuangtai=’未售’ and project_fj.project_id=30
    select sum(project_fj.danjia*project_fj.mianji) from project_fj,orderform where project_fj.zhuangtai=’未售’ and project_fj.project_id=30

    这个语句其实只是sql语句的一部分,问题是另一部分用到了表orderform,所以from中有orderform,但是上面的这部分语句完全没有用到orderform,但是不设置条件就导致了笛卡尔乘积。

    解决方法:使用LEFT JOIN

    view plaincopy to clipboardprint?select sum(project_fj.danjia*project_fj.mianji) from project_fj LEFT JOIN orderform ON project_fj.id=orderform.project_id
    where project_fj.zhuangtai=’未售’ and project_fj.project_id=30
    select sum(project_fj.danjia*project_fj.mianji) from project_fj LEFT JOIN orderform ON project_fj.id=orderform.project_id
    where project_fj.zhuangtai=’未售’ and project_fj.project_id=30

    本文出自“suixufeng的专栏”

     
  • 柯昌盛 am 7:38 on 2011 年 9 月 3 日 链接地址 | 回复
    Tags: 百度   

    百度发布新首页 称对网民有3大重要影响 

     北京时间9月2日消息,在今天于北京国家会议中心召开的百度世界大会上,CEO李彦宏正式向外界发布了全新的百度首页,新首页增加了四大新模块,将向开发者等人群开放。百度表示新的首页将对网民产生3个方面的重要影响。

     

    转播到腾讯微博

    百度发布新首页 称对网民有3大重要影响

     

     

    百度新首页发布

      新的百度首页在传统的搜索框下增加了导航通知、实时热点、应用、新鲜事四大模块,其中导航通知模块支持用户添加经常访问的网站,如果是社交网站,则会即时显示用户在社交网站的状态;实时热点是百度提供的热门关键词,用户可点击搜索查询;在应用模块,百度提供了分类应用榜单,包括游戏、音乐、工具、阅读、视频、工具和热门等七大类别,用户可以添加或删除应用;新鲜事模块,类似社交网站的信息流,实时显示用户在百度贴吧、空间等百度社交产品的即时信息。

     

      百度强调,新的百度首页将对网民产生3个方面的重要影响:一是服务集成,将互联网上多元信息、服务、应用集成起来,满足用户全方位的互联网需求;二是一号直达,用一个账号、不需要切换,即可直达所有的互联网深度服务;三是智能推荐,基于用户行为、兴趣建模,知道用户在干什么、想要什么,并根据机器算法和机器学习,向用户智能推荐所想要的信息、服务或应用。

      李彦宏今天宣布,百度新首页还将同时对开发者、站长、服务提供商开放,方便优质的互联网内容、应用和服务通过新首页进行展示,与用户需求进行直接对接。

     
  • 柯昌盛 am 12:45 on 2011 年 9 月 2 日 链接地址 | 回复
    Tags: 百度浏览器   

    百度浏览器也推双核极速版 抢鲜下载 

    2011-09-01 15:31:08  
     
     

    7月份发布的百度浏览器相信已经有不少人用过了,它采用IE内核,整合了大量的应用程序。不过,由于如今浏览器双核在国内是热门,百度浏览器也跟风,并于昨日推出了百度浏览器双核极速版,用户可在兼容模式和极速模式间自由切换。

    特色功能:

    1、增加双核切换功能,并支持自动切换。

    2、速度优化。

    下载地址:http://dl.client.baidu.com/browser-lab/bdbrowser_setup.exe

    由于百度浏览器双核极速版当前只是Alpha测试阶段,所以可能会存在一些问题,所以建议大家谨慎使用。

    百度浏览器也推双核极速版 抢鲜下载

    百度浏览器也推双核极速版 抢鲜下载

    百度浏览器也推双核极速版 抢鲜下载

    百度浏览器也推双核极速版 抢鲜下载

     

     
  • 柯昌盛 am 11:35 on 2011 年 8 月 31 日 链接地址 | 回复
    Tags: 腾讯, 马化腾   

    Tencent腾讯管理团队介绍 

    马化腾:主要创办人,首席执行官

    马化腾,腾讯公司主要创办人之一,董事会主席、执行董事兼首席执行官,全面负责本集团的策略规划、定位和管理。1998年创立本集团前,马 先生曾在中国电信服务和产品供应商深圳润迅通讯发展有限公司主管互联网传呼系统的研究开发工作。马先生于1993年取得深圳大学理学士学位,主修计算机及 应用。马先生在电信及互联网行业拥有逾十八年经验。

     

    刘炽平:总裁

    刘炽平, 腾讯公司总裁。2005年加盟腾讯,出任本公司首席战略投资官,负责公司战略、投资、并购和投资者关系;于2006年升任总裁,协助董事会主席兼首席执行 官监督公司日常管理和运营。2007年,被任命为执行董事。加入腾讯之前,刘先生为高盛亚洲投资银行部的执行董事及电信、媒体与科技行业组的首席运营官, 并曾在麦肯锡公司从事管理咨询工作。他在首次公开招股发售、兼并与收购以及管理咨询等方面有超过十一年的经验。刘炽平先生拥有美国密歇根大学电子工程学士 学位,斯坦福大学电子工程硕士学位以及西北大学凯洛格管理学院工商管理硕士学位。

    张志东:主要创办人,首席技术官

    张志东,腾讯公司主要创办人之一,身兼执行董事和首席技术官,全面负责本集团专有技术的开发工作,包括基本即时通信平台和大型网上应用系统 的开发。1998年创立本集团前,张先生在深圳黎明网络有限公司任职,主要负责软件和网络应用系统的研究开发工作。张先生于1993年取得深圳大学理学士 学位,主修计算机及应用,并于1996年取得华南理工大学计算机应用及系统架构硕士学位。张先生在电信及互联网行业拥有逾十五年经验。

    许晨晔:主要创办人,首席信息官

    许晨晔,腾讯公司主要创办人之一,首席信息官,全面负责网站财产和社区、客户关系及公共关系的策略规划和发展工作。1998年创立本集团之 前,许先生在深圳数据通信局任职,累积丰富软件系统设计、网络管理和市场推广及销售管理经验。许先生于1993年取得深圳大学理学士学位,主修计算机及应 用,并于1996年取得南京大学计算机应用硕士学位。

    陈一丹:主要创办人,首席行政官

    陈一丹,腾讯公司主要创办人之一,首席行政官,全面负责集团行政、法律、人力资源和公益慈善基金事宜。陈先生亦负责集团的管理机制、知识产 权、政府关系。1998年创立本集团之前,陈先生在深圳出入境检验检疫局工作数年。陈先生于1993年取得深圳大学理学士学位,主修应用化学,并于 1996年取得南京大学经济法硕士学位。

    熊明华:联席首席技术官,兼高级执行副总裁

    熊明华,腾讯公司联席首席技术官兼高级执行副总裁。2005年加入腾讯公司,熊先生负责公司整体平台产品的战略规划、新产品创新、核心技术研发和卓越工程 管理。熊先生负责管理公司核心平台产品团队,包括即时通信和电子邮箱;同时也负责公司搜索引擎和广告平台的产品研发和业务策略与运营。加入腾讯之前, 熊先生在微软公司任职九年,主要负责网络浏览器,视窗系统和MSN的产品管理工作,并创建了MSN中国开发中心。 较早前,熊先生曾任职于IBM互联网部门。熊先生于1987年取得中国国防科技大学信息系统工程学士学位,并于1990年在北京的中国国防科技信息中心获 得信息搜索硕士学位。

    网大为:高级执行副总裁

    网大为,腾讯公司高级执行副总裁。2001年加入腾讯,主要负责引进国际合作伙伴推动腾讯的海外业务,和中国大陆境外的服务。加入腾讯之 前,网大为先生曾任MIH中国业务发展副总裁,负责中国的互联网策略和合并与收购工作。任职中国MIH之前,网大为先生曾担任中国电信和资讯科技业的管理 顾问。

    刘胜义:高级执行副总裁,兼网络媒体业务系统总裁

    刘胜义,腾讯公司高级执行副总裁兼网络媒体业务系统总裁。2006年加盟腾讯,负责公司的网络媒体系统,主力拓展公司的网络媒体业务以及相 关的广告业务,并负责优化公司及重点产品的品牌策略。刘胜义在数字媒体与媒体传播领域经验丰富,在知名国际广告公司的工作经验超过20年,其中近16年出 任多家跨国公司的中国CEO职位。 2007年,刘先生在国际知名网络广告大会ad:tech主办单位担任中国区的顾问;2007年底,正式成为中国广告协会副会长,并获任上海师范大学荣誉 客座教授;2008年,荣获中国广告协会颁发的“中国广告30年突出贡献奖”;2010年,受聘为厦门大学新闻传播学院兼职教授。2010年,刘先生获得 了第三届中国互联网广告大会颁发的“2009-2010年度 中国互联网广告十大人物”殊荣。2011年,刘胜义先生被纽约《广告时代》评选为2010年21位全球营销业最有影响力的人之一。 加盟腾讯之前,他曾担任阳狮 (Publicis)中国的执行合伙人,天联(BBDO)中国的首席执行官,以及在上海担任电通扬雅(Dentsu Young & Rubicam)和麦肯集团(McCann-Erickson)在京港两地的高管职位。刘先生在广告行业著述甚丰,经常在行业会议上发表演说,并曾于 2003年担任上海4A委员会主席。 刘先生拥有美国新泽西州立拉杰斯大学的EMBA学位,在2007年完成了哈佛商学院的高级市场管理课程,并于2010年完成了哈佛商学院的高级管理课程 (AMP)。

    任宇昕:高级执行副总裁,兼互动娱乐业务系统总裁

    任宇昕,腾讯公司高级执行副总裁兼互动娱乐业务系统总裁。2000年加入腾讯,曾任公司增值开发部总经理,互动娱乐事业部总经理,自 2005年9月起全面负责互动娱乐业务系统的游戏开发、运营、市场、渠道销售等工作。加盟腾讯前,任先生在华为技术有限公司工作。任先生于1998年毕业 于电子科技大学计算机科学与工程专业,并于2008获得中欧国际工商学院的EMBA学位。

    吴宵光:高级执行副总裁,兼互联网业务系统总裁

    吴宵光,腾讯公司高级执行副总裁兼互联网业务系统总裁。1998年加盟腾讯,带领着腾讯核心产品即时通信软件QQ客户端的研发和产品规划工 作,并先后担任QQ 研发团队项目经理、即时通信产品部总经理,互联网事业部总经理。目前,全面负责公司社区、社区增值业务以及电子商务业务等各项互联网服务。吴先生拥有丰富 的互联网产品研发、产品规划、产品运营和营销方面的经验。吴宵光先生1996年毕业于南京大学获得天气动力学学士学位,并于2008获得中欧国际工商学院 的EMBA学位。

    刘成敏:高级执行副总裁,兼无线业务系统总裁

    刘成敏,腾讯公司高级执行副总裁兼无线业务系统总裁。2003年加入腾讯,曾任电信事业部总经理、移动通信部总经理。自2005年10月起 负责无线业务的开发和运营以及公司区域市场的管理工作。加入腾讯之前,刘先生就职于华为公司,在华为国内营销部工作。刘先生毕业于哈尔滨工业大学,获得机 械学硕士学位。

    李海翔:高级执行副总裁

    李海翔,腾讯公司高级执行副总裁。1999年加入腾讯,自2005年12月起负责规划、建设和管理相关运营支持平台,包括技术架构、信息安 全、帐务结算、商业智能、渠道接入、基础IT、应用运维以及客户服务等平台, 以提升公司的运营管理水平。自2010年起担任公司搜索业务线负责人。2008年被《IT经理世界》评为年度中国杰出CIO。加入腾讯之前,李先生曾服务 于一家系统集成公司,负责金融和网络应用软件的研发。李先生毕业于华南理工大学,获得计算机软件学士学位,并于2007获得中欧国际工商学院的EMBA学 位。

    汤道生:高级副总裁

    汤道生,腾讯公司高级副总裁。2005年加入腾讯,自2008年10月起负责互联网业务系统的产品平台与研发管理工作。加入腾讯之前,汤先 生曾在Oracle软件公司,负责数据库研发和测试工作;在Oracle Applications参与ERP的研发和测试工作;曾经在UC Extension教授Oracle DBA课程。汤先生还曾在Sendmail软件公司,管理研发团队开发大型邮件系统,反垃圾邮件过滤系统等,服务多国的网络运营商,后期也参与新产品策划 工作,开拓新市场。汤先生于1991年在美国密西根大学(University of Michigan, Ann Arbor)获得计算机工程学士学位,并于1997年在史丹福大学(Stanford University)获得电子工程硕士学位。

    卢山:高级副总裁

    卢山,腾讯公司高级副总裁。2000年加入腾讯,历任即时通信产品部总经理,平台研发系统副总裁。自2008年3月起担任运营平台系统副总 裁,负责运营平台系统的管理工作。加盟腾讯前,卢先生在黎明网络有限公司工作。卢先生于1998年毕业于中国科学技术大学计算机科学与技术系。

    郭凯天:高级副总裁

    郭凯天,腾讯公司高级副总裁。2002年加入腾讯,自2007年9月起负责公司行政、法务、采购、基金会、政策发展等部门的相关管理工作,以及各分公司、办事处的职能管理工作。郭先生1996年毕业于中南财经政法大学,获得经济法学士学位。

    罗硕瀚:高级副总裁,兼副首席财务官

    腾讯公司高级副总裁兼副首席财务官。2004年加入腾讯,担任财务总监职务, 并于2008年出任集团副总裁兼副首席财务官。 此前,罗先生先后在普华永道会计师事务所的香港、广州、深圳三地的分所担任审计业务高级经理,拥有超过12年会计师事务所专业经验。罗先生获颁澳洲资深执 业会计师资格,香港会计师公会资深会员和英国特许管理会计师公会的资深会员。罗先生拥有西澳洲Curtin University of Technology商学学士学位及美国西北大学凯洛格管理学院和香港科技大学EMBA学位。

    奚丹:高级副总裁

    奚丹,腾讯公司高级副总裁。2002年加入腾讯,自2008年5月起全面负责公司人才发展与管理领域的各项管理职能。奚先生1996年毕业于深圳大学计算机专业,并于2005年取得清华大学MBA学位。奚先生在IT和互联网行业拥有14年以上人力资源管理工作经验。

    曾李青:主要创办人,终身荣誉顾问

    曾李青,腾讯公司主要创始人之一,在2007年6月起获任终身荣誉顾问。于1999年创办本集团之后,曾先生在1999年-2007年期间 出任首席运营官,负责本集团业务范围及产品种类,同时管理全国各市场推广工作。加入腾讯之前,曾先生在深圳市数据通信局工作,熟悉中国互联网及电信行业。

     
  • 柯昌盛 am 5:25 on 2011 年 8 月 31 日 链接地址 | 回复  

    看来我适合当“心理学家” 

    理想主义,对于自己的价值观和自己觉得重要的人非常忠诚,希望外部的生活和自己内心的价值观是统一的。

    好奇心重,很快能看到事情的可能性,能成为实现想法的催化剂,寻求理解别人和帮助他们实现潜能。

    适应力强,灵活,善于接受,除非是有悖于自己的价值观的。

    测试页面:http://good.ci123.com/app/qq/xingge/

     
  • 柯昌盛 am 4:52 on 2011 年 8 月 31 日 链接地址 | 回复
    Tags: 8月   

    8月,谁拨动了我寂寞的心弦 

      此去经年,时光依旧。有些记忆的碎片,一直缀满于最深的红尘陌上,偶尔展开,却总有隐隐的忧伤散发。若,红尘,只是一场寂寞的轮回,那我,情愿守着一份虚无的等待,也不愿去触碰下一场寂寞的烟花。-
      
      -窗外,已是盛夏。八月的流光,透过窗棂,洒上我的脸庞,似乎要窥探我内心深处的那抹苍白的颜色。雨,毫无征兆地开始肆虐,借着听雨的惆怅,轻翻着那些被岁月沉淀的记忆,许久…。抬头的时候,我望见蕴含眼角的一滴泪珠,盈盈欲滴,却强自忍住。原来,我依然逃不脱感伤.
      
      很长一段时间里,一直在故作坚强,暗夜里相陪自己的,却只有孤独的灵魂。独倚窗前,风,送来雨冰凉的气息。耳畔,传来阿桑寂寞的声音:“你听寂寞在唱歌,轻轻的狠狠的,歌声是这么残忍,让人忍不住泪流成河…”心,开始被触动,跌落在一片寂寞中。-
      
      伤感的音符,如一截跌落在雨帘中的梵音,偶尔和窗外的风契合,相互交融。心情莫名低落起来,仿佛已经融进寂寞的歌声中,挣扎,挣扎着。不知道听谁说过,寂寞是自找的,而且,寂寞还是灰色的。我却固执的以为,寂寞其实也有美丽的一面,虽然感伤着,至少不再有尘世的喧嚣和嘈杂,让我能够完全沉静下来来。-
      
      时光,稍纵即逝,所有的陈年过往,如黑白的老故事片,在眼前虚晃就消失无踪,回首,只有淡若尘烟的寂寞如影相随。依然喜欢独来独往,喜欢享受一个人的静谧。沉默在自己的锦瑟心事中,看自己喜欢的文字,只是,少了一份从容和淡定。不愿招惹是非,总是毫无心智的道出那些心底最妩媚的秘密。或许,对一个人敞开心扉去坦诚,甘愿把心放在枝头,低至尘埃,却依然开不出一朵超尘脱俗的花来。然,我只求解脱,而不是顾作“媚态”去假“清高”.-
      
      有Q友说我沉默寡语,与世隔绝,似乎和这个社会已然脱节。我只是无语,宁愿守着一个人的寥寂,也不愿让自己去随波逐流。于是,给自己画的圈子越来越小,小到只能在夹缝中求生。可能我的性格禀赋了我不愿与人交往的痼癖。对于一些予我真心的朋友,一样帮不上忙,不是无动于衷,只是我已习惯了淡然。-
      
      我知道,独守一份寂寞也是需要勇气的,漫长的人生路,前途未必充满诗意和暖暖的关爱,只希望能够眷守着眼前的恬淡和温情,就该知足。寂寞,于生活看来,不过是一串歌里的音符,从这首歌换到那首歌,在歌声里感伤,在歌声里疗伤。-
      
      八月流火,触之无痕。这个八月,我走上寂寞的街角,抖落一地的忧伤,所有的沧桑都不曾来过,心静,如莲。笑容,悄悄爬上八月的憧憬,此时雨减止,淡淡的阳光温暖了我的双眸。心,交给文字,去诉说,诉说…-
      
      对着窗外八月独有的一抹流光,我闭目,养神一分钟,再度睁眼的时候,发现雨后的天空,那么蓝,似我心头那枚淡蓝色的忧伤。此时,阿桑的歌再次依附心头:“远离黑暗,阴冷和你惧怕的无穷无尽,在无声的幻梦残骸中被拉起,在天使的怀里,愿你能得到安慰”。冉冉的歌声,如暗夜的烛光,驱走了微寒,照亮了黑暗。心,介乎于似懂非懂间,却也生出了一丝闲然。-
      
      红尘如梦,来去匆匆。恍然间,似乎明白,生命里不会总充满阳光和温暖,寂寞和无奈,总要去坦然面对。何如从现在开始,试着换一个角度去生活。没人会把寂寞强压在谁的身上,自己不去妄动,寂寞便走远,甚至无痕。-
      
      这个八月,究竟谁拨动了我寂寞的心弦?

     
  • 柯昌盛 pm 3:14 on 2011 年 8 月 30 日 链接地址 | 回复
    Tags: 李开复   

    李开复:移动互联网商机无限 

    http://www.sina.com.cn  2011年08月30日 09:17  财新网

     

      待支付与智能手机普及,社交、本地、移动相结合的SoLoMo模式将获丰收  创新工场董事长兼CEO李开复:  国外最近比较火的词就是“SoLoMo”,就是social(社交的),local(本地的),mobile(移动的)。我觉得三者的结合,加上商机,应该是未来最大的一个爆发点。

      这三者的结合是什么意思呢?当我们每一个人都有一个足够便宜的智能手机,而且它有足够容易用的体验,然后在上面呢,经过它容易的联系人和其他的方式,把你和你认识的人和愿意认识的人,和那些愿意知道的商家,能够用搜索的方法、社交的方法链接起来。再在上面产生商业价值,这是一个最后的结果。

      谈到商业价值,跟传统的电子商务可能不太一样。我想手机上肯定会有电子商务的机会,在上面到淘宝,到京东上面买东西,肯定是会发生,也可以发生的。但是让我们最振奋的一点是,所谓基于地理位置的O2O的模式,也就是说online to offline(线上到线下)的模式。

      因为手机它可以定下地理位置,所以它可以扮演一个PC无法扮演的角色,就是帮助中国众多的大中小商家,能够帮他获得用户,帮助中国几亿的移动互联网的网民,用手机找到吃喝玩乐、衣食住行的需要,而且会针对他当时的需要,地理位置,价格或任何的看法,做一个非常聪明的筛选。

      所以我觉得这三者的结合,在这里会是一个巨大的机会。但是这三者的结合呢,会是现在很好投资和创业的机会,但是真的能够丰收,应该还是要过两三年的时间,因为支付、智能手机的普及还要一定的时间,所以现在来做这个创业呢,还是正好的。

      在这个之前有个更快的机会,就是在移动互联网上,用搜索走娱乐的方向,包括游戏、视频、音乐、社交等等,这个可能在短期更能够符合中国年轻移动互联网民的需求。

      所以我认为未来两件大的事情,就是很快即将发生的移动互联网娱乐社交这样的一个机会,再下面就会看到刚才说的“SoLoMo”,而且是在O2O的模式之下能够实现。

     
  • 柯昌盛 pm 4:17 on 2011 年 8 月 25 日 链接地址 | 回复  

    苹果“掌门人”乔布斯辞职 股价下跌6% CEO乔布斯履历 

    美国硅谷传奇式人物苹果公司总裁乔布斯北京时间今天(25日)早上宣布辞职,蒂姆·库克接替他成为苹果的新总裁。乔布斯现年55岁,他不仅是和现在不可一世的苹果公司的缔造者之一,也是一名胰腺癌的幸存者。

      苹果公司称,他虽然辞掉CEO职位,但被选择为了公司的董事长。无论如何苹果的国王已经谢幕,国王的苹果还会继续成长吗?在乔布斯的辞职信中有这样一句话,他说“我相信苹果的未来会更加光明,更加具创造力。”

      消息公布之后,苹果公司纳斯达克盘后股价下跌了6%,反映非常大,对于投资者而言,目前,重要的不仅仅是苹果,还有谁来“种”苹果。

    CEO乔布斯履历

     

    苹果前任CEO史蒂夫·乔布斯(Steve Jobs)
     
      新浪科技讯北京时间8月25日早间消息,苹果董事会今天宣布,苹果CEO史蒂夫·乔布斯(Steve Jobs)辞职,董事会已任命前苹果COO蒂姆·库克(Tim Cook)接任苹果CEO一职。乔布斯被选为董事会主席,库克将加入董事会,立即生效。

      乔布斯今天向苹果董事会递交了辞呈,并强烈推荐前苹果COO蒂姆·库克(Tim Cook)接任苹果CEO一职。

      史蒂夫·乔布斯于1955年2月24日出生在美国旧金山。

      1972年高中毕业后,在波兰的一所大学中只念了一学期的书。

      1974年乔布斯在一家公司找到设计电脑游戏的工作。

      1976年后,时年21岁的乔布斯和26岁的沃兹尼艾克在乔布斯家的车库里成立了苹果电脑公司。

      1996年,苹果公司重新雇佣乔布斯作为其兼职顾问。

      1997年9月,乔布斯重返该公司任首席执行官。

      2011年8月25日,乔布斯正式辞去苹果CEO职务。

      苹果公司历史

      1977年1月,苹果公司正式注册成立。

      1980年12月12日,股票在华尔街上市。

      1983年,乔布斯着力研究新个人电脑。

      1984年,第一台Mac机面市。

      1985年,被Sculley扫地出门创办NeXT。

      1986年,乔布斯收购Pixar。

      1989年,NeXT公司失败。

      1993年,乔布斯关闭NeXT的硬件部分。

      1995年,《玩具总动员》播放一举成名。

      1996年,苹果收购NeXT乔布斯担任顾问。

      1997年,乔布斯再次成为苹果CEO。

      1998年,iMac成为美国最畅销个人电脑。

      1999年,苹果推出iBook、G4和iMacDV。

      2000年,苹果公司再次出现季度亏损,分额下降,股价大跌。

            2001年,平面式的iMac推出,取代已问世三年的iMac。

      2002年,推出第二代iPod播放器,使用了称为“Touch wheel”的触摸式感应操控方式。

      2003年,推出第一台的64位元个人电脑Apple PowerMac G5。

      2003年,推出第三代iPod音乐播放器,可同时支持Mac和Windows,并取消Firewire连接埠的设计。

      2004年,斯蒂夫·乔布斯被诊断出胰腺癌,苹果股价重挫。

      2004年,推出第四代iPod数码音乐播放器,沿用了原本在iPod mini上的“Click Wheel”操控设计。此后还推出搭载彩色显示屏的iPod Video。

      2004年,推出迷你版iPod mini数码音乐播放器,其金属外壳与其他机种歧异性极大。

      2005年,斯蒂夫·乔布斯宣布下一年度的电脑将采用英特尔处理器。

      2005年,推出第五代iPod播放器。

      2005年,推出第二代iPod mini迷你数码音乐播放器与iPod shuffle,其无显示屏设计引起部分使用者不满。

      2005年九月,推出iPod nano超薄数码音乐播放器,采用彩色显示器。

      2006年,斯蒂夫·乔布斯发表了第一部使用英特尔处理器的台式电脑和笔记本电脑分别为iMac和MacBook Pro。

      2006年,推出第六代iPod数码音乐播放器,称为”iPod classic”。

      2006年,推出第二代iPod nano数码音乐播放器,采用和iPod mini相同之铝壳设计。

      2006年,推出第二代iPod shuffle数码音乐播放器,其外型变为类似一个夹子,体积更加小巧。

      2007年,推出第三代iPod nano超薄数码音乐播放器,外型由细长转为宽扁。

      2007年,斯蒂夫·乔布斯在Mac World上发布了iPhone与iPod touch。

      2008年,斯蒂夫·乔布斯在Mac World上发布(从信封中取出)了MacBook Air,这是当时最薄的笔记本电脑。

      2008年,斯蒂夫·乔布斯在Mac World上发布了iPod nano第四代和iPod touch第二代。

      2008年,斯蒂夫·乔布斯在Mac World上发布了新设计的MacBook和MacBook Pro,以及全新的24英寸Apple LED Cinema Display。

      2009年,苹果负责全球营销的高级副总裁菲利普·席勒在Mac World2009大会上发布了重新设计的17英寸屏幕的MacBook Pro笔记本电脑。

      2009年,3月3日推出升级版的iMac,但外形并未改变,其使用了NVIDIA公司新款显卡,并小幅度降低了iMac价格,同时升级更新的包括Mac mini和Mac Pro。

      2009年,3月11日推出新款iPod shuffle,这是第一款可以语音发音的数码音乐播放器,体积更加小巧,几乎是上代的一半大小,由于部分操作键转至耳机线缆上,所以暂时不支持第三方耳机,而且必须配合8.1版本或更新版本的iTunes使用。2009年,6月23日乔布斯重新回归苹果总部工作。

      2010年,1月27日苹果公司平板电脑iPad正式发布。

      2010年。4月6日苹果ipad正式在美国发售。

      2010年5月26日,在与比尔·盖茨(Bill Gates)竞跑了30多年之后,史蒂夫·乔布斯(Steve Jobs)这位苹果公司创始人终于将他的公司送上了纳斯达克(Nasdaq)的顶峰位置。苹果公司的市值在当日纽约股市收市时达到2220亿美元,仅次于埃克森美孚(ExxonMobil),成为美国第二大上市公司,微软当日市值为2190亿美元。

      2010年6月8日,北京时间凌晨1点,苹果公司年度盛会WWDC2010(Apple Worldwide Developers Conference

      2010)正式开幕,在本次大会上,乔布斯正式发布了近来一直引人瞩目的苹果第四代手机iPhone 4。其显示屏像素也将由原来的480×320升级为960×640。

      2011年3月3日,苹果公司正式发布了旗下第二款平板电脑iPad2。

     
  • 柯昌盛 pm 3:52 on 2011 年 8 月 21 日 链接地址
    Tags: 58同城CEO, 姚劲波, 学大教育   

    域名城创始人姚劲波:从新角度剥析域名价值 

    域名城(domain.cn)8月20日消息     8月18日由域名城主办的第三届网络品牌交流会暨域名城11周年庆典活动中,域名城创始人、58同城CEO姚劲波在会上分享了他对域名价值的看法。

    在谈到企业网络品牌方面时,姚劲波认为,对任何企业来说,域名的价值不言而喻,但是对一个企业的整体价值来说,域名并非全部。“一般来说,在企业的起步阶段,域名是很重要的,对与吸引投资者、吸引用户、合作伙伴都会起到帮助。现在互联网网站流量至少有三分之一来自搜索引擎。“比如我们58同城的广告,我们宣传的是‘58同城’,而不是‘58.com’。”姚劲波说。


    域名城创始人、58同城CEO姚劲波

    针对当前热门的移动互联网发展,姚劲波认为移动互联网的发展更加淡化了域名的影响,“在手机上,我们更多的通过APP或者收藏夹访问网络,而很少输入域名。”

    姚劲波还结合自身经验为域名投资人从事创业提供了一些建议。他说:“从事域名投资的人都是非常聪明的,对互联网的了解是我们的优势。”他认为,如果创业,没必要非得在域名行业争的你死我活,现在从事域名相关的创业竞争已经非常激烈,“走出这个行业,从更高的角度看,会豁然开朗。”

    姚劲波先生是中国第一代互联网人,是早期拥有最多的2字符数字COM域名,比如28商机网28.com、时尚购物网30.com等,都是出自姚劲波先生之手。

    姚劲波现任58同城总裁兼CEO。2000年,姚劲波创办国内最大的域名交易及增值服务网站易域网(现域名城),并于2000年九月被万网收购。此后,姚劲波在万网历任产品部经理,产品规划总监,华南区总经理,营销副总裁等职务。期间姚劲波与好友一起创办了学大教育21edu.com(目前已上市)。2005年7月,姚劲波离开万网并创立了中国最大的分类信息网站58同城。

     
  • 柯昌盛 pm 3:44 on 2011 年 8 月 21 日 链接地址 | 回复
    Tags: Myspace, 王峰, 虾米网   

    蓝港在线创始人王峰:大佬横行小弟没机会 

     现在做互联网的这帮老大还没老,草根出来不容易,每个小公司上来都要先跟大公司掰手腕。

      口述: 蓝港在线创始人、CEO王峰

      本次黑马大赛给我留下印象最深刻的是虾米网,它抓住了移动互联网一个细分领域的大方向——音乐,从内容准备到用户社区都跑在了前面,虽然他们未必做到了那么大的规模。

      一个公司所谓的好,是创始人市场意识好,因为创新、创业实际上就是思想比别人早跑了两三年。大家都看好的时候你再进,你的机会就没有了。虾米网的音乐分享,腾讯在做,新浪也在微博尝试,在一个大的方向上他走对了。

      视频、音乐、文本、图片都是移动互联网分享重要的方向,今天还没有人把它们结合起来。比如把音乐跟图片结合起来,或者把视频跟文本做很好的编辑,都是有机会的,虾米网有机会能够比较快速地在新平台上储备用户,而且这个市场足够大。他们在音乐上的尝试是值得我们期许的。

      还有一家公司,做手机游戏的,但说实话我觉得他们做得有点早了。四五年前有很多这样的公司,但说实话,他们都是在WAP平台上做的,现在手机跟当年的手机大相径庭,智能手机完全融入到Web互联网,他要实现平台的迁移,无论应用还是游戏,过去所有的东西都要重构。但我非常赞同他做手机游戏平台的理念。

      在移动互联网领域,这几年好公司规模都差不多了,特别黑的黑马看不出来。主要是在这个领域,一帮大佬出来创业,小弟没机会,这是最大的问题。

      因为现在互联网跟移动互联网是无缝对接的,这帮大佬盯得紧紧的,随时准备跨入;第二,即使是纯粹创业者,也通常都是出来的大企业高管,背景显赫,拿钱很快,极容易受到追捧。很明显就像点点,创始人许朝军曾在盛大、人人做过高管。

      想当初,2000年左右,马化腾、丁磊他们出来做互联网的时候,老大是谁呢?杨元庆,他对互联网没感觉,所以由着这帮大学生折腾。现在做互联网的这帮老大还没老,看得明明白白。草根出来不容易,每个小公司上来都要先跟大公司掰手腕。

      当然,在这个领域抓住机会很难,一旦有的话也很猛,这种企业在发展的时候,我们都没注意到,等发展起来一定会有特别大的爆发。

      另外,在现场我注意到有公司接受了大公司的战略投资,我觉得创业公司被大公司投,成功的几率不大。大公司只适合并购。大公司做孵化器哪个项目成功了?很少。被大公司投的公司以后要面临很大的挑战,它会受到更积极的创业者的挑战,而且在成长中会被大树遮荫。

      一个极端点的例子就是Myspace,这家公司和Facebook有什么不同?当初都非常好,但是Myspace最受追捧的时候卖给了默多克的新闻集团。当时非常轰动,因为新闻集团旗下有最好的内容,Myspace有最年轻的用户。两者的结合将是跨世纪的,吹牛上天了。现在怎么样呢?几千万美元卖掉了,当初买的时候花了5.8亿美元。但Facebook就不同,美国那几个小孩志向无比远大,他们想的是改变世界,链接整个世界。而且他那个理念提出来以后真按照那个干,在背后,是投资界那帮大佬支持他,而不是某个企业。

     
  • 柯昌盛 pm 3:20 on 2011 年 8 月 20 日 链接地址 | 回复
    Tags: oday, 云起企业建站系统   

    云起企业建站系统通杀oday及修复 

    编外:一年前发出来的了,叫0day不合适了

    文章作者:围剿
    文章来源:邪恶十进制
    为什么说是通杀呢
       因为这个系统虽然是版本提高了不少   但是漏洞依然存在 而且很明显
    使我等小菜爽了一把。。

       话说无聊去代码网站下套程序分析分析
    可到了这个云起企业建站系统   下载数挺多的 于是乎看了起来
       首先看到了它的后台login.asp文件。。一看   边觉得蛋疼。。。
    if request.Form(“submit”)<>”" then
    if request.Form(“userid”)=”" or request.Form(“password”)=”" then
    response.Write(“<script language=javascript>alert(‘用户名或者密码不能为空!’);history.back();</script>”)
    response.end
    end if

    set rs=conn.execute(“select * from gly where uid=’”&trim(request.form(“userid”))&”‘ and pwd=’”&trim(request.form(“password”))&”‘”)
    if rs.eof then
    response.Write(“<script language=javascript>alert(‘用户名或者密码验证失败!’);history.back();</script>”)
    response.End()
    else
    if rs(“IsSuper”)=1 then
       session(strSession&”uid”)=”s”
       session(strSession&”uidn”)=rs(“id”)
    else
       session(strSession&”uid”)=”n”
       session(strSession&”uidn”)=rs(“id”)
    end if
    response.Redirect(“index.asp”)
    response.End()
    end if
    rs.close
    set rs=nothing
    end if

    大家 看到没只用trim函数过滤了空格。这样一来就直接出现了从客户端传递过来的数据,直接带入数据库查询了,这样我们就可以用’or’='or’登陆了

    真是啊 。。什么年代了 还有这样的情况。。。

    再来看看进去后台之后的上传文件。。

    部分代码:

    <title>上传文件</title>
    <link href=”css.css” rel=”stylesheet” type=”text/css”>
    <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
    </head>
    <body bgcolor=”#eeeeee” text=”#000000″ leftmargin=”0″ topmargin=”0″ marginwidth=”0″ marginheight=”0″>
    <form enctype=”multipart/form-data” method=”post” action=”infopict.asp?fm=<%=request.QueryString(“fm”)%>&em=<%=request.QueryString(“em”)%>” name=”form1″>
    <table width=”100%” border=”0″ cellpadding=”0″ cellspacing=”0″>
    <tr>
    <td>
    <table width=”100%” border=”0″ cellspacing=”0″ cellpadding=”0″>
    <tr>

    我找了很久以为还是找错了上传文件   因为我没看到上传类型的过滤代码。。
    但是 确定之后   就是这个文件   因此蛋疼继续。。。

    那就是说没过滤任何文件了   直接可以传咯。。

    实在不怎样 。。编辑器版本由原来的ewebeditor转换为FCKeditor
    后台做了安全验证   FCKeditor利用不了的   但是往往程序员忽略了最重要的漏洞。。

    google关键字:inurl:arti_show.asp?id=
    后台地址:management/login.asp
    万能密码登陆   ‘or’='or’
    后台可以直接上传文件

     

     
  • 柯昌盛 pm 3:17 on 2011 年 8 月 20 日 链接地址 | 回复  

    windows中内存映射文件 

    Windows上,内存映射文件,使得大文件的读写不会消耗太多的内存,也减少了频繁的cpu指令。另外,windows上的进程间共享数据,也是通过内存映射文件的方式来实现。
    刚好又遇到这个需求,需要在服务器上一次载入几十兆大小的文件,每个文件大约有100万条数据。所以温习一下这块内容。
    使用内存映射文件,需要按下列操作步骤操作:
    1,打开一个文件对象,也就是文件句柄了。
    2,创建一个文件映射对象 。
    3,获取文件映射对象在进程地址空间的指针。
    当完成对内存映射文件操作时,执行下面这些步骤清理内存:
    1,告诉系统从你的进程的地址空间中撤消文件映射内核对象的映像。
    2,关闭文件映射对象。
    3,关闭文件句柄。
    内存映射可以高效的对大文件进行读写操作,可以这样理解,这个文件在物理磁盘上的存储空间被作为虚拟内存使用了,你读写这块内存区域,就相当于读写文件。在效率上,比I/O文件系统高了很多。win32上的进程间消息传递SendMessage和PostMessage都是用到这种方法。
    实际上如果只是单纯使用它,就不必深究原理,否则需要去看《Windows核心编程》。
    代码是硬道理:
    假设在E盘有一个测试文件test.txt,内容如下:
    #include “windows.h”
    #include “stdio.h”
     
    int main()
    {
        //文件对象
        TCHAR  STR[] = “hello world!”;
        HANDLE hFile = CreateFile(“E:\\test.txt”,
        GENERIC_READ | GENERIC_WRITE,
        0,
        NULL,
        OPEN_ALWAYS,
        FILE_ATTRIBUTE_NORMAL,
        NULL);
        //映射对象
        HANDLE hFileMapping = CreateFileMapping(hFile,
        NULL,
        PAGE_READWRITE,
        0,
        0,
        NULL);
        //这里赋值了2个文件映射的指针,地址从文件头开始
        TCHAR *pbFile1 = (TCHAR *)MapViewOfFile(hFileMapping, FILE_MAP_WRITE, 0, 0, 0);
        TCHAR *pbFile2 = (TCHAR *)MapViewOfFile(hFileMapping, FILE_MAP_WRITE, 0, 0, 0);
        /*
        输出字符串的内容,可以看到的是,把整个文件当作字符串输出了。
        当然,如果文件中含有’\0′的字符,你看不到全部文件内容的输出。
        */
        //两个输出的结果是一样的
        printf(“%s\n”, pbFile1);
        printf(“%s\n”, pbFile2);
        /*
        下面的操作是往这个pbFile1指向的地址写入点自定义的内容,
        然后比较pbFile2指向地址的值是否相应改变了。
        */
        memcpy(pbFile1, STR, strlen(STR));
        printf(“%s\n”, pbFile1);
        printf(“%s\n”, pbFile2);
        //清理指针和内存
        UnmapViewOfFile(pbFile1);
        UnmapViewOfFile(pbFile2);
        CloseHandle(hFileMapping);
        CloseHandle(hFile);
        return 0;
    }

     
  • 柯昌盛 am 11:51 on 2011 年 8 月 20 日 链接地址 | 回复
    Tags: HTML5, 网站欣赏   

    12个HTML5个人网站欣赏 

       随着IE9、Chrome、Firefox的不断更新,网页的制作技术同样发展很快。HTML5是现在Web开发领域的热点,更多的开发人员开始使用HTML5来开发交互性强、效果出众的Web应用和游戏。本期的HTML5 网站大观要与大家分享12个精美的HTML5个人网站作品。希望这些HTML5 网站实例能帮助大家更好的学习HTML5网站制作。

    Tim Potter

    Henry Brown
    塔防游戏:www.tdplayer.cn
    Marlon Medau
    塔防游戏:www.tdplayer.cn
    Greg Mcausland
    塔防游戏:www.tdplayer.cn
    Visua Design
    塔防游戏:www.tdplayer.cn
    Jjaakk
    塔防游戏:www.tdplayer.cn
    Daniel Mall
    塔防游戏:www.tdplayer.cn
    Rik Hopkinson
    塔防游戏:www.tdplayer.cn
    Iconlicious
    塔防游戏:www.tdplayer.cn
    Min Tran
    塔防游戏:www.tdplayer.cn
    Dado
    塔防游戏:www.tdplayer.cn
    Pelicanfly
    塔防游戏:www.tdplayer.cn

     
  • 柯昌盛 pm 1:26 on 2011 年 8 月 18 日 链接地址 | 回复
    Tags: 学习笔记   

    Java Struts2 与页面传值 

    先执行action处理好类里面的变量,然后通过Strust2的标签来获得action类里面变量的值。

     <% @ taglib prefix = " s " uri = " /struts-tags " %>
    < html >
    < head >
    < title > Hello World! </ title >
    </ head >
    < body >
    < h2 >< s:property value ="message" /></ h2 >
    </ body >
    </ html >

    在action的类里面有一个message的变量。

    方法二、用ValueStack实现

    <%
    //获取封的ValueStack对象
    ValueStack vs=(ValueStack)request.getAttribute("struts.valueStack");
    %>
    < html >
    < head >
    < title > Hello World! </ title >
    </ head >
    < body >
    < h2 ><%=vs.findString("message") %></ h2 >
    </ body >
    </ html >

    Struts2 在执行的时候会把action类里面的变量放入到ValueStack容器中,在jsp页面上通过request.getAttribute(“struts.valueStack”)获得实例。struts.valueStack估计应该是约定好的命名。

     
  • 柯昌盛 am 2:45 on 2011 年 8 月 18 日 链接地址 | 回复  

    mysqldump备份blob类型内容 

    用mysqldump备份出数据库内容到SQL文件。当我们数据库表有blob类型字段的时候,这个导出的SQL再导入的时候就会因为blob字段内容乱码等原因,不能顺利导入了。

    解决办法:

    在用mysqldump备份的时候,采用–hex-blob参数,这样备份出来的sql文件,就可以顺利导入了。

     
c
写新的
j
下一篇文章/下一个回复
k
前一篇文章/以前的回复
r
回复
e
编辑
o
显示/隐藏 回复
t
回到顶部
l
go to login
h
show/hide help
shift + esc
取消

Effects Plugin made by Ares Download