异度部落格

学习是一种生活态度。

0%

将 Excel 导入 SQL Server 1)外围应用配置器的设置。 从"功能外围应用配置器"中选择"启动 OPENROWSET 和 OPENDATASOURCE 支持"选项。 2) 接受数据导入的表已经存在。

1
2
insert into t1 select * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,
'Excel 5.0;HDR=YES;DATABASE=c://test.xls',sheet1$);

导入数据并生成表。

1
2
select * into t1 from OPENROWSET('MICROSOFT.JET.OLEDB.4.0',
'Excel 5.0;HDR=YES;DATABASE=c://test.xls',sheet1$);

导入 Excel 中指定的列到数据库表中指定的列。

1
INSERT INTO t1(a1,a2,a3) SELECT a1,a2,a3 FROM OPENROWSET 'MICROSOFT.JET.OLEDB.4.0' ,'Excel5.0; HDR=YES; DATABASE=c://test.xls',sheet1$);

PS:导入时记得关闭 Excel,默认情况下 Excel 的首行作为表头

【题目描述】1000瓶药水,其中至多有1瓶剧毒,现在给你10只小狗在24小时内通过小狗试药的方式找出哪瓶药有毒或者全部无毒(小狗服完药20小时后才能判断是否中毒)

【题目来源】08腾讯

【题目分析】 方法一: 将药水进行二进制编号,比如第一瓶是0000000001,第十瓶是0000001010...... 将小狗1~10的编号,一号小狗对应二进制数的第一位,二号小狗对应第二位,以此类推. 比如:第一瓶药的第十位是1,则让第十只小狗喝下;第十瓶药的第八位和第十位是1,则让编号8,10的小狗喝下,依此类推 例如:第1,2,3条狗狗死了,那么组合成的二进制数为1110000000,转换成十进制就是896瓶药有毒

方法二: 将药分成10份,每份100瓶,在第零个小时将每一份药给一个小狗喝(也就是每条狗试100瓶) 过一个小时后,将第一份药平均分十份(也就是每份十瓶),每份让小狗喝下,第二份、第三份...亦如此类推 在过一个小时后,将第一份药的第一份药分十份(也就是每份一瓶),每份让小狗喝下,第二份、第三份...亦如此类推............ 过二十个小时后,比如第二条狗死了,那有毒的药就在第二个100瓶里面 过二十一个小时后,比如第四条狗死了,那有毒的药就在第二个100瓶里的第四个10瓶里 过二十二个小时后,比如第八条狗死了,那有毒的药就在第二个100瓶里的第四个10瓶里的第8瓶

转自:http://topic.csdn.net/u/20100919/10/b6561d69-bf8b-4e1a-a2a9-743f4edd52ff.html

【题目描述】1到N自然数排序。要求时间复杂度为O(n),空间复杂度为O(1)

【题目来源】华为

【题目分析】

【代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
1到N自然数排序(华为面试题)
要求:时间复杂度为O(n),空间复杂度为O(1)
*/
#include <iostream>
using namespace std;
int array[10] = {0, 2, 4, 6, 9, 8, 1, 3, 7, 5};
int n = 10;
void sort()
{
int t;
for(int i = 0; i < n; i++)
{
while(array[i] != i)
{
t = array[array[i]];
array[array[i]] = array[i];
array[i] = t;
}
}
}
void output()
{
for(int i = 0; i < 10; i++)
cout << array[i];
cout << endl;
}
int main()
{
sort();
output();
return 0;
}

什么是 MEF?

Managed Extensibility Framework(MEF)可以很容易的构造可扩展性的应用程序。MEF 提供了发现和组合能力,因此你可以选择来加载插件。

MEF 解决了什么问题?

  • MEF 赠送了一种简单的在运行时扩展问题。直到现在,任何程序你想支持插件模式,需要构建自己的架构。这些插件经常是特定应用的并且不能被多种实现重用的。
  • MEF 提供一个标准方式来让程序暴露自己,消耗外部扩展。扩展,天生的,能被不同的程序重用。然而,一个扩展需要实现特定应用。扩展可以依赖另一个扩展,MEF 确保它们以正确的顺序同时被装配。
  • MEF 允许在查询和筛选中使用额外的元数据来标记扩展。

