跳轉到

Posts

MYSQL COUNT(*) 和 COUNT(col_name) 的差異問題

此問題我的工作夥伴在使用COUNT(*)後,解決了速度緩慢問題,另外他也有點無法理解為什麼這麼做速度變快...

我的想法和實驗的結果跟他有些許落差,故在這裡做個筆記,若日後回顧需再額外驗證正確性...

因為這件事情,LINE群都快炸了...感謝他救了所有人

問題發生

今天晚上收到來自某個客戶的親切問候,抱怨某個有分頁列表的UI跑得十分緩慢(7秒)...

問題分析

  • 這個UI畫面總共有2個SQL敘述所組成
  • 取得列表資料,沒有Where條件,有limit 和 offset 敘述,有order by 敘述(依日期降冪),沒有group by敘述
  • 取得總筆數數值,沒有Where條件,沒有limit 和 offset 敘述,沒有order by 敘述,沒有group by敘述僅單純使用SELECT COUNT(Product_Name)
  • 資料庫引擎 InnoDB
  • 資料庫總筆數約320萬筆左右
  • 目前已知影響速度的問題是來自計算總筆數的SQL敘述(4~5秒)
  • 我的工作夥伴使用COUNT(*)敘述後,速度降為1秒~1.3左右秒

Python Hash的一致性問題

問題描述

某個專案在爬蟲進行爬蟲時有做重複性資料的去重時,發現無法正常過濾比對,在觀察後,發現相同文字內容的在進行Hash,所得的結果不一致,而導致比對內容發生問題

問題重現

引發這個錯誤的環境

  • 有三台主機執行相同的程式碼,每次取得的內容會進行Hash處理後,比對資料庫內保存的文章Hash值進行比對
  • 每台主機最多開5個執行緒,三台共15個執行緒再跑
  • Python 版本:3.5.10

HTB - Find The Easy Pass

題目地址

點我前往

過關條件

  • 解開Password

速記

  • 按照正常的邏輯,不考慮這個軟體在做密碼驗證時是否有連網驗證的特殊情況,所以為了讓程式比對密碼,必定會有一段將真正的密碼做Hard code
  • 在逆向工程時為454200:"Wrong Password!"設定中斷點
  • 成功拿到密碼

破解流程

閱讀限制

此篇文章有受到作者設定的閱讀限制...

Python操作YAML文件

今天維護某個外包專案,看到該專案有使用YAML套件,順便紀錄一下使用方式。

套件安裝

官方Github

pip install pyyaml

讀取YAML文件

假設有一個名為config.yaml的YAML文件,內容如下:

database:
  host: localhost
  port: 3306
  username: user
  password: pass
使用PyYAML庫中的safe_load方法來讀取這個文件:
import yaml

with open('config.yaml', 'r', encoding = "utf-8") as file:
    config = yaml.safe_load(file)

print(config)
上面那段程式會輸出配置文件的內容,以Python字典的形式,如下圖。

補充: 在yaml也有一個yaml.load函數,在官方說明上,此函數不安全,建議使用yaml.safe_load進行載入