单例模式学习笔记

单例模式的一个官方定义:确保一个类只有一个实例,并提供一个全局访问点。

根据单例模式的概念和上面的类图,总结了单例模式的以下三个要点:

<!–[if !supportLists]–>1. <!–[endif]–>定义私有的构造函数。一旦定义了私有的构造函数,在外界就不能通过new来创建它的实例了。因此能确保一个类只有一个实例。

<!–[if !supportLists]–>2. <!–[endif]–>要创建实例,就要有一个变量来保存该实例。因此需要定义静态私有变量来记录该类的唯一实例。

<!–[if !supportLists]–>3. <!–[endif]–>定义一个公有方法或者属性来把该类的实例公开出去。也就是需要提供类的全局访问点。

若考虑线程并发问题,当出现两个或更多的线程同时获取instance实例,而且是null的时候,那样就是多个线程分别创建了instance,这是违反单例模式的规则的。因此,考虑了多线程后,代码如下:

public class Singleton
{
       private static Singleton instance;
       private static object _lock=new object();

       private Singleton()
       {

       }

       public static Singleton GetInstance()
       {
               if(instance==null)
               {
                      lock(_lock)
                      {
                             if(instance==null)
                             {
                                     instance=new Singleton();
                             }
                      }
               }
               return instance;
       }
}


程序中采用了“双重锁”方式,有效地解决了单例模式在多线程下的问题。程序用了内外两层if语句:内层if语句块的加锁操作保证了只有一个线程可以访问该语句块,即只创建一个实例。外层if语句块先判断instance实例是否为空,这样每个线程不用每次都加锁,只有实例为空才加锁并创建实例。如果已经存在instance实例,就直接返回该实例,提高了程序的性能。



windows xp快捷键和常用操作运行命令

win+D 显示桌面

Alt+Tab 任务切换

Alt+PrScrn 截取最上面的一个活动窗口的截屏

WIN+ BREAK 显示”系统属性”对话框。

WIN+ E 打开”我的电脑”。

WIN+ L 如果连接到网络域,则锁定您的计算机,或者如果没有连接到网络域,则切换用户。

 

win+R 运行 常用操作命令如下:

 

write 写字板

winmsd 系统信息

winchat xp自带局域网聊天

msconfig 系统配置

mplayer2 媒体播放机

mstsc 远程桌面连接

mspaint 画图板

mmc 控制台

notepad 记事本

nslookup 网络管理的工具向导

services.msc 本地服务

taskmgr 任务管理器

explorer 资源管理器

regedit 注册表

chkdsk  磁盘检查

calc 计算器

cleanmgr 垃圾整理

charmap 启动字符映射表

compmgmt.msc 计算机管理

osk  打开屏幕键盘

lusrmgr.msc 本机用户和组

gpedit.msc 组策略

appwiz.cpl 添加或删除程序

logoff  注销命令

tsshutdn 60秒倒计时关机命令

shutdown -s -t 15 15秒关机

ExecuteNonQuery()的返回值

      ADO.NET中使用ExecuteNonQuery()方法时,我们常通过看其返回值是否大于0来判断操作是否成功 。ExecuteNonQuery()方法主要用于更新数据,对于Update,Insert,Delete语句执行成功时返回值为该命令所影响的行数,如果影响的行数为0则返回值为0,如果数据操作回滚得话返回值为-1,对于上述操作,用判断返回值是否大于0的方式是可以的。 

     但这只是在处理一般的修改、插入、删除操作时的做法,对于其他的操作如对数据库结构的操作,在操作成功时的返回值却是-1。例如对数据库添加一个数据表的Create操作,当创建数据表成功时返回-1,如果操作失败的话(如数据表已经存在)往往会发生异常,因此一般需要用try-catch语句来容错。

SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=DB;Integrated Security=SSPI");
        
   string str = "CREATE TABLE test ( " +
  "[ID] [int] IDENTITY (1, 1) NOT NULL , " +
  "[userName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ," +
  "[userSex] [char] (2) COLLATE Chinese_PRC_CI_AS NULL ," +
  "[userBirthday] [smalldatetime] NULL ," +
") ON [PRIMARY]   ";     

  SqlCommand comm = new SqlCommand(str, conn);
        int i = 10;
        try
        {
            conn.Open();
            i = comm.ExecuteNonQuery();
            conn.Close();
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }

        Response.Write(i.ToString());

      执行成功则返回的值为-1,若数据表已经存在则返回异常:数据库中已存在名为 ‘test’ 的对象。