MEF 如何工作?

  • 粗略的说,MEF 的核心由一个 catalog(目录)和一个 CompositionContainer 组成。一个 catalog 负责查找扩展,container 负责协调创建和符合的依赖。
  • MEF 第一个类是 ComposablePart。一个 Composable part 提供了一个或多个 Exports,也可以依赖于一个或多个由 Imports 提供的扩展。一个 composable part 也管理可以是 object 或给定类型的实例。MEF,然而,是一个可扩展的,额外的 ComposablePart 实现,它依附于 Import/Export 契约。
  • Exports 和 Imports 每个都有一个契约(Contract)。契约(Contract)是 exports 和 Imports 之间的桥梁。一个 export 契约由用来过滤的元数据组成。例如,它可以指定一个 export 提供的指定能力。
  • MEF 的容器和 Catalogs 交互来访问 composable parts。容器自己解决一部分依赖并暴露 Exports 给外界。如果你愿意,你可以自由去增加 composable part 的实例。
  • 一个 ComposablePart 返回一个 catalog,它在你的程序中很像一个扩展。它有宿主程序提供的 Imports,然后 Export 其他。
  • 默认 MEF composable part 实现使用 attribute 元数据来声明 exports 和 imports。这允许 MEF 来决定哪个 parts, imports 和 exports 是完全可用的。

C & 传统 C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include //设定插入点
#include //字符处理
#include //定义错误码
#include //浮点数处理
#include //文件输入/输出
#include //参数化输入/输出
#include //数据流输入/输出
#include //定义各种数据类型最值常量
#include //定义本地化函数
#include
//定义数学函数
#include //定义输入/输出函数
#include //定义杂项函数及内存分配函数
#include //字符串处理
#include //基于数组的输入/输出
#include //定义关于时间的函数
#include //宽字符处理及输入/输出
#include //宽字符分类

标准 C++ (同上的不再注释)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include //STL 通用算法
#include //STL 位集容器
#include
#include
#include
#include
#include //复数类
#include
#include
#include
#include
#include //STL 双端队列容器
#include //异常处理类
#include
#include //STL 定义运算函数(代替运算符)
#include #include //STL 线性列表容器
#include
//STL 映射容器
#include
#include //基本输入/输出支持
#include //输入/输出系统使用的前置声明
#include
#include //基本输入流
#include //基本输出流
#include //STL 队列容器
#include //STL 集合容器
#include //基于字符串的流
#include //STL 堆栈容器
#include //标准异常类
#include //底层输入/输出支持
#include //字符串类
#include //STL 通用模板类
#include //STL 动态数组容器
#include
#include
using namespace std;

C99 增加

1
2
3
4
5
6
#include //复数处理
#include //浮点环境
#include //整数格式转换
#include //布尔环境
#include //整型环境
#include //通用类型数学宏

Qt 开发库是一个使用广泛的跨平台 GUI 开发库,可用于 Windows、Linux、Mac OSX 和许多手持平台。QT 具有良好结构化(但灵活)的面向对象的结构、清晰的文档以及直观的 API。自 Trolltech 公司被 Nokia 收购后,Qt 成为 Nokia 旗下的一个部门。

Python 的默认 GUI 是 Tkinter,PyQt 是跨平台应用程式框架 Qt 的 Python 绑定版本,同时也是 PyKDE(KDE API 的 Python 绑定)的基础。PyQt 支持 Linux 操作系统和其他 Unix ,以及 Mac OS X 操作系统和微软 Windows 。

1
2
3
4
5
6
7
8
#!/usr/bin/env python
#PyQt Hello World
import sys
from PyQt4 import QtCore,QtGui
app = QtGui.QApplication(sys.argv)
label = QtGui.QLabel("Hello World", None)
label.show()
sys.exit(app.exec_())

生产者-消费者问题是系统进程里面的一个经典问题,这里用 Python 简单模拟一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/usr/bin/env python
#生产者-消费者问题
import threading
from random import randint
from time import sleep, ctime
from Queue import Queue
#创建MyThread子类
class MyThread(threading.Thread):
def __init__(self, func, args, name = ''):
threading.Thread.__init__(self)
self.name = name
self.func = func
self.args = args
def getResult(self):
return self.res
def run(self):
print'starting', self.name, 'at:', ctime()
self.res = apply(self.func, self.args)
print self.name, 'finished at:', ctime()
#生产者与消费者问题
def writeQueue(queue):
queue.put('Anything', 1)
print "Producing object for Queue. Size now", queue.qsize()
def readQueue(queue):
val = queue.get(1)
print 'Consumed object from Queue. Size now', queue.qsize()
def produce(queue, loops):
for i in range(loops):
writeQueue(queue)
sleep(randint(1,3))
def consume(queue, loops):
for i in range(loops):
readQueue(queue)
sleep(randint(2,5))
def main():
funcs = [produce, consume]
nfuncs = range(len(funcs))
nloops = randint(2, 5)
queue = Queue(32)
threads = []
for i in nfuncs:
t = MyThread(funcs[i], (queue, nloops),funcs[i].__name__)
threads.append(t)
for i in nfuncs:
threads[i].start()
for i in nfuncs:
threads[i].join()
print 'All Done!!'
if __name__ == '__main__':
main()

