110道題整理(61-110)

import time

#6一、簡述同源策略
'''
同源策略須要同時知足如下三點要求:
1)協議相同
2)域名相同
3)端口相同

http:www.test.com與https:www.test.com 不一樣源——協議不一樣

http:www.test.com與http:www.admin.com 不一樣源——域名不一樣

http:www.test.com與http:www.test.com:8081 不一樣源——端口不一樣

只要不知足其中任意一個要求,就不符合同源策略,就會出現「跨域」

'''

#6二、簡述cookie和session的區別
'''
1,session 在服務器端,cookie 在客戶端(瀏覽器)
二、session 的運行依賴 session id,而 session id 是存在 cookie 中的
也就是說,若是瀏覽器禁用了 cookie ,同時 session 也會失效
三、cookie安全性比session差

'''

#6三、簡述多線程、多進程
'''
進程:
一、操做系統進行資源分配和調度的基本單位,多個進程之間相互獨立
二、穩定性好,若是一個進程崩潰,不影響其餘進程
三、進程消耗資源大,開啓的進程數量有限制

線程:
一、CPU進行資源分配和調度的基本單位
二、線程是進程的一部分,是比進程更小的能獨立運行的基本單位
三、一個進程下的多個線程能夠共享該進程的全部資源
四、若是IO操做密集,則能夠多線程運行效率高
五、缺點是若是一個線程崩潰,都會形成進程的崩潰

應用:
一、IO密集的用多線程,在用戶輸入,sleep 時候,
能夠切換到其餘線程執行,減小等待的時間

二、CPU密集的用多進程,由於假如IO操做少,用多線程的話,
由於線程共享一個全局解釋器鎖,
當前運行的線程會霸佔GIL,其餘線程沒有GIL,
就不能充分利用多核CPU的優點
'''


#6四、簡述any()和all()方法
'''
any():只要迭代器中有一個元素爲真就爲真
all():迭代器中全部的判斷項返回都是真,結果才爲真
python中什麼元素爲假?
0,空字符串,空列表、空字典、空元組、None, False

'''

#65
'''
IOError、AttributeError、ImportError、IndentationError、

IndexError、KeyError、SyntaxError、NameError分別表明什麼異常?

答:
IOError:輸入輸出異常

AttributeError:試圖訪問一個對象沒有的屬性

ImportError:沒法引入模塊或包,基本是路徑問題

IndentationError:語法錯誤,代碼沒有正確的對齊

IndexError:下標索引超出序列邊界

KeyError:試圖訪問你字典裏不存在的鍵

SyntaxError:Python代碼邏輯語法出錯,不能執行

NameError:使用一個還未賦予對象的變量

'''

#6六、python中copy和deepcopy區別
'''
一、複製不可變數據類型,無論copy仍是deepcopy,都是同一個地址
二、複製的值是可變對象(列表和字典):
淺拷貝copy有兩種狀況:
1.複製的對象中無 複雜 子對象, 原來值的改變並不會影響淺複製的值
同時淺複製的值改變也並不會影響原來的值(也就是互不影響)

2.複製的對象中有 複雜 子對象,(例如列表中的一個子元素是一個列表),
改變原來的值 中的複雜子對象的值 ,會影響淺複製的值。

深拷貝deepcopy:徹底複製獨立,包括內層列表和字典

'''

#6七、列出幾種魔法方法並簡要介紹用途

'''
__init__:對象初始化方法

__new__:建立對象時候執行的方法,單列模式會用到

__str__:當使用print輸出對象的時候,只要本身定義了__str__(self)方法,那麼就會打印從在這個方法中return的數據

__del__:刪除對象執行的方法

class f:
def __str__(self):
return 'ok'
f = f()
print(f.__str__())

'''

#6八、C:Users y-wu.junyaDesktop>python 1.py 22 33命令行啓動程序並傳參,
# print(sys.argv)會輸出什麼數據?
'''
輸出文件名和參數構成的列表
['1.py','22','33']
'''

#6九、請將[i for i in range(3)]改爲生成器
'''
a = (i for i in range(3))
print(list(a))
print(type(a))

'''

