110道題整理(1-60)

#一、一行代碼實現1--100之和
'''
#print(sum(range(1,101)))
#注意:range(n,m) 能取n,可是不能取m
'''javascript

#二、如何在一個函數內部修改全局變量
'''
a = 1
def change():
global a
a = 2
print(a)
change()
print(a)
注意:用global關鍵字修改全局變量
'''css

#三、列出5個python標準庫
"""
1.os 和操做相關的函數
2.sys 用於命令行參數
3.math 數學運算
4.datetime 處理日期時間
5.re 正則
"""html

#四、字典如何刪除鍵和合並兩個字典
'''
dic1 = {"name":"allen","age":20,"gender":"male"}
dic2 = {"age":22}
刪除鍵"gender"
del dic1["gender"]
print(dic1)
並兩個字典
dic1.update(dic2)
print(dic1)
'''前端

#5.談下python的GIL
#談下多線程
#談下多進程
'''
1.GIL是什麼?
GIL是python的全局解釋器鎖。
2.用來幹什麼的?
舉個例子:假如一個進程當中有多個線程在執行,當一個線程運行程序的時候
會霸佔python解釋器,至關於加了一把鎖,GIL。使得該進程內的其餘
線程沒法運行,等到該線程運行完才能夠運行。
3.有特殊狀況嗎?
若是該線程運行過程當中遇到了耗時操做,則解釋器解開,使其餘線程
運行。因此在多線程中,線程的運行是有前後順序的,不是同時運行。
4.補充:多進程
多進程中由於每一個進程都能被系統分配資源,至關於每一個進程有了一個
python解釋器,因此多進程能夠實現多個進程的同時運行。缺點是
進程系統資源開銷大。
'''java

#六、python實現列表去重的方法
'''
list1 = [1,2,3,2,1]
s = list(set(list1))
print(s)
注意:set內不能有重複
'''python


#七、fun(*args,**kwargs)中的*args,**kwargs什麼意思?
'''
都是用來接收函數的參數的
*args:接收非鍵值對形式的可變數量的參數列表給函數
*kwargs:接不定長度的鍵值對形式的參數給函數
'''mysql

#八、python2和python3的range(100)的區別
'''
python2 返回的是列表
python3 返回的是迭代器
'''linux

#九、一句話解釋什麼樣的語言可以用裝飾器?
'''
函數能做爲參數傳遞的語言能使用裝飾器web

# 時間裝飾器
def cal_time(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
# print("%s running time: %s secs." % (func.__name__, start_time - end_time))
print("%s 函數執行時間是: %s 秒" % (func.__name__, start_time - end_time))
return result正則表達式

return wrapper
'''

#十、python內建數據類型有哪些
'''
int
bool
str
list
dict
tuple
'''

#十一、簡述面向對象中__new__和__init__區別
'''
__init__是初始化方法,建立對象後,就馬上被默認調用了,可接收參數
__init__有一個參數self
__init__不須要返回值

__new__至少要有一個參數cls,表明當前類,此參數在實例化時由Python解釋器自動識別
__new__必需要有返回值,返回實例化出來的實例,
若是__new__建立的是當前類的實例,會自動調用__init__函數

class Dog:
def __init__(self,name,age):
self.name = name
self.age = age
def run(self):
print('我家的%s,今年%s了,如今在奔跑'%(self.name,self.age))
if __name__ == '__main__':
dog = Dog('軟糖',4)
dog.run()
'''

#十二、簡述with方法打開處理文件幫我咱們作了什麼?
'''
幫咱們作finally中f.close()
'''

#1三、列表[1,2,3,4,5],請使用map()函數輸出[1,4,9,16,25],並使用列表推導式提取出大於10的數,最終輸出[16,25]
'''
list1 = [1,2,3,4,5]
print(list(map(lambda x: x**2 ,list1 ))) #[1, 4, 9, 16, 25]
list2 = list(map(lambda x: x**2 ,list1 ))
list3 = [i for i in list2 if i>10] #[16, 25]
print(list3)
'''

