工作碰上的技術問題及處理經驗(三)

来源:https://www.cnblogs.com/kingstarer/archive/2019/08/15/11355612.html
-Advertisement-
Play Games

續上一篇隨筆: https://www.cnblogs.com/kingstarer/p/8469016.html 《工作碰上的技術問題及處理經驗》(二) 我這人記憶力比較差,經常出現有些知識學了不久後就忘了,或者有些問題花了很多時間百度解決後,再過一段時間碰上時只有模糊印象,卻忘了具體解決方法。 ...


續上一篇隨筆: https://www.cnblogs.com/kingstarer/p/8469016.html 《工作碰上的技術問題及處理經驗》(二)

 

我這人記憶力比較差,經常出現有些知識學了不久後就忘了,或者有些問題花了很多時間百度解決後,再過一段時間碰上時只有模糊印象,卻忘了具體解決方法。

最近幾年工作時我開始有意識地把登記每天工作碰上的技術問題做個簡單筆記。

一般上班時間比較忙,只能草草記了一兩句話。等過一段時間,我會把這個筆記整理一下,把問題和處理經驗整理通順,以加深自己的印象。

 

20180425:
    source insight 4裡面高亮某個單詞可以按F8,UE裡面高亮可以用shitf+雙擊單詞,vs裡面預設沒法高亮某個單詞。
不過網上有很多擴展插件可以實現這個功能,我就裝了一個:" Highlight all occurrences of selected word"
    今天用filezilla上傳一個文件,總是上傳不成功,但提示為什麼不成功,讓我有點摸不著頭腦。後來偶然發現原來是因為伺服器硬碟滿了。filezilla這點做得不太好,出錯提示太不清楚了。
    make -n 可以用來調試makefile,它能顯示makefile實際執行的編譯命令(只列印,不執行)。今天一個同事說他修改的代碼編譯後沒生效,我就讓他用make -n看一下是不是實際執行了編譯。他看了一下編譯命令,才發現他.h文件,然而對應的.c文件並沒有依賴於該.h,導致執行make後沒有重新編譯對應的.c,所以代碼沒生效。make clean後重新編譯就好。
    修改了.h後記得make clean,因為很多makefile寫的時候都只依賴.c/.cpp,不依賴.h
            
20180502:
    今天學了一個查看IO使用狀態的命令:iostat -dmx2

20180504:
    shell的變數與環境變數的區別:都可以使用${變數名}獲取變數值,但有 export的變數是環境變數,環境變數會被子進程繼承,但普通shell變數不會。

20180508:
    今天在調試程式時發現程式行為飄忽不定,修改的一個bug有時生效,有時不生效。後來才發現由於我系統裡面把.放在PATH環境變數第一位,導致啟動程式時預設先啟動當前目錄下的程式。
    而我的測試環境,有好幾個目錄都放了一個同名的程式。如果不幸在非最新版本的程式目錄下啟動程式測試,則會出錯。
    一般來說,最好不要把.做為PATH第一位


20180510:
    今天用vs編譯代碼時報這個錯:
    ">dbstbl.h : warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字元。請將該文件保存為 Unicode 格式以防止數據丟失"。
    網上查了一下,是因為代碼格式是UTF-8,並且裡面有中文。而vs是不支持這種格式的代碼的,需要在文件高級保存選項,把文件格式改為“UTF8帶簽名”



20180517:
    /*巨集裡面寫死了使用變數stMyInf 現在想調用這個巨集,但變數名不一樣*/
    #define stMyInf (*pStMyInf)
        GET_AR_INF();
    #undef stMyInf


20180520:
    secureCRT設置屏幕顯示黑底綠字模式方法:
    options->sessionoptions->emulation->terminal 選擇vt100
    options->sessionoptions->appearance->Current color scheme 選擇traditional

    secureCRT設置屏幕顯示linux彩色方法:
    options->sessionoptions->emulation->terminal
    把終端類型 從vt100改為xterm 並且鉤選ansi color覆選框

20180521:
    今天發現程式從資料庫取出來的數據,結尾總是會多出很多空格。原來以為是因為欄位是char類型緣故,
但後來發現不是,欄位類型是varchar2。後來發現由於取數時,用char類型數組,其實應該用varchar才對(我們的資料庫操作是用pro*c)。
或者在程式開頭使用EXEC SQL VAR強制轉換,如下例子:
EXEC SQL BEGIN DECLARE SECTION; 
char ename[11]; 
EXEC SQL VAR ac_ename IS STRING(11); 
EXEC SQL END DECLARE SECTION; 
    這個用法在oracle官方的proc開發文檔裡面有詳細介紹,建議大家開發proc程式前先瀏覽一遍。(全英的,看起來比較痛苦,但值得)

20180604:
    今天出現了一個substr截取字元串時出現半個中文的問題:utf8中文一般是3個位元組,gbk中文是2個位元組,但substr截取時是按位元組截斷,所以很可能出現截斷了中文字元的問題。
    這個問題可以通過自己寫一個substr解決了,之前的開發人員寫代碼時沒考慮到這點。


20180620:
    我個人比較熟悉awk,所以經常需要在windows上使用awk處理一些數據。
之前一直使用unxutils工具包裡面的gawk.exe,但最近發現它有兩個問題:1 處理的文件行數超過651132時容易出現bug
2 輸出中文時只能重定向到文件,不然會報錯。
    我嘗試過直接下載gnuwin裡面的gawk,發現也有這個問題。這個問題我暫時沒有找到解決方法。

    今天被oracle的lengthb函數坑了一把:我一直以為lengthb返回的應該是數字,如果傳入空字元串,返回的應該是0。實際上,如果字元串是NULL,lengthb返回的是NULL。