sql多表连接查询实例

select
a.ShortName,
c.CustomerCode,
CASE WHEN ISNULL(c.OtherName,'')='' THEN c.CustomerName ELSE c.OtherName END as 'CustomerName',
d.ContactName,
d.EMail,b.StartTime   
from TB_Department a 
left join TB_Application b 
on a.CompanyCode=b.CompanyCode 
left join TB_Customer c
on b.CustomerCode =c.CustomerCode  
left join TB_CustomerContact d
on c.TransCode  =d.TransCode
where d.EMail is not null and d.EMail <> ''
and (datediff(mm,b.StartTime ,GETDATE()) between 0 and 24)
order by b.StartTime desc

备注:

1.DATEDIFF() 函数,计算时间差。

例如:datediff(dd,时间字段,GETDATE())=365 ;

datediff(mm,b.JobStart ,GETDATE()) between 0 and 24;

datediff(yy,c.JobStart ,GETDATE())=1

2.ISNULL() 函数,使用指定的替换值替换 NULL。

例如:ISNULL(userName,’’)=’’,如果传入的userName为空,则输出’’来代替空值,否则输出userName。

此处无论userName=’’或者userName为null都可以查询到

大话ADO.NET操作流程

ADO.NET的数据库操作流程如下:

1、建立数据库连接,包含连接对象(sqlconnection)、连接字符串、打开连接三个步骤。

2、执行命令,包含命令对象(sqlcommand)、sql语句、打开的连接对象

3、返回结果,包含两种情况,一是返回SqlDataReader对象,一是返回DataSet对象

抽水的流程大致如下:

<!–[if !supportLists]–>1、 <!–[endif]–>确定水龙头的连接方向

<!–[if !supportLists]–>2、 <!–[endif]–>接水龙头

<!–[if !supportLists]–>3、 <!–[endif]–>发动抽水机

<!–[if !supportLists]–>4、 <!–[endif]–>接水管

<!–[if !supportLists]–>5、 <!–[endif]–>准备水池来存放水

<!–[if !supportLists]–>6、 <!–[endif]–>把水管中的水输到水池中

<!–[if !supportLists]–>7、 <!–[endif]–>抽完水,关水龙头

<!–[if !supportLists]–>8、 <!–[endif]–>停止抽水机

9、 拆水管

下面用对比的方法来形象地理解每个对象的作用


1、数据库好比水源,存储了大量的数据。


2Connection好比伸入水中的进水笼头,保持与水的接触,只有它与水进行了连接,其他对象才可以抽到水。


3Command则像抽水机,为抽水提供动力和执行方法,通过水龙头,然后把水返给上面的水管


4DataAdapterDataReader就像输水管,担任着水的传输任务,并起着桥梁的作用。二者是有不同的,后面章节中将详细介绍。


5DataSet则是一个大水库,把抽上来的水按一定关系的池子进行存放。即使撤掉抽水装置(断开连接,离线状态),也可以保持的存在。这也正是ADO.NET的核心。


6DataTable则像水库中的每个独立的水池子,分别存放不同种类的水。一个大水库由一个或多个这样的水池子组成。


编码实现如下:

//数据库连接字符串  --确定水龙头连接的方向
string strCon = "Data source=.;Initial Catalog=db;User ID=abc;Password= ";
string strSql = "select UserCode,UserName,DivisionCode from UserMas";
//定义连接对象      --接水龙头
SqlConnection conn = new SqlConnection(strCon );
//打开连接对象      --开水龙头
conn.Open();
//实例化SqlCommand对象来执行sql语句           --发动抽水机
SqlCommand comm = new SqlCommand(strSql,conn);
//实例化SqlDataAdapter对象来把数据源引到myDa  --接水管
SqlDataAdapter myDa = new SqlDataAdapter(comm);
//实例化DataSet来存放数据源                   --准备水池来储水
DataSet Ds = new DataSet();
//用myDa填充Ds     --把水管的水存到水池
myDa.Fill(Ds);
//关闭连接对象     --抽完水,关水龙头
conn.Close();
//关闭comm对象     --停止抽水机
comm.Dispose();
//关闭Da对象       --拆水管
myDa.Dispose();


无法访问C盘,执行页内操作时的错误--的解决过程