#1四、python中生成隨機整數、隨機小數、0--1之間小數方法
'''
#隨機整數
import random
r1 = random.randint(5,15)
print(r1)
#生成5個隨機小數
import numpy as np
r2 = np.random.randn(5)
print(r2)
#0--1之間小數方法
r3 = random.random()
print(r3)
#random.random()不能傳遞值
'''

#15.避免轉義給字符串加哪一個字母表示原始字符串?
'''
r , 表示須要原始字符串,不轉義特殊字符
'''

#1六、<div class="nam">中國</div>,用正則匹配出標籤裏面的內容(「中國」),其中class的類名是不肯定的
'''
import re
str1 = """<div class="nam">中國</div>"""
ret = re.findall('<div class=".*">(.*?)</div>',str1)
print(ret)
'''

#1七、python中斷言方法舉例
"""
a = 2
assert(a > 1)
print('ok') #ok
b = 2
assert(b > 3)
print('ok')
"""

#1八、數據表student有id,name,score,city字段,其中name中的名字可有重複,須要消除重複行,請寫sql語句
#select distinct name from student

#10個Linux經常使用命令
'''
ls cd pwd ps rm mkdir gzip grep du df touch mv more tail
'''

#20、python2和python3區別?列舉5個
'''
1.python2 range(1,5) 返回的是列表,python3 返回的是迭代器
2.python2 使用print 既能夠用小括號,也能夠空格
python3必須使用小括號
3.python2中使用ascii編碼,python3使用utf-8編碼
4.python2中若是顯示正常中文,引入coding聲明,python3不須要
5.python2中是raw_imput函數,python3中是input函數
6.python2中unicode表示字符串序列,str表示字節序列
python3中str表示字符串序列,byte表示字節序列
'''

import time

#2一、列出python中可變數據類型和不可變數據類型,並簡述原理
'''
不可變數據類型:int型、字符串型str和元組tuple

不容許變量的值發生變化,若是改變了變量的值,至關因而新建了一個對象,內存中會有新地址,
而對於相同的值的對象,在內存中則只有一個地址

總結:變量的值不變,則內存地址不變
a = 1
b = 1
print(id(a)) 140703722169168
print(id(b)) 140703722169168
-------------
可變數據類型:列表list和字典dict;

容許變量的值發生變化,即若是對變量進行append、+=等這種操做後,
只是改變了變量的值,而不會新建一個對象,變量引用的對象的地址也不會變化
不過對於相同的值的不一樣對象,在內存中都有本身的地址

總結:變量名不變,則內存地址不變

a = [1,2]
b = [1,2]
print(id(a)) 1194884883080
print(id(b)) 1194884883144
'''

#2二、s = "ajldjlajfdljfddd",去重並從小到大排序輸出"adfjl"

'''
s = "ajldjlajfdljfddd"
s = set(s)
s = list(s)
s.sort(reverse=False)
s = "".join(s)
#s = str(s) #['a', 'd', 'f', 'j', 'l']
print(s) #adfjl
注意:
1.字符串去重用set方法
2.去重以後,必須轉化爲列表,是由於sort函數只能接收list類型的數據
3.sort方法沒有返回值,不要用變量接收
4.sort以後,用 "".join() 變成字符串
5.從小到大排列:reverse=False
'''

#2三、用lambda函數實現兩個數相乘
'''
ret = lambda a,b:a*b
print(ret(3,4))
'''

#2四、字典根據鍵從小到大排序
'''
sort 與 sorted 區別:

sort 是應用在 list 上的方法,屬於列表的成員方法
sorted 能夠對全部可迭代的對象進行排序操做
list 的 sort 方法返回的是對已經存在的列表進行操做,
內建函數 sorted 方法返回的是一個新的 list,而不是在原來的基礎上進行的操做。
sort使用方法爲ls.sort(),而sorted使用方法爲sorted(ls)

sort(cmp=None, key=None, reverse=False)
sorted(iterable, cmp=None, key=None, reverse=False)

reverse:True反序;False 正序

print(dic.items()) #[('name', 'zs'), ('age', 18), ('city', '深圳'), ('tel', '1362626627')]

dic={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}
lis = sorted(dic.items(),key=lambda d:d[0],reverse=False)
print(lis)

'''