20180626:
    sed命令使用正則時需要轉義,如:sed 's/abc\|def/xxx/g' 


    如果ftp連接伺服器失敗,可以在服務患兒使用/sbin/service vsftpd status看看ftp服務是否有啟動。如果啟動了還是連接失敗,可以看看是不是使用了非標準的ftp埠
    netstat -anp|grep -w LISTEN

20180628:
    今天碰上一個bug是由於snprintf函數引起的。原因是snprintf返回可能超過輸入在緩衝區的長度(當緩衝區能完整容納輸出的字元串,snprintf函數返回往緩衝區寫入的字元數,否則返回緩衝區應該有多長才能容納輸出字元串),而代碼沒有對這種情況做判斷,導致越界。


        
20180701:
    gdb單步跟蹤時,如果碰上比較長的迴圈,一步步跟很累人。可以試試使用until命令,讓程式運行到指定代碼行時停下來。
    gdb調試過程中,可以使用call命令執行函數。例如運行過程中想退出程式,可以用call exit(0)。

    今天又碰上strncpy沒有以\0結尾導致出現bug的情況。

20180702:
    字元集和字元集編碼區別:
    Unicode是字元集,UTF8編碼是對錶示字元集裡面字元的一種編碼規則,GB18030也是一種編碼

20180705:
    今天碰上一個問題,程式core後在當前目錄找不到corefile。用ulimit -a和ulimit -c看都沒有限制corefile文件大小。
後來偶然間發現corefile生成在了另一個目錄下麵,原來是在/proc/sys/kernel/core_pattern裡面配置的corefile命名規則裡面把路徑寫死了,所以不會在當前目錄生成。
    gdb調試多進程時可以用set follow-fork-mode parent/child 來確定fork後跟蹤父進程還是子進程。


20180709:
    今天碰上信號處理函數裡面列印日誌,導致進程死鎖的問題。之前一直以為多線程才會有重入問題,沒想到單進程也會出現這種問題。

20180710:
    \t預設是補齊8位,但它跟用空格補齊不一樣,雖然游標會後移到滿8位為止,但

20180711:
    今天才知道oracle有insert all的語法,作用是把同一批數據插入到不同的表中。
insert all
into t1(object_name,object_id)
into t2(object_name,object_id)
select * from t;

insert first
when object_id = 1 then
into t1(object_name,object_id)
when object_id <=5 then                      
into t2(object_name,object_id)
select * from t;

20180713:
    ue搜索替換時可以使用特殊字元 ^p(換行) ^t(tab)

20180715:
    今天註意到項目裡面的接入進程實現跟我以前做的項目不大一樣。以前做的多進程接入功能是先打開一個socket並且在主進程進程bind之後linsten,然後fork多個子進程同時accept等待連接進來並處理。
現在項目的多進程接入實現是使用SO_REUSEPORT選項,該選項使用多個socket可以同時綁定同一個監聽埠。這樣就不需要先啟動主進程再fork子進程了,直接同時啟動多個接入進程就行。每個進程都會新開一個socket完整執行bind->linsten->accept。百度查了一下,說這個特性實現的多socket共用埠接入伺服器性能比傳統的父子進程共用同個socket的效率高一點。

 


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

-Advertisement-
Play Games
更多相關文章
  • 1、使用input透明覆蓋法 將input的z-index設置為1以上的數字並覆蓋到需點擊的內容上,將input的樣式opacity設置為0(即為透明度為0),這樣通過綁定在input上的change事件觸發 推薦 2、使用vue的ref參數直接操作input的點擊事件觸發 3、使用HTML的lab ...
  • 最終頁面顯示效果為 主頁面 parent.vue 子頁面child.vue有兩種方法 第一種 第二種 這是兩個最簡單的例子 參考鏈接 https://cn.vuejs.org/v2/guide/render-function.html ...
  • 在電腦科學中,圖是一種網路結構的抽象模型,它是一組由邊連接的頂點組成。一個圖G = (V, E)由以下元素組成: V:一組頂點 E:一組邊,連接V中的頂點 下圖表示了一個圖的結構: 在介紹如何用JavaScript實現圖之前,我們先介紹一些和圖相關的術語。 如上圖所示,由一條邊連接在一起的頂點稱為 ...
  • 深入淺出一致性Hash原理 ...
  • 文章轉載自:http://www.pythonheidong.com/blog/article/3303/ 一、數據結構與演算法基礎 · 說一下幾種常見的排序演算法和分別的複雜度。 · 用Java寫一個冒泡排序演算法 · 描述一下鏈式存儲結構。 · 如何遍歷一棵二叉樹? · 倒排一個LinkedList。 ...
  • 文章轉載自:http://www.pythonheidong.com/blog/article/3009/ 熱點隨筆: · [譯]Web設計者和開發者必備的28個Chrome插件(JK_Rush)· 程式員裝B指南(查一把)· javascript 設計模式 - 文章很長,請自備瓜子,水果和眼藥水( ...
  • server服務端 bin下的文件 ftp_server.py conf下的文件 accounts.ini(這個可以在執行中創建) settings.py core下的文件 main.py server.py user_handle.py client客戶端 download文件是儲存下載的文件;u ...
  • 以使用靜態方法 啟動 Springboot 為例,啟動流程主要分為 SpringApplication 的創建和運行兩部分; 創建 1. 設置資源載入器,此處為空 2. 設置 Springboot 啟動類 3. 根據類路徑判斷 web 類型,預設為 SERVLET Spring MVC 4. 讀取每 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...