數據類型的內置方法 可變類型與不可變類型

来源:https://www.cnblogs.com/lzy199911/archive/2023/01/17/17058956.html
-Advertisement-
Play Games

數據類型的內置方法 什麼是數據類型的內置方法? ​ ==數據類型自帶的操作方法或功能== 調用數據類型的內置的方法的方式是: ​ ==句點符== 數據類型.方法名() eg: 變數名.方法名() 數據值.方法名() 1.整型相關操作方法 類型轉換 int(待轉換的數據類型) 1.浮點型可以轉整型 ' ...


數據類型的內置方法

什麼是數據類型的內置方法?

數據類型自帶的操作方法或功能

調用數據類型的內置的方法的方式是:

句點符

數據類型.方法名()

eg:
	變數名.方法名()
    數據值.方法名()

1.整型相關操作方法

  • 類型轉換

    int(待轉換的數據類型)

    1.浮點型可以轉整型 '只要小數點前面的整數 不做四捨五入'
    
    2.字元串可以轉整型 '但是字元串內部必須是整數才可以'
    
    3.布爾值的使用 int(True) #1  int(False) #0
    
    4.其他類型轉整型會報錯
    
  • 進位數轉換

    十進位轉其他進位:
    十進位轉二進位>>bin()
    十進位轉八進位>>oct()
    十進位轉十六進位>>hex()
    
    '''
    0b >>> 二進位標識
    0o >>> 八進位標識
    0x >>> 十六進位標識
    數字開頭沒有任何標識的激素hi十進位
    '''
    
    其他進位轉十進位
    '''自動轉'''
    二進位轉十進位>>int(0b0101110101)
    二進位轉八進位>>int(0o155)
    二進位轉十六進位>>int(0x64)
    '''手動轉'''
    二進位轉十進位>>int('0b0101110101',2)
    八進位轉十進位>>int('0o155',8)
    十六進位
    轉十進位>>int('0x64',16)
    

2.浮點型相關操作方法

  • 類型轉換

    float(待轉換的數據)

    1.整型可以轉成浮點型 '後面跟一個小數點1.0'
    
    2.字元串可以轉成浮點型 '但是字元串內必須是數字(整數或者小數)'
    
    3.布爾值的使用 int(True) #1.0  int(False) #0.0
    
    4.其他類型轉浮點型會報錯
    
  • 數學運算邏輯容易出錯

    a = 23.00
    b = 1.2
    c = a * b
    print(c) # 27.599999999999998
    
    '''
    由以上舉例得出:python對數字運算精確度很低,容易出錯!
    如需要精準的計算需藉助其他模塊!
    '''
    