#70、a = " hehheh ",去除收尾空格
'''
a = " hehheh "
a = a.strip()
print(a)

'''

#7一、舉例sort和sorted對列表排序,list=[0,-1,3,-10,5,9]
'''
list=[0,-1,3,-10,5,9]
list.sort(reverse=False)
print('從小到大的順序:',list)

ret = sorted(list,reverse=False)
print(ret)

總結:
1.sort是在原基礎上修改,沒有返回值
2.sorted有返回值,是個新的列表
'''

#7二、對list排序
# foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],使用lambda函數從小到大排序
'''
foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4]
fo = sorted(foo,key=lambda x:x,reverse=False)
print(fo) #[-20, -5, -4, -4, -2, 0, 2, 4, 8, 8, 9]

'''

#7三、使用lambda函數對list排序
# foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],輸出結果爲
#[0,2,4,8,8,9,-2,-4,-4,-5,-20],正數從小到大,負數從大到小

'''
傳兩個條件,x<0和abs(x)
當i<0的時候,按照絕對值大小進行排序,i>0的時候,正常排序

foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4]
fo = sorted(foo,key=lambda i:(i<0,abs(i)))
print(fo)
'''

#7四、列表嵌套字典的排序,分別根據年齡和姓名排序

'''
foo = [
{"name":"zs","age":19},
{"name":"ll","age":54},
{"name":"wa","age":17},
{"name":"df","age":23}
]

#年齡
f1 = sorted(foo,key=lambda x:x["age"])
print('按照年齡排序',f1)

#姓名
f2 = sorted(foo,key=lambda x:x["name"])
print('按照姓名排序',f2)

'''


#7五、列表嵌套元組,分別按字母和數字排序

'''
foo = [
("zs",19),
("ls",54),
("wa",17),
("df",23),

]

#按字母
f1 = sorted(foo,key=lambda i:i[0])
print(f1)

#按數字
f2 = sorted(foo,key=lambda i:i[1])
print(f2)

'''


#7六、列表嵌套列表排序,年齡數字相同怎麼辦?
'''
foo = [
["zs",19],
["ls",54],
["wa",17],
["df",19],
]

f = sorted(foo,key=lambda x:(x[1],x[0]))
print(f) #[['wa', 17], ['df', 19], ['zs', 19], ['ls', 54]]

注意:lambda函數中,若是發生了相同的條件,則根據後面的條件進行排序

'''

#7七、根據鍵對字典排序(方法一,zip函數)
'''
dic = {"name":"zs","sex":"man","city":"bj"}

#字典轉化爲列表,而且嵌套元祖
foo = zip(dic.keys(),dic.values())
f = [i for i in foo ]
#print(f) #[('name', 'zs'), ('sex', 'man'), ('city', 'bj')]
#按照鍵排序
f_sort = sorted(f,key=lambda i:i[0])
new_dic = {i[0]:i[1] for i in f_sort}
print('new_dic:',new_dic) #{'city': 'bj', 'name': 'zs', 'sex': 'man'}

--------------
78.題(方法二)

dic_sort = sorted(dic.items(),key=lambda i:i[0])
# print(dic_sort) #[('city', 'bj'), ('name', 'zs'), ('sex', 'man')]
new_dic_sort = {i[0]:i[1] for i in dic_sort}
print(new_dic_sort)

這兩種方法效果相同!
'''


#7九、列表推導式、字典推導式、生成器

'''
import random

list1 = [i for i in range(6)]
print(list) #[0, 1, 2, 3, 4, 5]

dic = {i:random.randint(1,6) for i in ["a","b","c"]}
print(dic)

a = (i for i in range(6))
print(list(a)) #[0, 1, 2, 3, 4, 5]
print(a) #<generator object <genexpr> at 0x000001696375C408>

'''

#80、最後出一道檢驗題目,根據字符串長度排序,看排序是否靈活運用
'''
s = ["ab","abc","a","dgdf"]

#第一種方法
s_sort = sorted(s,key=lambda i:len(i))
print(s_sort)

#第二種方法
s.sort(key=len,reverse=True)
print(s)

'''

