Time of Update: 2018-12-05
引文:在J U C裡面,要談到並發,就必然就存在可見度問題,其實對於程式來講,要說到鎖,首先要確保可見度,也就是要在這個基礎上才能做到,而CAS也是基於這種原理來完成,我們在文章:Java
Time of Update: 2018-12-05
以前寫過查看C++資料類型的位元組數,但實際應用中我們更關心的是struct和class的大小。首先來看空類的大小,如下:class VoidClass{};運行程式,發現sizeof(VoidClass)結果為1。這裡涉及到類的執行個體化的概念,所謂類的執行個體化就是在記憶體中分配一塊地址,每個執行個體在記憶體中都有獨一無二的地址。同樣空類也會被執行個體化,所以編譯器會給空類隱含的添加一個位元組,這樣空類執行個體化後就有獨一無二的地址了,所以空類的sizeof為1。再來看class非空的情況。
Time of Update: 2018-12-05
一 利用不均勻硬幣產生等機率問題描述:有一枚不均勻的硬幣,拋出此硬幣後,可用foo()表示其結果。已知foo()能返回0和1兩個值,其機率分別為0.6和0.4。問怎麼利用foo()得到另一個函數,使得返回0和1的機率均為0.5。問題分析:分析連續拋出兩次硬幣的情況,正反面的出現有四種情況,機率依次為:(1) 兩次均為正面:0.6*0.6=0.36(2)第一次正面,第二次反面:0.6*0.4=0.24(3)第一次反面,第二次正面:0.4*0.6=0.24(4)兩次均為反面:0.4*0.4=0.16
Time of Update: 2018-12-05
題目一:void GetMemory( char *p ){ p = (char *) malloc( 100 );}void Test( void ) { char *str = NULL; GetMemory( str ); strcpy( str, "hello world" ); printf( str );}【運行錯誤】傳入GetMemory(char* p)函數的形參為字串指標,在函數內部修改形參並不能真正的改變傳入形參的值。執行完char *str =
Time of Update: 2018-12-05
J.U.C是java系列一塊看似簡單,水很深的地區,但是不論是深入java還是分布式的一些東西,這都算是基礎,雖然以前亂七八糟寫過一些多線程的文章,不過都比較亂了一點,最近有打算逐步深入來寫多篇文章來說說我對這些東西的小理解。1、首先線程分為核心線程、使用者線程;在Linux下java的線程其實是在java私人棧上有一個使用者線程,和OS層級有一個輕量級的進程來實現。2、在操作java多線程的時候必然會遇到鎖的問題,在鎖的問題中,線程會首先進入一個所謂的Entry
Time of Update: 2018-12-05
題目為:首先將字串中的*替換為0,然後將不正常化的數字正常化。如:1.*,02.3*0,12*.210,012.5*,4*560.0,45*0第一步替換:1.0,02.300,120.210,012.50,40560.0,4500第二步正常化:1,2.3,120.21,12.5,40560,4500程式碼(基於C語言)如下:替換代碼為:void change(char *string) //string為char數組{int len = strlen(string);for (int i=
Time of Update: 2018-12-05
安裝的是windows7的系統,安裝經典的vc6.0,提示相容性問題。安裝VS2010感覺好卡。經過多方勘察,最後選定C-free。至於企業級的應用沒考慮,安裝就是為了方便用,個人用:)發現一個問題,構建的時候提示[Warning] C:\Users\cike\Desktop\testing\testing\testing\testing.cpp:17:2: warning: no newline at end of
Time of Update: 2018-12-05
近日心血來潮,下載了最新的版的keil,再加上protues ,想弄個虛擬環境。主要原因還是經濟問題。電子元件,是要花錢的。。。今天遇到些keil uVision 4使用方面的問題,記錄下來,方便以後查看:)至於啟用的問題,在鎮子上從來不缺。就不提了問題一:keil中沒有STC的東西解決: 方案一:使用Atmel 89C52。若使用STC的特有功能,單獨指定標頭檔
Time of Update: 2018-12-05
原因:最近在objective-c代碼裡要整合使用c++第三方的類庫,所以就接觸了c++初始化對象的方法,下面簡單介紹一下。初始化兩種方法:第一種初始化方法:ClassName object(初始化參數);第二種初始化方法:ClassName object=new ClassName();兩種初始化方法的區別:第一種初始化方法:在Stack棧裡面分配空間,自動釋放。第二種初始化方法:在heap堆裡面分配空間,要手動釋放。不同記憶體地區的對象介紹:在C++中,對象通常存放在三個記憶體地區:棧、堆、
Time of Update: 2018-12-05
在做WPFMVVM中經常會遇到一些Model、ViewModel的屬性添加添加私人欄位和更改通知方法來支援Binding。比如把:public class Test{ public string TestData1{get; set;} public string TestData2{get;set;}}變為:public class Test : INotifyPropertyChanged{ private string _testData1; public
Time of Update: 2018-12-05
流水燈,呃,高手默默的路過吧主要是記錄下來供自己參考參考,呵呵這三種都是用C語言實現的。三種方式分別是:1. 通過位操作實現2.通過位移實現3.通過迴圈位移實現//源碼的具體實現需要配合相應硬體電路,本篇代碼基於電路如最後所示。如果有幸被參考,煩請調整硬體電路1.通過位操作。這種辦法實現起來,代碼比較長,但是便於理解。實現的代碼如下:#includesbit LED0 = P1^0;sbit LED1 = P1^1;sbit LED2 = P1^2;sbit LED3 = P1^3;sbit
Time of Update: 2018-12-05
C版本:vim stash.h #ifndef STASH_H#define STASH_Htypedef struct STASHTag { int size; /* Size of each space */ int quantity; /* Number of storage spaces */ int next; /* Next empty space */ /* Dynamically allocated array of bytes: */ unsigned char*
Time of Update: 2018-12-05
C語言的回呼函數思想代碼: #include <stdio.h>void *max(void *base, unsigned int nmemb, unsigned int size, int (*compar)(const void *, const void *)){ int i; void* max_data = base; char* tmp = base; for (i=1; i<nmemb; i++) { tmp =
Time of Update: 2018-12-05
#include <reg52.h>void main(){P1=0xB0;while(1);}呃,就這些代碼了。可能實際的電路還會有74H什麼的。不過只是一位,主要是想記錄下自己對於為什麼是B0而不是0B的疑惑。假設該數位管為共陽極數位管,要顯示數字“3”。數位管原理按照字母順序為 a b c d e f g dp對應的電平高低 0 0 0 0 1 1 0 1但是用數位管助手卻是 1 0 1
Time of Update: 2018-12-05
單例模式:對應一個類只能產生一個對象。 #include <stdio.h>class A{ private: int id; A() {}//把建構函式放在private:下目的是在類外不能在棧上直接分配空間定義對象。 public: static A *pt; static A *instance() { if (pt == NULL)//注意是雙等號,還有好像在C++中用null 不好使。 { pt=new A; return pt; }
Time of Update: 2018-12-05
1,沒有意識到分配記憶體會失敗 在申請分配記憶體後,沒有檢查記憶體配置是否是成功的就使用它。2 記憶體雖然分配成功了,但是還沒有初始化它,就是用了。 犯這種錯誤主要是因為,很多人認為我剛剛分配得來的記憶體,就是已經初始化好的了,或者說預設它裡面全是0. 所以在分配了記憶體之後一定要初始化。3 記憶體配置成功了,並且也初始化了,但是在使用的時候,出現了記憶體越界的情況。這種情況最不容易排錯了。 4 沒有釋放記憶體 一定要誰申請誰釋放,自己寫的函數裡面申請了記憶體,
Time of Update: 2018-12-05
c/c++線上編譯器 一直以來都喜歡用手機看書,尤其是在上班時。看的最多的是編程一類的書,主要是C++,看著就想寫寫代碼,可是電腦用不能用,怎麼辦?於是想到用UC瀏覽器找找看網上有沒有線上的編譯器,想什麼時候寫代碼都可以驗證。於是就找了幾個,各有千秋吧。中文的我沒找到,全是英文的,不過英文不難,其實也不需要懂英文,只要知道在什麼地方寫代碼,然後點擊按鈕進行線上編譯就行了。好了,下面看介紹:
Time of Update: 2018-12-05
extern是全域變數聲明只要聲明全域變數就預設 前面加extern(程式員可以不加,但編譯器預設加上)若本檔案 引用別的檔案中的全域變數 一定要加上extern 聲明一下在預設情況下,函數在聲明和定義時就已經在其前面有extern了。例如,當我們聲明函數時,int foo(int arg1, char arg2);在該函數的前面已經有了一個隱含的extern,並且編譯器將它處理為extern int foo(int arg1, char
Time of Update: 2018-12-05
json 正常情況下不會對私人成員進行序列化和還原序列化, 因此在用json做深拷貝時, 就會遺失資料。解決辦法: 聲明成公有成員。json在序列化和還原序列化時, 如果類中有ICommand 成員, 可能會序列化失敗。 因此json的應用在wpf中盡量只對Model層進行。json在對一個基類對象聲明,而實際是衍生類別對象 進行序列化還原序列化時, 序列化時的字串正確, 但是還原序列化因為聲明的是基類,因此最後是一個基類的對象, 導致衍生類別對象的 資料丟失。 解決辦法,
Time of Update: 2018-12-05
private TreeViewItem FindTreeViewItem(ItemsControl container, object item) { if (null == container || null == item) { return null; } if (container.DataContext == item)