3.字元串相關操作方法

  • 類型轉換

    str(待轉換的數據)

    1.所有的數據類型都可以轉換成字元串類型
    
    2.給所有數據類型前後加引號也可以轉換成字元串類型
    
  • 常用內置方法

    • 1.索引取值(單個字元串)

      1.索引取值是從0開始的 顧頭不顧尾
      2.超出索引的取值範圍就會報錯
      3.索引支持負數 [-1] 就是取最後一個
      
      s1 = 'abcde'
      print(s1[0])   # a
      print(s1[-1])  # e
      
    • 2.切片取值(多個字元)

      l1 = [1,2,3,4,5,6,7]
      print(l1[:])  # [1,2,3,4,5,6,7]全要
      print(l1[:3]) #[1,2,3]要前3個
      print(l1[2:]) #[3,4,5,6,7]前2個不要剩下的全要
      print(l1[2:5])#[3,4,5]要索引2-索引5之間的 索引顧頭不顧尾 所以最後一位不拿
      print(l1[-3:-1])#[5,6] 從後往前拿
      
    • 3.修改切片間隔

      s1 = 'abcde'
      print(s1[0:5:1]) # abcde 取索引0~索引4的值且間隔1
      print(s1[0:5:2]) # ace   取索引0~索引4的值且間隔2
      print(s1[::2])   # ace   取所有值且間隔2
      
    • 4.統計字元次數

      len(待統計的變數名或數據值)

      s1 = 'abcde'
      print(len(s1))  # 5
      
    • 5.移除首尾指定字元

      strip(想要移除的符號)

      name = '$張三$'
      
      1)移除首尾所有指定字元
        print(name.strip('$'))   # 張三   
      2)移除首指定字元
        print(name.lstrip('$'))  # 張三$ 
      3)移除尾指定字元
        print(name.rstrip('$'))  # $張三  
      4)括弧內不寫預設移除空格
        print(name.strip())      # 張三   
        '常用於獲取用戶輸入移除用戶不小心打的空格'
      
    • 6.切割字元串中的指定字元

      split('')當字元串中有多個重覆字元分割不同數據時,可切割該指定字元以列表的形式顯示

      a = 'aaa|bbb|ccc'
      
      1)切割所有指定字元
        print(a.split('|'))  # ['aaa', 'bbb', 'ccc'] 
        #註意:此處可以用【解壓賦值】依次賦值給不同變數名!
      2)從左往右切指定個數
        print(a.lsplit('|',maxsplit=1))  #['aaa', 'bbb|ccc'] 
      3)從右往左切指定個數
        print(a.rsplit('|',maxsplit=1)) #['aaa|bbb', 'ccc'] 
      
      
    • 7.字元串大小寫相關

      uppre() lower() isupper() islower()常用於驗證碼

      a = 'aHGdb'
      1.將字元串全部轉成大小寫
      print(a.upper())
      print(a.lower())
      
      2.判斷當前字元串是否為純大小寫 結果是布爾值
      print(a.isupper())
      print(a.islower())
      
    • 8.字元串格式化輸出

      方式1):等價於%s 沒優勢
           lx = '我的名字是{},我的年齡是{}'
           print(lx.format('張三',18))
           #結果為:我的名字是張三,我的年齡是18
      方式2):支持索引取值,可以重覆使用
           lx = '我的名字是{0},我的年齡是{1}{0}{1}'
           print(lx.format('張三',18))
           #結果為:我的名字是張三,我的年齡是18張三18
      方式3):支持關鍵字取值(按K取值),可重覆使用
           lx = '名字是{name}{name}年齡是{age}'
           print(lx.format(name='張三',age=18))
           #結果為:名字是張三張三年齡是18
      方法4):最常用!!!*****************
           name = '張三'
           age = 18
           print(f'名字是{name}年齡是{age}')
           #結果為:名字是張三年齡是18
      
      
    • 9.判斷字元串中是否是純數字

      isdigit()判斷是否為純數字 常用於用戶輸入時校驗 結果是布爾值

      print('123'.isdigit())  # True
      print('123a'.isdigit()) # False
      
  • 其他內置方法

    • 1.替換字元串中指定內容

      replace()括弧內寫被替換的字元與 想要替換的字元

      a='a a a b b b'
      
      1)從左往右替換所有指定內容
        print(a.replace('a','c'))
        #結果為:c c c b b b
      2)從左往右替換指定個數的內容
        print(a.replace('a','c',1))
        #結果為:c a a b b b
      
    • 2.字元串的拼接

      '' . join([a,b]) 引號中間可以加想要拼接的字元 也可以不寫 a,b分別是想要拼接起來的數據

      a='張'
      b='三'
      
      方式1):直接用+號,但是易占用較多記憶體
          print(a+b)  # 張三
      方式2):直接*該字元串實現拼接多個
          print(a*2)  # 張張
      方式3):建議使用join方法!切可以在拼接中插入指定字元
          print(''.join([a,b]))   # 張三
          print('|'.join([a,b]))  # 張|三
      
    • 3.統計指定字元出現的次數

      count()統計個數

      a='aabcdef'
      print(a.count('a')) #2
      '''統計a出現的次數'''
      
    • 4.判斷字元串開頭或者結尾

      startswith()判斷開頭是否為某個值

      endswith()判斷結尾是否為某個值

      a='hello'
      
      #判開頭是否是'he'
        print(a.startswith('he')) # True
      #判斷結尾是否是'lo'
        print(a.endswith('lo')) # True
      
      
    • 5..查找某個字元對應索引值

      index() 存在則返回索引值 如果有相同的 則只會返回從左邊數第一個查到的某個字元的索引值 不存在則報錯

      find()存在則返回索引值 如果有相同的 則只會返回從左邊數第一個查到的某個字元的索引值 不存在返回-1

      a='helloh'
      
      #獲取'h'的索引值 不存在則報錯
        print(a.index('h')) # 0
      #獲取'a'的索引值 不存在則返回-1
        print(a.find('a'))  # -1
      
      
    • 6.正文相關轉換首字母大寫

      title() 將所有字元串的首字母大寫

      capitalize() 將第一個字元串的首字母大寫

      a = 'my name is zhangsan'
      1)將所有單詞的首字母大寫
        print(a.title())
        #結果為:My Name Is Zhangsan
      2)將字元串第一個字母大寫
        print(a.capitalize())
        #結果為:My name is zhangsan
      
      

