原创 【C++】設計模式——觀察者模式

觀察者模式 觀察者模式分爲兩個角色:觀察者和監聽者;觀察者的作用是觀察事件,並且將發生的事件通知給對本事件感興趣的監聽者。監聽者的作用是處理髮生的事件。其中關鍵的一步是將監聽者和感興趣的事件保存起來,反過來,一個事件也會由多個監聽者處理;

原创 強符號、弱符號、強引用、弱引用

強符號與弱符號 當多個目標文件中含有相同名字全局符號的定義,那麼這些目標文件鏈接的時候會出現符號重複定義的錯誤。對於C/C++語言來說,編譯器默認函數和初始化了的全局變量爲強符號,未初始化的全局變量爲弱符號。我們也可以通過GCC的"__a

原创 SQL基本語句(1)

SQL的基本概念 數據庫:操作數據的集合。 SQL語句:管理數據庫,字母的大小寫不敏感。 SQL語句主要分爲以下三類: DDL(Data Definition Languages)數據定義語言。定義了不同的數據段、數據庫、表、列、索引等

原创 預編譯、編譯、彙編、鏈接過程

預編譯 將源代碼或者頭文件經過預編譯成一個.i文件。例如C++文件擴展名是.cpp,頭文件的擴展名可能是.hpp,預編譯後的文件擴展名是.i 預編譯的過程相當於下面的命令: 對c語言文件的處理:gcc –E 源文件 –o目標文件 對c++

原创 【C++】volatile關鍵字的作用

volatile的作用 volatile關鍵字是防止在共享的空間發生讀取的錯誤。只保證其可見性,不保證原子性;使用volatile指每次從內存中讀取數據,而不是從編譯器優化後的緩存中讀取數據,簡單來講就是防止編譯器優化。 在單任務環境中,

原创 【C++】什麼情況下會產生臨時變量

臨時變量是隻在調用期間有效,具有常性的一種變量。 一、值傳遞 在返回值以值傳遞(傳值和傳指針)的形式返回時,會生成臨時變量。 int sum(int a,int b) { return a + b; } 編譯器會將結果a+b的值

原创 不使用其他判斷語句和第三方變量,實現兩個數的交換和比較

一提到兩個變量的交換與比較,一般首先都會想到使用if、? :、switch等判斷語句;但在面試的時候,經常會問到不使用判斷語句的情況下,如何實現兩個變量的交換和比較?   變量a、b找出其中比較大的一個: 方法一: int max =

原创 【C++】delete與delete[]的區別

c++中對new申請的內存釋放方式有delete和delect[]兩種方式,那這兩者到底有哪些區別呢? 可能你見過這樣的表述:用new分配內存,就用delect釋放內存;使用new[]分配內存,就用delete[]釋放內存。具體來講就是d

原创 【C++】設計模式之——工廠設計模式的原理與實現

工廠設計模式 工廠設計模式提供了生成對象的最佳方法,這一設計模式的優勢就在於屏蔽了生成對象複雜的過程。有三種工廠模式,分別爲: 簡單工廠模式 工廠方法模式 抽象工廠模式   簡單工廠模式 原理:工廠生產產品,而這裏的產品指的就是對象。在簡

原创 【數據結構】簡單選擇排序以及時間複雜度的分析

簡單選擇排序 簡單選擇排序法就是通過n-i次關鍵字間的比較,從n-i+1個記錄中選出關鍵字最小的記錄,並和第i個記錄交換。如圖所示: 完整代碼 #include <stdio.h> void SimpleSelectSort(int

原创 【操作系統】分頁存儲管理

三種分配存儲管理方式 分頁式存儲管理:離散分配的基本單位是頁 分段式存儲管理:離散分配的基本單位是段 段頁式存儲管理:離散分配的基本單位是段、頁   空間劃分 1)對於進程:將一個用戶進程的地址空間(邏輯空間)劃分成若干個大小相等的區域,

原创 【c++】繼承和組合混搭下的構造和析構順序

類和類之間有三種關係:①組合關係:has_a        a part of的關係②繼承關係:is_a            a kind if的關係③代理關係:在容器適配器中,屏蔽底層的接口,對外提供新的特性   在只有的組合的關係中

原创 從面向過程到面向對象

面向過程編程 面向過程編程的核心:功能分解(自頂向下,逐步求精)。就是將一個大問題分解成多個小問題,多個小問題再進行分解;解決小問題就會容易很多   面向過程最重要的原則:高內聚、低耦合 內聚是指模塊內部各成員之間關聯的緊密程度 耦合是

原创 【c++】內存池的實現

使用內存池的原因: 在c++開闢空間和釋放空間使用的是new和delete,而new和delete是對內存的操作,對內存進行操作必然需要從用戶態轉到入內核態,系統在接收到分配一定大小內存請求時,首先查找內部維護的內存空閒塊表,並且需要一定

原创 【數據結構】基數排序

一、基數排序 基數排序(RADIX SORT)是一種基於計數排序或者是最優桶排序。這裏區分一下基數排序與桶排序 基數排序只是借用十隻桶來爲0-9這十個基數進行排序分堆(可以說是最優的桶排序),反覆的在保持穩定的情況下,對個位、十位。分別進