import time


#8一、舉例說明SQL注入和解決辦法
'''
當以字符串格式化書寫方式的時候,若是用戶輸入的有;+SQL語句,後面的SQL語句會執行,
好比例子中的SQL注入會刪除數據庫demo
input_name = "zs;drop database demo"
sql = "select * from demo where name='%s" %input_name
print(sql)

解決方式:經過傳參數方式解決SQL注入
params = [input_name]
count = cs1.execute('select * from demo where name="%s",params)

'''
#8二、s="info:xiaoZhang 33 shandong",
# 用正則切分字符串輸出
# ['info', 'xiaoZhang', '33', 'shandong']

'''
import re
s="info:xiaoZhang 33 shandong"
s_ret = re.split(r'[:| ]',s)
print(s_ret)

'''
#8三、正則匹配以163.com結尾的郵箱
'''
email_list = ["xiaowang@163.com","xiaoming@qq.com","xiaoshuai@163.com"]
import re
for email in email_list:
email_list_ret = re.findall(r'[\w]{4,20}@163\.com$',email)
if email_list_ret:
print(email_list_ret)
else:
pass
'''

#8四、遞歸求和,遞歸完成 1+2+3+4,,,,+10的和
'''
def get_sum(num):
if num >= 1:
res = num + get_sum(num-1)
else:
res = 0
return res
res = get_sum(5)
print(res)

# res = 5 + get_sum(4)
# res = 5 + 4 + get_sum(3)
# res = 5 + 4 + 3 + get_sum(2)
# res = 5 + 4 + 3 + 2 + get_sum(1)
# res = 5 + 4 + 3 + 2 + 1 + get_sum(0)

'''
#8五、python字典和json字符串相互轉化方法
'''
import json
dic = {"name":"zs"}
ret1 = json.dumps(dic)
print(type(ret1)) #<class 'str'>

ret2 = json.loads(ret1)
print(type(ret2)) #<class 'dict'>
'''
#8六、MyISAM 與 InnoDB 區別:
'''
一、InnoDB 支持事務,MyISAM 不支持,這一點是很是之重要。事務是一種高

級的處理方式,如在一些列增刪改中只要哪一個出錯還能夠回滾還原,而 MyISAM

就不能夠了;

二、MyISAM 適合查詢以及插入爲主的應用,InnoDB 適合頻繁修改以及涉及到

安全性較高的應用;

三、InnoDB 支持外鍵,MyISAM 不支持;

四、對於自增加的字段,InnoDB 中必須包含只有該字段的索引,可是在 MyISAM

表中能夠和其餘字段一塊兒創建聯合索引;

五、清空整個表時,InnoDB 是一行一行的刪除,效率很是慢。MyISAM 則會重

建表

'''
#8七、統計字符串中某字符出現次數
"""
str = "張三 美國 小日本 哈哈 呵呵 張 三"
str_count = str.count("張三")
print(str_count) # 1

"""
#8八、字符串轉化大小寫
'''
str1 = "allen"
str1 = str1.upper()
print(str1) #ALLEN

str2 = str1.lower()
print(str2) #allen

'''
#8九、用兩種方法去空格
"""
str1 = "hello world haha hehe"
str1 = str1.split(" ")
str1 = "".join(str1)
print(str1) #helloworldhahahehe

str2 = "hello world haha hehe"
str2 = str2.replace(' ','')
print(str2) #helloworldhahahehe
"""

#90、正則匹配不是以4和7結尾的手機號

"""
import re
tels = ["332814","332817","332817","332816"]
for tel in tels:
ret = re.match('1[\d]{9}[0-3,5-6,8-9]',tel)
if ret:
print('正確的手機號碼',ret.group())
else:
print('錯誤的手機號碼',tel)

"""

#9一、簡述python引用計數機制