4.列表相關操作方法

  • 類型轉換

    list(其他數據類型)

    能夠被for迴圈的數據都可以轉換成列表

    支持for迴圈的數據類型有:列表、字典(只有k參與)、元組、集合、字元串

    字元串、字典、元組、集合:
    
    print(list('123'))  # ['1', '2', '3']
    print(list({'name':'張三','age':'18'}))  # ['name', 'age']
    print(list((1,2,3)))  # [1, 2, 3]
    print(list({1,2,3}))  # [1, 2, 3]
    
    
  • 常用內置方法

    • 1.索引取值(單個數據值)

      '''
      1.索引值是從0開始(顧頭不顧尾)
      2.超出索引範圍會直接報錯
      3.索引可跟負數,[-1]為取最後一個
      '''
      l1 = [1, 2, 3]
      print(l1[0])   # 1
      print(l1[-1])  # 3
      
      
    • 2.切片取值(多個數據值)

      l1 = [1,2,3,4,5,6,7]
      print(l1[:])  # [1,2,3,4,5,6,7]全要
      print(l1[:3]) #[1,2,3]要前3個
      print(l1[2:]) #[3,4,5,6,7]前2個不要剩下的全要
      print(l1[2:5])#[3,4,5]要索引2-索引5之間的 索引顧頭不顧尾 所以最後一位不拿
      print(l1[-3:-1])#[5,6] 從後往前拿
      
    • 3.修改切片間隔

      l1 = [1,2,3,4,5]
      print(l1[0:5:1]) # [1,2,3,4,5] 取索引0~索引4的值且間隔1
      print(l1[0:5:2]) # [1,3,5]     取索引0~索引4的值且間隔2
      print(l1[::2])   # [1,3,5]     取所有值且間隔2
      
      
    • 4.統計列表數據值個數

      len() 統計數據值個數

      l1 = [1,2,3,4,5]
      print(len(l1))  # 5
      
      
    • 5.修改數據值

      通過索引找出想要修改的數據值 直接賦一個新的數據值

      l1 = [1,2,3,4,5]
      l1[0] = 'z'
      print(l1)
      #結果為:['z',2,3,4,5]
      
      
    • 6.添加數據值

      append()尾部追加

      insert()括弧內跟索引 與 想要插入的數據值

      extend()合併兩個列表

      1)尾部追加數據值
        l1 = [1, 2, 3, 4, 5]
        l1.append('zzz')
        print(l1)
        #結果為:[1, 2, 3, 4, 5, 'zzz']
      2)任意位置插入數據值(在索引幾的位置插入什麼數據)
        l1 = [1, 2, 3, 4, 5]
        l1.insert(1,'zzz')
        print(l1)
        #結果為:[1, 'zzz', 2, 3, 4, 5]
      3)擴展列表、合併列表
        l1=[1,2,3]
        l2=[4,5,6]
      方式一:不建議使用
        print(l1+l2)
        #結果為:[1,2,3,4,5,6]
      方式二:底層是用for+append實現的
        l1.extend(l2)
        print(l1)
        #結果為:[1,2,3,4,5,6]
      
      
    • 7.刪除數據

      del() eg:del l1[0] 刪除列表1中的索引值為0的數據值

      remove()刪除指定數據

      pop()彈出後可以賦給一個變數名 然後刪除 也可以接著用

      l1 = [1,2,3,4,5]
      1)通用刪除 del:(刪除某個索引對應的值)
        del l1[0]
        print(l1)
        #結果為:[2, 3, 4, 5]
      2)指定刪除 remove:(徹底刪除指定的數據值)
        l1.remove(2)
        print(l1)
        #結果為:[1, 3, 4, 5]
      3)取出後刪除 pop:(可以把取出的值賦值給一個變數)
        '括弧內不寫預設最後一個,0代表第一個,1代表第二個'
        l1.pop()
        print(l1)
        #結果為:[1, 2, 3, 4]
        a = l1.pop()
        print(a)
        #結果為:5
        pop常用於觀展人數中,xxx退出觀戰
      
      
    • 8.查看數據值對應的索引值

      index() 查看某個數據的索引值

      l1=[1,2,3,4]
      print(l1.index(1))
      #結果為:0
      
      
    • 9.統計某個數據值出現的次數

      count()統計數據值出現的次數

      l1=[1,1,2,3,4,5]
      print(l1.count(1))
      #結果為:2
      
      
    • 10.數據值排序

      sort()升序

      sort(revrese = True)降序

      l1=[4,2,5,1,2,3]
      1)升序:
        l1.sort()
        print(l1)
        #結果為:[1, 2, 2, 3, 4, 5]
      2)降序:
        l1.sort(reverse=True)
        print(l1)
        #結果為:[5, 4, 3, 2, 2, 1]
      
      
    • 11.反轉列表數據值順序

      reverse()將列表反轉

      跟升序降序不同

      l1=[4,2,5,1,2,3]
      l1.reverse()
      print(l1)
      #結果為:[3, 2, 1, 5, 2, 4]
      
      
    • 12.兩個列表比較

      a = [99,11]
      b = [11,22,33]
      print(a > b)
      #結果為:True
      
      l1 = ['a','b']
      l2 = ['A','B']
      print(l1 > l2)
      #結果為True
      '''
      1.兩個列表在比較大小時,是按照索引0來互相比較。
      2.不同數據類型之間無法比較
      3.a比A大的原因是因為中間涉及到字元編碼。a=97 A=65
      '''
      
      