这次我家的台式机遇到了一个特别的情况:系统无法正常启动,在windows进度条界面中断,然后反复重启,即使是安全模式也一样。检查机箱内存条和硬盘等,没找出原因。于是用winPE系统进入C盘,打算先备份资料再重装系统。进入winPE后,发现鼠标双击无法打开C:\盘,提示“无法访问C:\,执行页内操作时的错误”。其他盘符正常。

经过探索,用chkdsk命令解决了问题。具体如下:从其他电脑的windows目录下的system32目录中拷贝chkdsk.exeU盘里,在winPEcmd执行CHKDSK C: /F,然后磁盘开始扫描并自动修复所有出现的坏簇等故障,等修复完毕后重启电脑,系统启动正常。

需要注意的是:chkdsk.exe必须使用xp版本的,之前copy了一个win7系统下的chkdsk.exe无法使用,提示不是有效的win32程序。

戴尔品牌电脑系统问题

      公司一个同事的电脑开不了机,我过去看了,发现一开始提示:ntldr is missing的错误,于是我用PE给它修复了ntldr和boot.ini,此时开机,新的问题又来了:hal.dll丢失或损坏。

这时候,我郁闷了,于是通过PE进入C盘系统盘把boot.ini文件再检查一遍,发现其内容为:


[boot loader]

timeout=5

default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=”Microsoft Windows XP Professional” /noexecute=optin /fastdetect

C:\GHLDR=”一键GHOST v8.3 Build 060428”


      原来关键问题就出在这里:multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

应该改为:multi(0)disk(0)rdisk(0)partition(2)\WINDOWS

主要原因是我们公司用的办公电脑统一都是戴尔品牌机,DELL品牌机的硬盘分区比较特殊,它的第一分区是个隐藏分区,而不是C盘,因此,C盘算是第二分区了,所以无法读取到hal.dll文件。

也有另外一个方法,就是重建MBR表,直接删除第一个没用的隐藏分区

      至此,问题圆满解决。

新买电脑蓝屏0x0000007B

     同事新买的戴尔笔记本,不会用自带预装的Ubuntu,于是委托我帮她重装个xp系统。没想到的是一开始给它分区的时候就出现问题了,找不到硬盘,然后就出现了蓝屏,代码:0x0000007B。我初步判断这肯定跟硬盘有关,因为分区时识别不到硬盘。

      用PE进去,依然没看见硬盘,用个Diskgenius的光盘进去,能看到硬盘。于是判断应该问题应该跟主板设置有关。最后探究了主要原因是:这台机器配置还是比较新的,作为老的系统盘,它不认这么新的硬盘接口,所以得进BIOS把硬盘模式改成IDE兼容模式。主要解决方法是:在主板设置里,把硬盘的SATA模式改为IDE模式。具体如下:重启电脑,按F2(DELL的主板不是按Delete,而是F2)进入BIOS,第一项是config →子菜单serial  ATA,然后把STATController  Mode  Option(AHXI)的AHXI改称Compatibility。保存并退出,重启电脑,然后PE进去发现能识别到硬盘了。于是进行后续的硬盘分区,重装系统等工作。

        另外,如果找不到IDE这项,那是因为一些主板中的选项描述不太一样,有些写着AHCI和Compatibility,AHCI就相当于SATA模式,Compatibility就是IDE模式。

        至此,0x0000007B蓝屏问题圆满解决。