"""
python垃圾回收主要以引用計數爲主,
標記-清除和分代清除爲輔的機制,
其中標記-清除和分代回收主要是爲了處理循環引用的難題。

引用計數算法
當有1個變量保存了對象的引用時,此對象的引用計數就會加1

當使用del刪除變量指向的對象時,
若是對象的引用計數不爲1,好比3,
那麼此時只會讓這個引用計數減1,即變爲2,
當再次調用del時,變爲1,若是再調用1次del,此時會真的把對象進行刪除

"""

#9二、int("1.4"),int(1.4)輸出結果?
"""
print(int("1.4")) #ValueError
print(int(1.4)) #1

"""

#9三、列舉3條以上PEP8編碼規範
"""
一、頂級定義之間空兩行,好比函數或者類定義。

二、方法定義、類定義與第一個方法之間,都應該空一行

三、三引號進行註釋

四、使用Pycharm、Eclipse通常使用4個空格來縮進代碼

"""

#9四、正則表達式匹配第一個URL
"""
s = "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=python&rsv_pq=f912242f00000db7&rsv_t=7303ZsYPgxjNvPXiFYC4sw6XnA%2FoEv%2B4FEmxpbfwyXcd9fZ6YFUaAP8XdJc&rqlang=cn&rsv_enter=1&rsv_sug3=3&rsv_sug1=2&rhttps://www.baidu.comsv_sug7=101&rsv_sug2=0&ihttps://www.baidu.comnputT=2342&rsv_sug4=4060&rsv_sug=2"
import re
ret = re.findall(r'https://.*?\.com',s)
print(ret) #['https://www.baidu.com', 'https://www.baidu.com', 'https://www.baidu.com']

"""

#9五、正則匹配中文
"""
import re
title = "你好 ,世界,aaa,我愛北京天安門"
t_obj = re.compile(r'[\u4e00-\u9fa5]+')
ret = re.findall(t_obj,title)
print(ret)

"""

#9六、簡述樂觀鎖和悲觀鎖
"""
悲觀鎖, 就是很悲觀,每次去拿數據的時候都認爲別人會修改,
因此每次在拿數據的時候都會上鎖,這樣別人想拿這個數據就會block直到它拿到鎖。
傳統的關係型數據庫裏邊就用到了不少這種鎖機制,
好比行鎖,表鎖等,讀鎖,寫鎖等,都是在作操做以前先上鎖。

樂觀鎖,就是很樂觀,每次去拿數據的時候都認爲別人不會修改,
因此不會上鎖,可是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據,
可使用版本號等機制,樂觀鎖適用於多讀的應用類型,這樣能夠提升吞吐量

"""

#97 r、r+、rb、rb+文件打開模式區別


#9八、Linux命令重定向 > 和 >>
"""
Linux 容許將命令執行結果 重定向到一個 文件

將本應顯示在終端上的內容 輸出/追加 到指定文件中

> 表示輸出,會覆蓋文件原有的內容

>> 表示追加,會將內容追加到已有文件的末尾

將 echo 輸出的信息保存到 1.txt 裏echo Hello Python > 1.txt
將 tree 輸出的信息追加到 1.txt 文件的末尾tree >> 1.txt

"""

#9九、正則表達式匹配出<html><h1>www.itcast.cn</h1></html>
#前面的<>和後面的<>是對應的,能夠用此方法


"""
labels = [
"<html><h1>www.itcast.cn</h1></html>",
"<html><h1>www.itcast.cn</h2></html>"
]
import re
for label in labels:

ret = re.match(r'<(\w*)><(\w*)>.*?</\2></\1>',label)
if ret:
print(ret.group())
else:
print('錯誤的是',label)


<html><h1>www.itcast.cn</h1></html>
錯誤的是 <html><h1>www.itcast.cn</h2></html>

"""

#100、python傳參數是傳值仍是傳址?
"""
Python中函數參數是引用傳遞(注意不是值傳遞)。
對於不可變類型(數值型、字符串、元組),因變量不能修改,
因此運算不會影響到變量自身;而對於可變類型(列表字典)來講,
函數體運算可能會更改傳入的參數變量。

"""

import time