#2五、利用collections庫的Counter方法統計字符串每一個單詞出現的次數
# "kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
'''
from collections import Counter
s = "kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
s = Counter(s)
print(s)
'''

#2六、字符串a = "not 404 found 張三 99 深圳",每一個詞中間是空格,
# 用正則過濾掉英文和數字,最終輸出"張三 深圳"
'''
思路:
1.先用正則找出不符合要求的數據
2.再根據原始的數據,遍歷兩個列表,把其中共同的部分刪掉

import re
a = "not 404 found 張三 99 深圳"
b = a.split(" ")
ret = re.findall('\d+|[a-zA-Z]+',a)
for i in ret: #['not', '404', 'found', '99']
if i in b: #['not', '404', 'found', '張三', '99', '深圳']
b.remove(i)
bb = " ".join(b)
print(ret)
print(bb)
--------------------
匹配小數的代碼
import re
aa = "not 404 55.66 found 張三 99 深圳"
bb = aa.split(" ")
ret = re.findall('\d+\.?\d*|[a-zA-Z]+',aa)
for i in ret:
if i in bb:
bb.remove(i)
cc = " ".join(bb)
print(ret)
print(cc)

'''

#27.filter方法求出列表全部奇數並構造新列表,
# a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
'''
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a = list(filter(lambda x:x%2==1,a))
print(a) #filter(lambda x:x%2==1,a)
'''

#2八、列表推導式求列表全部奇數並構造新列表,
# a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
'''
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ret = [i for i in a if i%2==1]
print(ret)
'''

#2九、正則re.complie做用
'''
re.compile是將正則表達式編譯成一個對象,加快速度,並重復使用
text = "apple's price is $9.94,orange's price is $12.5"
#先編譯號提取的內容
r_obj = re.compile('\d+\.?\d*')
#直接傳入編譯內容和文本便可
ret = re.search(r_obj,text)
print(ret.group())
ret2 = re.findall(r_obj,text)
print(ret2)
'''


#30、a=(1,)b=(1),c=("1") 分別是什麼類型的數據?
'''
a=(1,)
b=(1)
c=("1")
print(type(a)) #typle
print(type(b)) #int
print(type(c)) #str
'''

#3一、兩個列表[1,5,7,9]和[2,2,6,8]合併爲[1,2,2,3,6,7,8,9]
'''
l1 = [1,5,7,9]
l2 = [2,2,6,8]
l1.extend(l2)

l1.sort(reverse=False)
print(l1) #[1, 2, 2, 5, 6, 7, 8, 9]

'''

#3二、用python刪除文件和用linux命令刪除文件方法
'''
python:os.remove(文件名)
linux: rm 文件名
'''

#3三、log日誌中,咱們須要用時間戳記錄error,warning等的發生時間,
# 請用datetime模塊打印當前時間戳 「2018-04-01 11:38:54」
'''
import datetime
a = str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
print(a) #2019-04-16 17:27:33

#若是加上星期的話:
a = str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))\
+ ' 星期' + str(datetime.datetime.now().isoweekday())
print(a)
'''

#3四、數據庫優化查詢方法
'''
外鍵,索引,聯合查詢,選擇特定字段等等
'''

#35.請列出你會的任意一種統計圖(條形圖、折線圖等)繪製的開源庫,第三方也行
'''
pychart、matplotlib
'''

#3六、寫一段自定義異常代碼
'''
def foo():
try:
for i in range(6):
if i > 3:
raise Exception("數字大於3了")
print(i)

except Exception as e:
print(e)
if __name__ == '__main__':
foo()
'''

#37.正則表達式匹配中,(.*)和(.*?)匹配區別?
'''
(.*)是貪婪匹配,會把知足正則的儘量多的日後匹配

(.*?)是非貪婪匹配,會把知足正則的儘量少匹配
'''