5.字典相關操作方法

  • 類型轉換

    dict(其他數據類型)

    字典一般是直接定義 不類型轉換

  • 常用內置方法

    • 1.字典取值

      按k取值

      .get()常用來取字典中的k鍵

      按k取值 k不存在就會報錯
      
      d = {'name':'張三','age':18}
      print(d['name'])
      #結果為:張三
      print(d['xxx'])
      #結果為:會報錯
      
      get取值 k不存在時返回none
      
      d = {'name':'張三','age':18}
      print(d.get('name'))
      #結果為:張三
      print(d.get('xxx'))
      #結果為:None
      
    • 2.修改字典v值

      直接按k鍵 = 想要修改的新數據值

      d = {'name':'張三','age':18}
      d['name']='李四'
      print(d)
      #結果為:{'name': '李四', 'age': 18}
      
      
    • 3.新增鍵值對

      當k存在時 修改k對應的v值

      當k不存在時 新增鍵值對

      d = {'name':'張三','age':18}
      d['pwd']=123
      print(d)
      #結果為:{'name': '張三', 'age': 18, 'pwd': 123}
      
      
    • 4.刪除數據

      del 直接刪除

      pop() 可以給彈出的數據值綁定一個變數名 接著用

      d = {'name':'張三','age':18}
      
      1)del d['name'] #刪除name的鍵值對
      
      2)a = d.pop('name')
        print(a)#列印出來的就是刪除掉的V值
        print(d)#列印出來的就是刪除後的列表
      
      
      
    • 5.統計字典中的鍵值對個數

      len()統計字典中鍵值對的個數

      d = {'name':'張三','age':18}
      print(len(d))
      #結果為:2
      
      
    • 6.獲取所有鍵、值、鍵值對數據

      keys() 獲取所有鍵 k

      values()獲取所有值 v

      items()獲所有鍵值對 k:v 支持for迴圈

      d = {'name':'張三','age':18}
      d = {'name':'張三','age':18}
      
      獲取所有【鍵】
          print(d.keys())   # dict_keys(['name', 'age'])
      獲取所有【值】
          print(d.values()) # dict_values(['jason', 18])
      獲取所有【鍵值對】(組成列表套元組形式)
          print(d.items())  # dict_items([('name', 'jason'), ('age', 18)])
      
          
      items獲取的值 支持for迴圈:
      for k,v in d.items():
          print(f'{k}:{v}')
          #結果為:
          #name:jason
          #age:18
      
      
    • 7.快速構造字典

      dict.formkeys( [ ' ' , ' ' ],' ' )

      快速生成一個值相同的字典
      '第一個列表裡的數據值當作鍵,第二個是公共的數據值(所有鍵的值都相同)'
      
      d1=dict.fromkeys(['name','pwd','hobby'],123)
      print(d1)
      #結果為:{'name': 123, 'pwd': 123, 'hobby': 123} 後期可以再單個修改對應的值數據
      
      
      筆試題:
      res=dict.fromkeys(['name','pwd'],[])
      print(res)#{'name': [], 'pwd': []}
      res['name'].append('jason')
      res['pwd'].append(123)
      print(res)#{'name': ['jason', 123], 'pwd': ['jason', 123]}
      '當第二個公共數據值是可變類型的 通過任何鍵調用內置方法去修改值時會影響所有的鍵'
      
      
    • 8.從列表中取出最後的鍵值對

      popitem()

      d={'name':'jason','age':18,'pwd':'123'}
      print(d.popitem()) # 也可以賦值給一個變數名,列印變數名
      #列印第一次結果為:('pwd', '123')  
      print(d.popitem())
      #列印第二次結果為:('age', 18)
      print(d)
      #此時列印字典的結果為:{'name': 'jason'}
      
      當沒有鍵值對可列印時會報錯
      
      