Python 的文件遍历主要使用的 os 这个模块,这里为了方便显示同时使用了一个图形化的库 Tkinter。Tkinter 是 Python 自带的一个 GUI 开发库,虽然没有 PyQt 或 wxPython 那么强大,但是基本的使用绝对足够了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/usr/bin/env python
#文件遍历GUI
import os
from time import sleep
from Tkinter import *
class DirList(object):
def __init__(self, initDir = None):
self.top = Tk()
self.label = Label(self.top, text = 'Directory Lister')
self.label.pack()

self.cwd = StringVar(self.top)
self.dirLabel = Label(self.top, fg = 'blue',
font = ('Helvetica', 12, 'bold'))
self.dirLabel.pack()
self.dirFrame = Frame(self.top)
self.dirScrollbar = Scrollbar(self.dirFrame)
self.dirScrollbar.pack(side = RIGHT, fill = Y)
self.dirListbox = Listbox(self.dirFrame, height = 15,width = 50,
yscrollcommand = self.dirScrollbar.set)
self.dirListbox.bind('<Double-l>', self.setDirAndShow)
self.dirScrollbar.config(command = self.dirListbox.yview)
self.dirListbox.pack(side = LEFT, fill = BOTH)
self.dirFrame.pack()
self.dirEntry = Entry(self.top, width = 50,
textvariable = self.cwd)
self.dirEntry.bind('<Return>', self.showList)
self.dirEntry.pack()
self.buttonFrame = Frame(self.top)
self.clearButton = Button(self.buttonFrame, text = 'Clear',
command = self.clearDir,
activeforeground = 'white',
activebackground = 'blue')
self.listButton = Button(self.buttonFrame, text = 'List Directory',
command = self.showList,
activeforeground = 'white',
activebackground = 'green')
self.quitButton = Button(self.buttonFrame, text = 'Quit',
command = self.top.quit,
activeforeground = 'white',
activebackground = 'red')
self.clearButton.pack(side = LEFT)
self.listButton.pack(side = LEFT)
self.quitButton.pack(side = LEFT)
self.buttonFrame.pack()
if initDir:
self.cwd.set(os.curdir)
self.showList()

#清空列表
def clearDir(self, event = None):
self.cwd.set('')
#设置目录并显示
def setDirAndShow(self, event = None):
self.lastDir = self.cwd.get()
self.dirListbox.cofig(selectbackground = 'red')
check = self.dirListbox.get(self.dirListbox.curselection())
if not check:
check = os.curdir
self.cwd.set(check)
self.showList()
#显示列表
def showList(self, event = None):
error = ''
tmp = self.cwd.get()
if not tmp:
tmp = os.curdir
if not os .path.exists(tmp):
error = tmp + ': no such file'
elif not os.path.isdir(tmp):
error = tmp + ':not a directory'
if error:
self.cwd.set(error)
self.top.update()
sleep(2)
if not (hasattr(self, 'last') and self.lastDir):
self.lastDir = os.curdir
self.cwd.set(self.lastDir)
self.dirListbox.config(selectbackground = 'LightSkyBlue')
self.top.update()
return
self.cwd.set('Fetching Directory contents...')
self.top.update()
dirlist = os.listdir(tmp)
os.chdir(tmp)
self.dirLabel.config(text = os.getcwd())
self.dirListbox.delete(0, END)
self.dirListbox.insert(END, os.curdir)
self.dirListbox.insert(END, os.pardir)
for eachFile in dirlist:
self.dirListbox.insert(END, eachFile)
self.cwd.set(os.curdir)
self.dirListbox.config(selectbackground = 'LightSkyBlue')
#主函数
def main():
dirList = DirList(os.curdir)
dirList.top.mainloop()
dirList.top.destroy()
if __name__ == '__main__':
main()

这里定义了一个 UDPServer 和 UDPClient。这里创建一个 TCP 服务程序,服务器会把客户发送过来的字符串加上一个时间戳,然后显示,并返回客户端。

UDPServer.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env python
from socket import *
from time import ctime
#创建一个UDP客户端
HOST = ''
PORT = 20001
BUFSIZE = 1024
ADDR = (HOST, PORT)
udpSerSock = socket(AF_INET, SOCK_DGRAM)
udpSerSockbind(ADDR)
while True:
print 'waiting for message...'
data, addr = udpSerSock.recvfrom(BUFSIZE)
udpSerSock.sendto('[%s] %s' % (ctime(), data), addr)
print'received from %s >> %s' % (addr, data)
udpSerSock.close()

UDPClient.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/env python
from socket import *
HOST = 'localhost'
PORT = 20001
BUFSIZE = 1024
ADDR = (HOST, PORT)
udpClientSock = socket(AF_INET, SOCK_DGRAM)
while True:
data = raw_input('Enter the message you want to send >')
if not data:
break
udpClientSock.sendto(data, ADDR)
data, ADDR = udpClientSock.recvfrom(BUFSIZE)
if not data:
break
print data
udpClientSock.close()