zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    linux 压缩当前文件夹下所有文件
    redis从入门到精通
    焦点小组测试和可用性测试
    面包屑的故事
    VSCode导入两个工程示例
    数据库规格化
    mergeCI一点小波澜
    Java中List与Set相互转化
    MyBatis中in的使用
    长寿时代的养老风险管理
  • 原文地址:https://www.cnblogs.com/Geirge-ye/p/13405279.html
Copyright © 2011-2022 走看看