6.元組相關操作方法

  • 類型轉換

    tuple(其他類型數據)

    支持for迴圈的數據類型都支持轉成元組:列表、字典、字元串、集合

    print(tuple([1,2,3])) # (1,2,3)
    print(tuple({'name':'張'})) # ('name',)
    print(tuple((1,2,3))) # (1,2,3)
    print(tuple({1,2,3})) # (1,2,3)
    
    
  • 常用內置方法

    • 註意:

      註意:
      1.元組內如果只有一個數據值,結尾要跟逗號
          t1 = () #空元組
          t1 = (1,)
      2.元組內索引綁定的記憶體地址不能被修改#除非是可變類型[元組裡面的列表就可以增加或者刪除]
          t1 = (1, 2, 3, [1, 2])
          # t1.append(5) #結果會報錯!
          t1[-1].append(5)
          print(t1)  # (1, 2, 3, [1, 2, 5])
      3.元組不能新增或刪除數據#除非是可變類型
      
      
    • 1.索引取值

      t1=(1,2,3,4,5)
      print(t1[0])   # 1
      print(t1[-1])  # 5
      
      
    • 2.切片操作

      t1=(1,2,3,4,5)
      print(t1[:])   # (1,2,3,4,5) 取所有值
      print(t1[:3])  # (1,2,3) 取索引0~索引2的值
      print(t1[1:3])  # (2,3) 取索引1~索引2的值
      print(t1[-3:-1])  # (3,4) 取倒數第二(包含)~倒數第一(不包含)的值
      
      
    • 3.切片間隔/方向

      t1=(1,2,3,4,5,6)
      print(t1[0:5:1]) # (1,2,3,4,5) 取索引0~索引4的值且間隔1
      print(t1[0:5:2]) # (1,3,5)   取索引0~索引4的值且間隔2
      print(t1[::2])   # (1,3,5)   取所有值且間隔2
      print(t1[::-1])  # (6,5,4,3,2,1) 取所有值並改變字元串方向(後進先出)
      
    • 4.統計數據值個數

      len()想要統計的數據

      t1=(1,2,3,4,5,6)
      print(len(t1))  # 6
      
      
    • 5.統計某個數據值出現的次數

      count()

      t1=(1,2,3,4,5,6)
      print(t1.count(2))  # 1
      
      
    • 6.統計元組內對應索引值

      index()

      t1=(1,2,3,4,5,6)
      print(t1.index(1))  # 0
      
      