# 10一、求兩個列表的交集、差集、並集
'''
a = [1,2,3,4]
b = [4,3,5,6]

x = set(a) & set(b)
print('這是交集',list(x))

y = set(a) | set(b)
print('這是並集',list(y))

z = set(a) - set(b)
print('這是差集',list(z))

'''

#10二、生成0-100的隨機數
'''
import random

#0-1之間隨機小鼠
ret = random.random() * 100
print(ret)

#0-101之間隨機整數
ret2 = random.randint(0,101)
print(ret2)

'''
#10三、lambda匿名函數好處
'''
精簡代碼,lambda省去了定義函數,map省去了寫for循環過程

list1 = [2,4]
ret = map(lambda x:x**2,list1)
print(ret) #<map object at 0x000001A4FD741208>
print(list(ret)) #[4, 16]
'''

#10四、常見的網絡傳輸協議

'''
http,https,ftp,tcp,udp
'''

#10五、單引號、雙引號、三引號用法
"""
1 表示字符串的時候,單引號裏面能夠用雙引號,而不用轉義字符,反之亦然。
2 可是若是直接用單引號擴住單引號,則須要轉義,像這樣:
' She said:'Yes.' '
3 三引號能夠直接書寫多行,一般用於大段,大篇幅的字符串

"""

#10六、python垃圾回收機制
"""
python垃圾回收主要以引用計數爲主,
標記-清除和分代清除爲輔的機制,
其中標記-清除和分代回收主要是爲了處理循環引用的難題。

引用計數算法
當有1個變量保存了對象的引用時,此對象的引用計數就會加1

當使用del刪除變量指向的對象時,
若是對象的引用計數不爲1,好比3,
那麼此時只會讓這個引用計數減1,即變爲2,
當再次調用del時,變爲1,若是再調用1次del,此時會真的把對象進行刪除
"""

#10七、HTTP請求中get和post區別

"""
一、GET請求是經過URL直接請求數據,數據信息能夠在URL中直接看到,
好比瀏覽器訪問;而POST請求是放在請求頭中的,咱們是沒法直接看到的;

二、GET提交有數據大小的限制,通常是不超過1024個字節,
而這種說法也不徹底準確,HTTP協議並無設定URL字節長度的上限,
而是瀏覽器作了些處理,因此長度依據瀏覽器的不一樣有所不一樣;

POST請求在HTTP協議中也沒有作說明,
通常來講是沒有設置限制的,可是實際上瀏覽器也有默認值。

整體來講,少許的數據使用GET,大量的數據使用POST。

三、GET請求由於數據參數是暴露在URL中的,
因此安全性比較低,好比密碼是不能暴露的,就不能使用GET請求;

POST請求中,請求參數信息是放在請求頭的,因此安全性較高,可使用。
在實際中,涉及到登陸操做的時候,儘可能使用HTTPS請求,安全性更好。
"""

#10八、python中讀取Excel文件的方法
"""
應用數據分析庫pandas
"""

#10九、簡述多線程、多進程
"""
進程:

一、操做系統進行資源分配和調度的基本單位,多個進程之間相互獨立

二、穩定性好,若是一個進程崩潰,不影響其餘進程,
可是進程消耗資源大,開啓的進程數量有限制

線程:

一、CPU進行資源分配和調度的基本單位,
線程是進程的一部分,是比進程更小的能獨立運行的基本單位,
一個進程下的多個線程能夠共享該進程的全部資源

二、若是IO操做密集,則能夠多線程運行效率高,缺點是若是一個線程崩潰,
都會形成進程的崩潰

應用:

IO密集的用多線程,在用戶輸入,sleep 時候,能夠切換到其餘線程執行,
減小等待的時間

CPU密集的用多進程,由於假如IO操做少,用多線程的話,由於線程共享一個全局解釋器鎖,
當前運行的線程會霸佔GIL,其餘線程沒有GIL,就不能充分利用多核CPU的優點

"""

#1十、python正則中search和match
"""
search 匹配的第一個匹配到的數據,加group()

findall 知足正則的都匹配

match 從開頭進行匹配,匹配不到會報錯,加group()
"""
相關文章
相關標籤/搜索