#38.簡述Django的orm
'''
ORM,全拼Object-Relation Mapping,意爲對象-關係映射
實現了數據模型與數據庫的解耦,經過簡單的配置就能夠輕鬆更換數據庫,
而不須要修改代碼只須要面向對象編程,orm操做本質上會根據對接的數據庫引擎,
翻譯成對應的sql語句,全部使用Django開發的項目無需關心程序底層使用的
是MySQL、Oracle、sqlite....,若是數據庫遷移,只須要更換
Django的數據庫引擎便可
'''

#3九、[[1,2],[3,4],[5,6]]一行代碼展開該列表,得出[1,2,3,4,5,6]
'''
l = [[1,2],[3,4],[5,6]]
ll = [j for i in l for j in i]
print(ll)
'''

#40、x="abc",y="def",z=["d","e","f"],
# 分別求出x.join(y)和x.join(z)返回的結果
'''
x="abc"
y="def"
z=["d","e","f"]

m = x.join(y)
print(m) #dabceabcf

n = x.join(z)
print(n) #dabceabcf
'''

import time

#4一、舉例說明異常模塊中try except else finally的相關意義
'''
try..except..else沒有捕獲到異常,執行else語句
try..except..finally不論是否捕獲到異常,都執行finally語句

'''

#4二、python中交換兩個數值
'''
a=1
b=2
a,b = b,a
print(a) #2
print(b) #1

'''

#4三、舉例說明zip()函數用法
'''
zip()函數在運算時,會以一個或多個序列(可迭代對象)作爲參數,
返回一個元組的列表。同時將這些序列中並排的元素配對。
zip()參數能夠接受任何類型的序列

a = [1,2]
b = [3,4]
ret = [i for i in zip(a,b)]
print(ret) #[(1, 3), (2, 4)]

A = "ab"
B = "xyz"
ret2 = [i for i in zip(A,B)]
print(ret2) #[('a', 'x'), ('b', 'y')]

'''

#4四、a="張明 98分",用re.sub,將98替換爲100
'''
import re
a="張明 98分"
a = re.sub('\d+','100',a)
print(a)

'''

#4五、寫5條經常使用sql語句
'''
#select * from 表名
#show databases
#show tables
#update 表名 set 字段 where id=6
#delete from 表名 where id=6

'''

#4六、a="hello"和b="你好"編碼成bytes類型
'''
a=b"hello"
b="你好".encode()
print(a,b)
print(type(a),type(b))

英文字母直接加上b便可
中文用encode()
'''

#47.[1,2,3]+[4,5,6]的結果是多少?
'''
a = [1,2,3]
b = [4,5,6]
c = a + b
print(c) #[1, 2, 3, 4, 5, 6]
兩個列表相加,等價於extend
'''

#4八、提升python運行效率的方法
'''
一、使用生成器,由於能夠節約大量內存
二、循環代碼優化,避免過多重複代碼的執行
三、核心模塊用Cython PyPy等,提升效率
四、多進程、多線程、協程
五、多個if elif條件判斷,能夠把最有可能先發生的條件放到前面寫,
這樣能夠減小程序判斷的次數,提升效率

'''

#4九、簡述mysql和redis區別
"""
redis: 內存型非關係數據庫,數據保存在內存中,速度快
mysql:關係型數據庫,數據保存在磁盤中,檢索的話,
會有必定的Io操做,訪問速度相對慢

"""

#50、遇到bug如何處理
'''
1.經過print()打印,分段檢測程序是否有問題
2.若是涉及一些第三方框架,會去查官方文檔
三、對於bug的管理與歸類總結
四、導包問題、

'''

#5一、正則匹配,匹配日期2018-03-20
'''
url='https://sycm.taobao.com/bda/tradinganaly/overview/get_summary.json?dateRange=2018-03-20%7C2018-03-20&dateType=recent1&device=1&token=ff25b109b&_=1521595613462'
import re
ret1 = re.findall('\d{4}-\d{2}-\d+',url)
print(ret1)

ret2 = re.findall('dateRange=(.*?)%7C(.*?)&date',url)
print(ret2)

'''