7.集合相關操作方法

  • 類型轉換

    set(其他類型數據)

    print(set('abc'))  # {'a','b','c'} 字元串
    print(set([1,2,3]))  # {1, 2, 3} 列表
    print(set({'name':'jason'}))  # {'name'} 字典
    print(set((1,2,3)))  # {1, 2, 3} 元組
    
    整型、浮點型、布爾值會報錯
    
    註意:
    1.集合里的'數據值'必須是不可變類型(整型、浮點型、字元串、元組)
    2.集合內是無序的 沒有索引概念
    3.如果想單獨取數據值應該轉成列表去取。
    
    
  • 常用內置方法

    集合不常用 只在去重、關係運算時才會考慮使用集合

    • 1.去重

      先轉成列表在轉成集合

      eg:把以下列表去重
      l1=[1,2,3,2,1,3]
      s1=set(l1) #把該列表轉成集合
      l1=list(s1) #把該集合再轉回列表
      print(l1)
      #結果為:[1, 2, 3]
      
      '集合的去重是無序的,有時候無法保留原先順序'
      
      
    • 2.關係運算

      常用做差異校驗
      eg:模擬兩個人的好友
      f1 = {'jason','tony','oscar','jerry'}
      f2 = {'kevin','jerry','jason','lili'}
      
      1.求f1和f2的共同好友
      print(f1 & f2) #{'jason','jerry'}
      2.求是f1單獨認識的好友
      print(f1 - f2)#{'oscar','tony'}
      3.求f1和f2所有的好友
      print(f1 | f2)#{'oscar','jason','kevin','lili','tony','jerry'}
      4.求f1和f2各自單獨認識的好友
      print(f1 ^ f2)#{'lili','oscar','tony','kevin'}
      5.父集、子集
      print(f1 < f2)#false
      print(f1 > f2)#false
      '集合在做父子比較時是依照誰包含誰來判斷'
      
      

可變類型與不可變類型

可變類型 不可變類型
字典、列表、集合 整型、浮點型、字元串、布爾值
值改變、記憶體地址不變(改自身) 值改變、記憶體地址也變(產生一個新的結果)

1.不可變類型

#值改變,記憶體地址也變(產生新的結果)
s1='$$jason$$'
s1.strip('$')

'由於產生的是新的結果,所以列印原字元串沒有變化'
print(s1)  
#結果為:$$jason$$

'因為產生了新的結果,所以可以列印出來(可直接列印出來,也可以賦值一個變數名接收後列印)''
print(s1.strip('$'))  
#結果為:jason

2.可變類型

 #值改變,記憶體地址不變(改自身)
l1=[11,22,33]
l1.append('z')

'由於改的是自身 所以列印原本的列表就是修改後的列表'
print(l1)  
#結果為:[11,22,33,'z']

'因為沒有產生新的結果,所以列印出來的是None'
print(l1.append('z'))  
#結果為:None

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 京東物流:康睿 姚再毅 李振 劉斌 王北永 說明:以下全部均基於elasticsearch8.1 版本 一.跨集群檢索 - ccr 官網文檔地址: https://www.elastic.co/guide/en/elasticsearch/reference/8.1/modules-cross-cl ...
  • 前言 做線上幀率監控上報時,少不了需要弄明白如何通過代碼獲取實時幀率的需求,這篇文章通過圖解配合Flutter性能調試工具的方式一步步通俗易懂地讓你明白獲取幀率的基礎知識,以後再也不愁看不懂調試工具上指標了。 說說 List<FrameTiming> Flutter 中通過如下方式監聽幀率,addT ...
  • 華為運動健康服務(HUAWEI Health Kit)6.9.0版本新鮮出爐啦! 一文瞭解新增功能,快來一起加入Health Kit生態大家庭! 一、更豐富:睡眠呼吸記錄健康數據開放 呼吸機是用於為患者提供或增加肺通氣的常用醫療器械,目前越來越多的家用呼吸機被用於緩解人們在日常睡眠過程中的打鼾、睡眠 ...
  • 2023-01-17 一、Servlet底層源碼分析 1、Servlet結構圖 說明:HttpServlet繼承了GenericServlet類,GenericServlet實現了“ServletConfig”和“Servlet”兩個介面,因此所以要實現一個Servlet直接就可以繼承HttpSer ...
  • 2023-01-13 一、基本功 (1)工程結構管理 掌握企業環境的搭建和管理 (2)java開發規範 P3C開發規約 (3)高併發及網路編程 需要考慮性能瓶頸 (4)底層源碼分析 二、互聯網常用技術——分散式 1、NoSQL資料庫:是提升數據訪問效率的優先選擇。 訪問效率的提升:Redis、Mon ...
  • 1. API 網關誕生背景 前言 API 經濟生態鏈已經在全球範圍覆蓋, 絕大多數企業都已經走在數字化轉型的道路上,API 成為企業連接業務的核心載體, 並產生巨大的盈利空間。快速增長的 API 規模以及調用量,使得企業 IT 在架構上、模式上面臨著更多的挑戰。 API 是什麼 API 網關是一個服 ...
  • CAP特性 ​ CAP理論是在設計分散式系統的過程中,處理數據一致性問題時必須考慮的理論,一個分散式系統最多只能同時滿足一致性(Consistence)、可用性(Availability)和分區容錯性(Partition tolerance)這三項中的兩項。 2000年7月Eric Brewer教授 ...
  • 前言 今日偶然打開 $oi-wiki$,發現樹形 $DP$ 例題正好是之前在洛谷上鴿著的一道題。所以...... $\color{red}{很高興以這樣的方式認識你,樹形 DP !}$ 這例題造的太好了,簡直是無痛入門(感動.jpg) P1352 沒有上司的舞會 題目傳送門~ 思路剖析 狀態定義 $ ...