美女黑客——网络风云人物

    昵称:失色 (Shi.Se)
  真实姓名:李妙姿
  博客: http://shisehhk.blog.163.com
  年龄:24
  婚姻:未婚
  QQ:592722361
  大学:中山大学专业 机械设计&企业管理行业
  网络安全认证:CISP、CIW、CCNA、MCSE
  公司:广东(香港)科伦达信息科技有限公司 
  职务: CEO
  故乡:广东省惠州市 
  现居地:广东省惠州市
  编程:Asm、Visual C++、C++ Builder
  开发: NDIS DDK、IFS、Kernel、Socket、ISAP
  歌手 :刘德华、张学友、周华健、SHE…
  装备:IBM ThinkPad X40、GreatWall PC 17’ TFT、LandMark SUV
  简历 :国内知名网络安全反黑客专家,熟悉国内外的信息安全标准和体系,精通防火墙、反病毒、入侵检测、身份认证等安全产品的原理及部署,拥有8年之久的信息安全从业经历,曾在深圳、广州、广东和北京的多家专业信息安全公司担任技术总监之职务,为政府、证券、银行、信息港和电子商务网设计整体安全解决方案,并提供专业化的安全咨询、管理和培训等服务,2005创办广东(香港)科伦达信息科技有限公司致力于网络安全、数据中心、电子商务和媒体娱乐方面的发展。
  顾问:失色黑客联盟、黑客基地、黑客X档案、中国人民大学信息学院、国家商标局通达服务中心

  人物生平
  有着“中国最美女黑客”之称的广东女孩失色走红网络。失色甜美长相里透露着一股神秘智慧的超然气质,由于失色不但长相漂亮还有着高深的技术,一度被称为“中国最美女黑客”。 
  失色,广东人,原名李妙姿, 英文名是:shise。专门破解软件和教人使用黑客工具,接受信息时报采访坦言既是爱好也为赚钱,美女加上黑客通常马上就会成为焦点。中国的黑客不少,但女性黑客却寥寥可数,美女黑客就更为罕见了。甜美的相貌加上高明的技术,令广东女生“失色”近日人气大涨.

  社会评价
  中国第一美女黑客失色智慧与美丽的化身,有着“中国最美女黑客”之称的广东女孩失色走红网络。。失色甜美长相里透露着一股神秘智慧的超然气质,由于失色不但长相漂亮还有着高深的技术,一度被称为“中国最美女黑客”。  

      美女黑客广东女生“失色”近日人气大涨,被称为“中国最美女黑客”。不少网友成为“粉丝”,美女黑客自曝,以她技术教人,每个月平均可以赚到约10万元。   

      黑客美女加上黑客通常马上就会成为焦点。早前,波兰知名美女黑客Joanna Rutkowska就因发表了一篇曝光了英特尔CPU一个缓存漏洞的文章而声名大噪,一举成为安全业内的焦点人物。中国的黑客不少,但女性黑客却寥寥可数,美女黑客就更为罕见了。甜美的相貌加上高明的技术,令广东女生“失色”近日人气大涨。   

      进入“失色”的博客 http://shisehhk.blog.163.com,只见她在日志中发布了不少关于破解、入侵等技术的基础教程,更不时放出一些软件供网友下载使用,如“QQ登录密码加密算法分析和QQ登录器编写”教程、IP修改工具、Office密码清除工具等。   

     “失色”告诉记者,进入这行既是因为个人的爱好,黑客可以通过卖软件、教学等途径赚到钱,

  社会影响
  失色-网友成为“粉丝”
  她还会替别人破解软件,她向记者透露,以她现时的技术,每个月平均可以赚到约10万元。 
  除了在个人博客上发布一些软件和语音教程外,“失色”同时也是一个名为“失色黑客联盟织”网站的站长。而据她所知,中国“学这个的女生几乎是没有的”,美貌加上技术令“失色”的博客人气大涨,不少经常到她博客取经的网友都成了她的忠实fans。不仅是破解、入侵、漏洞分析的高手,还是美女,更令网友将她封为了“中国NO.1美女黑客”。“你的技术把你的魅力提上去了,也许这就是你吸引人的地方吧,崇拜死我了”,某网友留言说。 
  失色-曾是天涯和中美黑客大战传奇人物 
  在网络上很多人对“失色”这个名字并不陌生,网友们说起他,都像说一个传奇人物一样。据悉“失色”进入网络的时间并不长,只有短短的几年,但他几乎把所有的时间都花在了网络上,而且他最大的“爱好”就是成为一名职业黑客,而他表现出来的天赋也让人震惊。 
  几年时间内,“失色”靠自学成了一名网络高手,为了证明自己的实力,他常以“黑”一些论坛为乐,也因此,逐渐引起了网民的注意。在一次次的黑客行动中,从攻击别人到侵入网站,甚至盗取了各种机密信息非法获利上百万万。“失色”言出必行,几乎没有失手过。这其中,她最“偏爱”的就是天涯社区,几十台服务器对于他来说就像进超市一样进出自如。 
  中美黑客大战她曾经也有参与并且是重要的组织策划的技术人员,“黑”迹 累累…. 
  “失色”最著名的一次“英雄事迹”就是在网上发帖,声称一个星期内要“黑”掉天涯论坛,结果网站设置的层层围追堵截也没有拦住他,最终天涯还是被黑。一些论坛也曾多次试图封住“失色”的ID号,却只是徒劳,在天涯里,谁也挡不住失色的ID,失色出入天涯服务器,获取管理权限直如遨游无人之境。在天涯扫除“黑金”之前他送人积分是上亿上亿地送,出手不可谓不阔绰!

  南方日报(记者 刘静)