#5二、list=[2,3,5,4,9,6],從小到大排序,不準用sort,輸出[2,3,4,5,6,9]
'''
list=[2,3,5,4,9,6]

def buble_sort(data_list):
for i in range(len(data_list)-1):
exchange = False
for j in range(len(data_list)-1-i):
if data_list[j] > data_list[j+1]:
data_list[j],data_list[j+1] = data_list[j+1],data_list[j]
if not exchange:
break

if __name__ == '__main__':
data_list = list
buble_sort(data_list)
print(data_list) #[2, 3, 4, 5, 6, 9]

'''

#5三、寫一個單列模式
'''
尚未搞設計模式
'''

#5四、保留兩位小數
'''
待解決

'''

#5五、求三個方法打印結果

#5六、列出常見的狀態碼和意義
'''
200 OK
請求正常處理完畢

303 See Other
臨時重定向,指望使用GET定向獲取

403 Forbidden
請求資源被拒絕

404 Not Found
沒法找到請求資源(服務器無理由拒絕)

500 Internal Server Error
服務器故障或Web應用故障

'''

#5七、分別從前端、後端、數據庫闡述web項目的性能優化
'''
前端優化:

一、減小http請求、例如製做精靈圖

二、html和CSS放在頁面上部,javascript放在頁面下面,由於js加載比HTML和Css加載慢,因此要優先加載html和css,以防頁面顯示不全,性能差,也影響用戶體驗差


後端優化:

一、緩存存儲讀寫次數高,變化少的數據,好比網站首頁的信息、商品的信息等。應用程序讀取數據時,通常是先從緩存中讀取,若是讀取不到或數據已失效,再訪問磁盤數據庫,並將數據再次寫入緩存。

二、異步方式,若是有耗時操做,能夠採用異步,好比celery

三、代碼優化,避免循環和判斷次數太多,若是多個if else判斷,優先判斷最有可能先發生的狀況



數據庫優化:

一、若有條件,數據能夠存放於redis,讀取速度快

二、創建索引、外鍵等

'''

#5八、使用pop和del刪除字典中的"name"字段,dic={"name":"zs","age":18}

'''
dic = {"name":"zs","age":18}

del dic["name"]
print(dic) #{'age': 18}

v = dic.pop("name")
print(v) #zs
print(dic) #{'age': 18}

'''

#5九、列出常見MYSQL數據存儲引擎
'''
InnoDB:
支持事務處理,支持外鍵,支持崩潰修復能力和併發控制。
若是須要對事務的完整性要求比較高(好比銀行),要求實現併發控制(好比售票),
那選擇InnoDB有很大的優點。若是須要頻繁的更新、刪除操做的數據庫,也能夠選擇InnoDB,
由於支持事務的提交(commit)和回滾(rollback)。

MyISAM:
插入數據快,空間和內存使用比較低。若是表主要是用於插入新記錄和讀出記錄,
那麼選擇MyISAM能實現處理高效率。
若是應用的完整性、併發性要求比 較低,也可使用。

MEMORY:
全部的數據都在內存中,數據的處理速度快,可是安全性不高。
若是須要很快的讀寫速度,對數據的安全性要求較低,能夠選擇MEMOEY。
它對錶的大小有要求,不能創建太大的表。
因此,這類數據庫只使用在相對較小的數據庫表。
'''

#60、計算代碼運行結果,zip函數歷史文章已經說了,
# 得出[("a",1),("b",2),("c",3),("d",4),("e",5)]

'''

A = zip(("a","b","c","d","e"),(1,2,3,4,5))
A0 = dict(A) #A0 {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
A1 = range(10)
A2 = [i for i in A1 if i in A0] # []
A3 = [A0[s] for s in A0] # [1, 2, 3, 4, 5]

print("A0",A0)

print(list(zip(("a","b","c","d","e"),(1,2,3,4,5))))

print(A2)

print(A3)


ret1 = dict([["name","zs"],["age",18]])
print(ret1)

ret2 = dict([("name","zs"),("age",18)])
print(ret2)

'''
相關文章
相關標籤/搜索