python
1.python中re模塊中search與match的區別 match()函數是在string開始位置匹配,如果不匹配,則返回None search()會掃描整個string查找匹配;也就是說match()只有在0位置匹配成功的話才會返回
2.python中is和==的區別 is和==都是對對象進行比較判斷作用的,但對對象比較判斷的內容並不相同。 ==是Python標準操作中的比較操作符,用來比較兩個對象的value是否相等 is判斷對象的唯一身份標識,也就是id是否相同
3.python中單例模式與工廠模式 單例模式(singleton Pattern)是一種常用的軟件設計模式,該模式的主要目的是確保某一個類只有一個實例存在。 在Python中,我們可以使用多種方法來實現單例模式: 1)使用模塊 可以參考自定義增刪組件site對象,很明顯的單例模式 2)使用new class Singleton: def __init__(self,name): self.name =name def __new__(cls,*args,**kw): if not hasattr(cls,'_instance'): orig = super(Singleton,cls) cls._instance = orig.__new__(cls) return cls_instance 3)利用類實現單例 4)基於metaclass方式實現
4.python貪婪匹配與非貪婪匹配
貪婪匹配:在匹配字符串時總是嘗試匹配更多的字符
非貪婪匹配:在匹配時總是嘗試匹配盡可能少的字符
python中默認採用貪婪匹配
5. Python中匿名函數 lanbda函數,有些函數只是臨時使用,如果業務邏輯很簡單,沒必要給它取個名字
6. python中copy和deepcopy copy对于一个复杂对象的子对象并不会完全复制, deepcopy的时候会将复杂对象的每一层复制一个单独的个体出来。
7.sql注入 sql注入是比較常見的網絡攻擊方式之一,它不是利用操作系統的BUG來實現攻擊,而是針對程序員編寫時的疏忽,通過SQL語句,實現無賬號登錄,甚至篡改數據庫 SQL注入攻擊的總體思路 一,尋找SQL注入的位置 二。判斷服務器類型和後台數據庫類型 三,針對不同的服務器和數據庫特點進行 SQL注入攻擊 SQL注入攻擊實例 String sql = "select * from user_table where username= ' "+userName+" ' and password=' "+password+" '"; --当输入了上面的用户名和密码,上面的SQL语句变成: SELECT * FROM user_table WHERE username= '’or 1 = 1 -- and password='’ """ --分析SQL语句: --条件后面username=”or 1=1 用户名等于 ” 或1=1 那么这个条件一定会成功; --然后后面加两个-,这意味着注释,它将后面的语句注释,让他们不起作用,这样语句永远都--能正确执行,用户轻易骗过系统,获取合法身份。 --这还是比较温柔的,如果是执行 SELECT * FROM user_table WHERE username='' ;DROP DATABASE (DB Name) --' and password='' --其后果可想而知… """ 防禦SQL注入 sql注入防御,归类起来主要有以下几点: 以上便是sql注入的原理。他通过传递一些恶意的参数来破坏原有的sql语句以便达到自己的目的。当然sql注入远远没有这么简单,我们现在讲到的只是冰山一角。那么如何防御sql注入呢? 1. 永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双'-'进行转换等。 2. 永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。比如: 3. 永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。 4. 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。 5. 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。
8.python中的迭代器 1)可以直接作用于for循環的數據類型 第一類:集合數據類型,如list,tuple,dict,set,str等 第二類:generator,包括集合定義generator和帶yield的generator(也就是generator function) 以上這些可以直接作用于for循環的對象統稱為可迭代對象:iterable 2)迭代器(Iterator) generator不但可以作用于for循環,還可以被next()函數不斷調用並返回下一個值,最後拋出stopIteration錯誤表示無法繼續返回下一個值。 可以被next()調用並不斷返回下一個值得對象成為迭代器(Iterator)