一周排行
    -Advertisement-
    Play Games
  • 下麵是一個標準的IDistributedCache用例: public class SomeService(IDistributedCache cache) { public async Task<SomeInformation> GetSomeInformationAsync (string na ...
  • 這個庫提供了在啟動期間實例化已註冊的單例,而不是在首次使用它時實例化。 單例通常在首次使用時創建,這可能會導致響應傳入請求的延遲高於平時。在註冊時創建實例有助於防止第一次Request請求的SLA 以往我們要在註冊的時候實例單例可能會這樣寫: //註冊: services.AddSingleton< ...
  • 最近公司的很多項目都要改單點登錄了,不過大部分都還沒敲定,目前立刻要做的就只有一個比較老的項目 先改一個試試手,主要目標就是最短最快實現功能 首先因為要保留原登錄方式,所以頁面上的改動就是在原來登錄頁面下加一個SSO登錄入口 用超鏈接寫的入口,頁面改造後如下圖: 其中超鏈接的 href="Staff ...
  • Like運算符很好用,特別是它所提供的其中*、?這兩種通配符,在Windows文件系統和各類項目中運用非常廣泛。 但Like運算符僅在VB中支持,在C#中,如何實現呢? 以下是關於LikeString的四種實現方式,其中第四種為Regex正則表達式實現,且在.NET Standard 2.0及以上平... ...
  • 一:背景 1. 講故事 前些天有位朋友找到我,說他們的程式記憶體會偶發性暴漲,自己分析了下是非托管記憶體問題,讓我幫忙看下怎麼回事?哈哈,看到這個dump我還是非常有興趣的,居然還有這種游戲幣自助機類型的程式,下次去大玩家看看他們出幣的機器後端是不是C#寫的?由於dump是linux上的程式,剛好win ...
  • 前言 大家好,我是老馬。很高興遇到你。 我們為 java 開發者實現了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何處理的,可以參考我的另一個項目: 手寫從零實現簡易版 tomcat minicat 手寫 ngin ...
  • 上一次的介紹,主要圍繞如何統一去捕獲異常,以及為每一種異常添加自己的Mapper實現,並且我們知道,當在ExceptionMapper中返回非200的Response,不支持application/json的響應類型,而是寫死的text/plain類型。 Filter為二方包異常手動捕獲 參考:ht ...
  • 大家好,我是R哥。 今天分享一個爽飛了的面試輔導 case: 這個杭州兄弟空窗期 1 個月+,面試了 6 家公司 0 Offer,不知道問題出在哪,難道是杭州的 IT 崩盤了麽? 報名面試輔導後,經過一個多月的輔導打磨,現在成功入職某上市公司,漲薪 30%+,955 工作制,不咋加班,還不捲。 其他 ...
  • 引入依賴 <!--Freemarker wls--> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.30</version> </dependency> ...
  • 你應如何運行程式 互動式命令模式 開始一個互動式會話 一般是在操作系統命令行下輸入python,且不帶任何參數 系統路徑 如果沒有設置系統的PATH環境變數來包括Python的安裝路徑,可能需要機器上Python可執行文件的完整路徑來代替python 運行的位置:代碼位置 不要輸入的內容:提示符和註 ...