JNI

配置NDK,調用JNI最終會生成一個so庫,如果so庫生成了。直接在項目中使用so庫即可調用本地方法。注意:api的包名要與so庫定義的包名一致。




1什么是jni

?jni java native interface java本地開發接口,是JAVA和C互相調用的橋梁。


2jni有什么用

?java語言不可以直接操作硬件,但是C可以,通過JNI,JAVA也就能操作硬件。 JAVA操作硬件的API,基本上都是由C和C++去寫的,然后由JNI實現JAVA去調用。

(1)wifi熱點共享

(2)suv的車窗

(3)不重復造輪子?

(4)FFmpeg音視頻解碼 ?vitamio框架

(5)webkit 瀏覽器的內核

(6)opencv 圖像庫?

(7)7Zip

3怎么用jni

JAVA + C + JNI + NDK

      

學習路線:

C語言學習資源

http://www.dotcpp.com/oj/classc.html


CodeBlocks的安裝

http://www.jianshu.com/p/d5fa463df77d

1)千萬注意下載帶MinGW的版本

2)軟件安裝之后進入settings-compiler-ToolChain Excutable,H點擊AutoDetect

? 否則工程無法運行。

3)快捷鍵配置http://blog.csdn.net/wr132/article/details/48002887

4)格式化代碼:http://blog.csdn.net/qwb492859377/article/details/46933185





第1天:C語言復習

學習C不光是為了JNI,很多算法都是用C來演示的,而且JAVA的底層都是C,學習C很必要。


  1. 搭建開發環境

    dev-c++,體積小,win7和win8需要裝不同的版本,否則編譯會出莫名的錯誤。?

  2. 基本數據類型、數組的內存地址

    基本數據類型內存地址:?&變量名,表示取地址。

    數組的內存地址:連續,數組名就是第一個元素的地址,數組就是一種類型指針。

  3. 指針


■概念:指針就是內存地址,內存地址就是指針

1
2
3
4
5
6
7
8
9
10
11
12
13
main()
{
?????int?i?=?4;??//申請了一塊內存空間??空間的別名叫i??這塊空間里面存的數據是?4?
???????
????????
?????//需求?我想把i的地址給存起來??
?????int*?p?=??&i;?
?????printf("p的地址%#x\n",p);?
??????
??????
?????system("pause");????????????//執行一個windos系統的外部命令??讓dos窗體暫停退出?
??????
}

*號的三種含義

1
2
3
4
5
6
1?*代表乘法??
2?如果*號放到一種數據類型的后面?那么就代表這種數據類型的指針?比如?int*??float*?
??當然,類型還可以是更為復雜的數據類型,如結構體,枚舉,聯合體。
??類型當然也可以是指針本身,這樣就形成了多級指針。??
3?*號?如果放到指針變量的前面???代表取出該變量里面的地址的對應的數據?
??*指針變量?==?指針變量所指向的變量


指針的類型和長度

1
2
3
不管什么類型的指針都是4個字節(32位操作系統),對于64位操作系統是8個字節。
C語言為了方便指針運算,?定義各種基本類型的指針,?每種類型的指針運算時所偏移量的值是根據類型的長度決定的
+1?移動的是一個單位


■數組與指針

?

1
數組名就是指針,代表數組的首地址。可以采用地址來遍歷數組


■字符串與指針

?

1
2
3
4
char?*str?=?"www.dotcpp.com"?;
??
?字符指針可以采用字符串常量來初始化
?字符串指針指向字符串常量的首地址,*str打印出來是w,并不是整個字符串。

?


■多級指針

1
在一種數據類型的后面?有幾個*?就代表幾級指針

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int?main()
{
????int?**p;???
????int?i,j;???//p[4][8]?
????//開始分配4行8列的二維數據???
????p?=?new?int?*[4];
????for(i=0;i<4;i++){
????????p[i]=new?int?[8];???
????}
????for(i=0;?i<4;?i++){
????????for(j=0;?j<8;?j++){
????????????p[i][j]?=?j*i;
????????}
????}???
????//打印數據???
????for(i=0;?i<4;?i++){
????????for(j=0;?j<8;?j++)?????
????????{???
????????????if(j==0)?cout<<endl;???
????????????cout<<p[i][j]<<"\t";???
????????}
????}???
????//開始釋放申請的堆???
????for(i=0;?i<4;?i++){
????????delete?[]?p[i];???
????}
????delete?[]?p;???
????return?0;
}
上面的例子中
int?*p?:p表示指向int型的指針
int?**p:?p表示指向int?*(指針)的指針,即指向指針的指針。

■函數指針

1
2
3
4
5
6
7
8
9
?????和函數頭一樣,其它不變,只要將函數名改為(*函數別名)即可。如:
?定義一個函數
?????int?add(int?x?,int?y)
?????{
????????return?x?+?y;
?????}?????
?????定義上面這種函數的指針
?????int?(*func)?(int?x?,int?y)?=?add;
?????函數指針的作用--->


■指針的常見錯誤

?

1
2
(1)?定義的數據類型?要和你定義的指針類型要相對應?
(2)指針變量未經賦值??不可以直接使用????野指針


■深入理解指針

wKioL1ZElaKAoui_AAAS0WQYwQ4893.png

? ?&i:表示取變量i的內存地址

? ?int* p = &i:表示將變量i的內存地址用int類型指針p存儲起來

? ?*p:表示指針p所指向的內存地址對應的變量(注意最好不要理解成變量的值),也就是*p=*

? ? ?(&i)=i,就把*與&理解成可以相互抵消的意思(雖然這么理解不太準確)

? ?--------------------------------------------------------------------------------------

? ?所以對于下面的"修改i的值,會不會影響*p"和"修改*p的值,會不會影響i",答案是兩個都會,因

? ?為*p就指向了i,它們是同一塊內存地址。

? ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
main()
{
??????int?i?=?8;
???????
??????int*?p?=?&i;??//p?是用來?存地址?
???????
??????//(1)我修改i的值?會不會影響p的值???不會?
??????/**
??????printf("p的值修改前為%#x\n",p);
???????i?=?100;
??????printf("p的值修改后為%#x\n",p);??**/
???????
??????//(2)我修改p的值??會不會影響i???????不會?
??????/**
???????printf("i的值修改前為%d\n",i);
???????int?j?=?100;?
???????p?=?&j;?
???????printf("i的值修改后為%d\n",i);??**/
????????
??????//(3)我修改i的值?會不會影響?*p??????會?
???????/**
?????????printf("*p的值修改前為%d\n",*p);
?????????i?=?200;?
?????????printf("*p的值修改后為%d\n",*p);?**/
??????????
????????
??????//(4)我修改*p?會不會影響i???????????會?
????????printf("i的值修改前為%d\n",i);
????????*p?=?100;
??????????
????????printf("i的值修改后為%d\n",i);
??????system("pause");????????????//執行一個windos系統的外部命令??讓dos窗體暫停退出?
}

■動態內存和靜態內存

?靜態內存是系統是程序編譯執行后系統自動分配,由系統自動釋放, 靜態內存是棧分配的.

? 動態內存是開發者手動分配的, 是堆分配的. ?你要手動釋放


? malloc:動態申請一塊內存空間 需要我們手動釋放 free();

? realloc:為已有的動態內存再去申請額外的動態內存


1
2
3
4
5
6
7
8
9
10
11
12
13
/*示例*/
????printf("親,請輸入學生的數量\n");
????int?stuNumber;
????scanf("%d",&stuNumber);
?????
????//動態申請內存空間
????int*?stuArrs?=?malloc(stuNumber*sizeof(int));
????//輸入每個學生的學號
????int?i?;
????for(i?=?0;?i?<?stuNumber;i++){
????????printf("請輸入第%d個學生的學號\n",i);
????????scanf("%d",stuArrs?+?i);
????}

■結構體的兩種取值方式

?

1
2
?結構體變量名.元素名稱
?結構體指針->元素名稱,避免了寫多個*,造成混淆。


■自定義數據類型

?

1
2
3
?就是給數據類型定義別名,這樣對于比較長的數據類型就可以簡寫了。
?數據類型可以是任意的,包括指針或多級指針。
?如:typedef?const?struct?JNINativeInterface*?JNIEnv;

4.預處理

?■宏定義

? 》實現函數功能,比函數效率更高。

?■文件包含

??

?


C的模板代碼

1
2
3
4
5
6
#include?<stdio.h>??????//?類似java的導包???引入標準的輸入輸出?
#include?<stdlib.h>?????//引入常用函數庫?
main(){?????
?????printf("Hello?world?!\n");??//相當于java的?System.out.println();?\n代表換行?
?????system("pause");????????????//執行一個windos系統的外部命令??讓dos窗體暫停退出?
}

C語言的基本數據類型

?java的八大基本類型所占字節個數

? (1)byte ? ? 1

? (2)short ? ?2

? (3)int ? ? ?4?

? (4)float ? ? 4

? (5)double ? ?8

? (6)long ? ? 8

? (7)char ? ? 2

? (8)boolean ? 1 ? ??

??

C語言的基本數據類型 ?用sizeof函數來判斷數據類型長度

?char 的數據類型長度為:1 ? ? 和java不一樣

? int 的數據類型長度為:4

? float 的數據類型長度為:4

? double 的數據類型長度為:8

? long 的數據類型長度為:4 ? ? ? ? 和java不一樣

? short 的數據類型長度為:2

? void ? 不確定是什么類型 就代表任意類型???

? signed ?unsigned 他不是數據類型 是數據類型的修飾符?

? ? ? signed 有符號 ?可以表示負數 ? -128~127

? ? ? unsigned 無符號 沒有負數 ? ? ? 0~255?

? ?

? C語言中沒有boolean C語言中用0表示假 非0表示真

??在32位操作系統下,任何類型的指針變量都占四個字節!


C語言的輸入輸出占位符??

????%d ?- ?int

????%ld - long int

????%c ?- char

????%f - ?float ? ? 默認保留小數點后6位 ? ?可以通過.幾 ?

????%u – 無符號數

????%hd – 短整型

????%lf – double

????%x – 十六進制輸出 int 或者long int 或者short int

????%o - ?八進制輸出

????%s – 字符串



C語言中如何定義字符串???

? ? ?String ? C語言中用字符數組來定義字符串?????

? ? ?C語言中不檢查角標越界 ??

? ? ?定義數組的時候要有一個結束的標志 ?\0?

??

1
2
3
???char?arr[]?=?{'h','e','l','\0','l','o'};???
?????
???printf("您輸入的數為:%s",arr);???//輸出結果為hel,說明'\0'就表示結束了。


學習C++

?1.基礎篇章,與C的不同之處。

? 1)引用和指針的區別

? 2)輸入輸出

? 3)動態內存

? 4)命名空間(對應java的包名)

? 5)模板(相當于java的泛型)

? 6)類(多繼承,繼承類型)

? 7)預處理(預定義宏__LINE__ ?__FILE__)?

?http://www.runoob.com/cplusplus/cpp-templates.html?(接口實現,沒有看明白。)

? 8)信號處理(java中的接口回調)

? 9)多線程(找不到pthread.h這個文件)

??


第2天:JNI的實現

####################################################

AS2.2使用CMake方式進行JNI/NDK開發

http://www.jianshu.com/p/cb3064450688


1.javac 命令將native方法所在的類編譯成.class文件

2.javah 生成本地方法的頭文件

3.新建.cpp文件,include本地方法的頭文件,實現各個方法.

?》由于.cpp是jni方法,所以在最前面要加上include <jni.h>,<jni.h>其實就是用原生的C實現了java與

?C交互一套原則即JNI規范。

?》.cpp本質就是c++文件,只是實現了java native方法,按照一定的命名規則,使native方法可以

?關聯到.cpp里的方法。

?


?注意.cpp文件的除了include代碼,其它代碼都要寫在

?extern "C" {


?}模塊里.

4.配置CMakeList.txt文件

?往往在調用C的時候,除了工程自己生成的native-lib.cpp文件之外,要自己新建.cpp文件,并且有可能要調用到.c文件.這時候所有的.c和.cpp文件需要在CMakeList里配置好,否則就會報這個錯誤:

?

?undefined reference to `jlEncodeKeyDev2()' clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)

?

?比如我的工程CPP目錄如下:

?wKiom1nldY_gNmjXAABI0OBWuLo918.png


?正確配置多個cpp的話如下:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cmake_minimum_required(VERSION?3.4.1)
#?Creates?and?names?a?library,?sets?it?as?either?STATIC
#?or?SHARED,?and?provides?the?relative?paths?to?its?source?code.
#?You?can?define?multiple?libraries,?and?CMake?builds?it?for?you.
#?Gradle?automatically?packages?shared?libraries?with?your?APK.
aux_source_directory(src/main/cpp/?SRC_LIST)??????????//不會往下遞歸,所以要配置多個.
aux_source_directory(src/main/cpp/private?SRC_LIST2)
aux_source_directory(src/main/cpp/public?SRC_LIST3)
add_library(?#?Sets?the?name?of?the?library.
?????????????native-lib???#導入時so庫的名稱,也是native方法被調用處system.loadlibary
?????????????#?Sets?the?library?as?a?shared?library.
?????????????SHARED
?????????????#?Provides?a?relative?path?to?your?source?file(s).
?????????????#?Associated?headers?in?the?same?location?as?their?source
?????????????#?file?are?automatically?included.
?????????????${SRC_LIST}
?????????????${SRC_LIST2}
?????????????${SRC_LIST3}
?????????????)



####################################################

5.實現.cpp文件里jni方法

?首先,需要弄清楚jni的幾個要點:

?1)jni數據類型:

??http://www.cnblogs.com/guanmanman/archive/2017/05/05/6811264.html

? 弄清jni有哪些類型,對應c和java分別是什么類型.

? 通過查看<jni.h>文件,可以發現最終jni的某種數據類型就對應C中的某個類型.

? 注意:一般jni的類型是無法直接被C原生代碼調用,需要通過env->相關方法轉換一下.

? ?

?2)jni的方法api:

? 所有jni方法的第一個參數:JNIEnv * env

? 通過env->方法名()即可調用jni方法.


??數組操作函數

? >>jni數組變換成c可用的數組指針?GetByteArrayElements

? ?

1
jbyte?*olddata1?=?env->GetByteArrayElements(jbyteArray1,?0);

? ?c語言方法參數往往會是一個指針,如果直接將jbyteArray類型轉換成指針,會發生錯誤.所以需要

jni的api將jni類型過渡成原生C可用的類型.

? >> jni數組轉數組指針

? ? jni在調用C源碼的時候,很多時候參數都是指針,如果直接傳jbyteArray就會報錯。需要通過

jni的api將數組轉換成指針

1
jbyte?*olddata1?=?env->GetByteArrayElements(jbyteArray1,?0);

??

?>>?獲取數組長度

??

1
jsize?oldsize1?=?env->GetArrayLength(jbyteArray1)

?這里的jsize即是jint類型。


?>> jni數組截取?

??SetByteArrayRegion(新數組,tart_index,end_index,原始數組指針)?

1
2
3
4
5
//新數組,用于接收截取后的數組
jbyteArray?olddata5Resut?=?env->NewByteArray(len5);
jbyte?*by5?=?(jbyte*)olddata5;
env->SetByteArrayRegion(olddata5Resut,?0,?len5,?by5);

?3)?

??


eclipse中的CDT插件怎么安裝

http://zhidao.baidu.com/link?url=NAsq91axWRclHe2OsTW5nEeVzQG5n6ZVf28h-JP8Tiw75d3YVR18XVunRtv6xsJIAx1-FZrEDNA5an3OIzL6lK


出現的問題:

1.之前寫過的一個Android項目上有JNI,后來ADT更新了,出現下面的問題,并且Android沒有NDK選項。

[原]cygwin下載、安裝教程和解決CDT出現“program 'make' is not found in path”bug


但是上面的這個博客里有一個地方說得不對,就是url連接不一定要使用中國的鏡像,中國的鏡像有可能

不好使,在列表中隨便選一個就行了。


Eclipse CDT plugin problems(StackOverFlow的解答)


eclipse+cygwin+cdt搭建c/c++開發環境

http://www.cnblogs.com/skyofbitbit/p/3705994.html


MinGW 是什么?

http://blog.csdn.net/jpcfei/article/details/6428613

MinGW如何卸載:將文件夾直接刪除即可。


最后終于找到答案了:

http://stackoverflow.com/questions/11579135/program-make-not-found-in-path

You may try altering toolchain in case if for some reason you can't use gcc. Open?Properties?for your project (by right clicking on your project name in the?Project Explorer), then?C/C++ Build?>?Tool Chain Editor. You can change the current builder there from?GNU Make Builder?to?CDT Internal Builder?or whatever compatible you have.


同時我也將C:\MinGW64\bin下的xx-make32.exe直接改成了make.exe

還修改了3個環境變量

????C_INCLUDE_PATH=C:\MinGW\include

? ? ?CPLUS_INCLUDE_PATH=C:\MinGW\include

????LIBRARY_PATH=C:\MinGW\lib

總之,最新的ADT的CDT的配置可能會出現問題,我也不知道具體是哪里出現了問題,反正按照上面的來做,就解決了問題。



?

  1. NDK


    本地開發包 谷歌提供 在谷歌官方文檔Develop-Tools-Download-NDK Download目錄下有下載鏈接

    交叉編譯:在一種操作系統上編譯出來另外一個操作系統上可以執行二進制文件

??

? 在Eclipse里關聯NDK

? 在環境變量Path里配置ndk-build所在路徑,以便在編譯.c文件時使用這個指令。


wKiom1Xgc2egZ-vzAAFOXL-Jdcc357.jpg


2. JNI開發HelloWorld的復雜寫法

??

??(1)定義本地方法??native

? ? ? public native String getStringFromC();

??(2)在工程目錄下創建一個jni目錄

? ? ?(2-1)在jni目錄下新建.c文件

? ? ? ?方法名的定義 Java_包名_類名_方法名?

? ? ? ?必須接收2個參數 JNIEnv* env jobject obj


???wKiom1XgfYLQEE_cAAFdD-QMKdU016.jpg


? ? (2-2) 在jni目錄下新建Android.mk文件


???wKiom1XggCLhJSQUAAEN59IuP1E761.jpg??

? ? (2-3) 在jni目錄下新建Application.mk文件

? ? ? ? 文件內容為APP_ABI :=all。如果沒有Application.mk文件,只有Android.mk的話,編譯時只能生成arm

? ? 處理器對應的庫文件,項目只能運行在arm架構的模擬器上,加了Application.mk文件,就能生成所有類型的處理

? ? 器對應的文件。

??(3)編譯.c文件

? ? ?在cmd命令行進入項目帶盤符路徑,輸入ndk-build命令(確保Path里已經配置好了),ndk會自動尋找jni目錄

? ? ?下的文件進行編譯,生成os庫文件。刷新libs文件夾,查看有沒有成功生成os文件。

??(4)引入庫文件

? ? ? 在本地聲明的類的靜態代碼塊里

? ? ? System.loadlibary("名稱"); ? ?名稱就是Android.mk文件中LOCAL_MODULE那一項對應的名稱

??(5)運行項目

? ? ? 如果在jni下只新建了Android.mk文件,只能在arm架構的模擬器上運行,在其它的模擬器上運行會報錯。

? ? ? 如果想要在其它類型的模擬器上運行,需要Application.mk文件,且要重新編譯。


????如果忘記了.mk文件的寫法,可以參考ndk的文檔:

????wKioL1XginCwgBKBAAHhmYRXi5g511.jpg



3. JNI開發HelloWorld的簡單寫法?

? (1)先給eclipse配置一些ndk環境 ?window->preference->Android->ndk-找到你自己ndk所在目錄

? (2)定義本地方法

? (3)點擊工程右鍵 添加本地支持 Android Tools-add native support,需要給庫文件取個名字。

? (4)自動生成jni目錄 自帶Android.mk文件 和一個.cpp文件 ?需要你把cpp改成.c文件 Android.mk文件里面的LOCAL_SRC_FILES也需要改一下

? (5)使用javah ?生成jni樣式頭文件

? ? ??

? (6)在C代碼中實現本地方法?

? (7)一定要記得給他一錘子 (編譯)

? (8)在聲明本地方法的類中 在靜態代碼塊中加載庫文件



Java調C


?

C調Java





#########Android Studio配置NDK##########

?http://blog.csdn.net/aplixy/article/details/51429305?(****)

?http://www.cnblogs.com/Andrew-XinFei/p/5608001.html

?http://blog.csdn.net/a_zhon/article/details/53097512


  1. 經常出現的一個錯誤?http://blog.csdn.net/commshare/article/details/53186025?

?2.android studio與eclipse不同,不需要手動編寫mk文件,只要在gradle里將ndk及其module配置好

?。

3.android studio .c和.h文字報紅,如果項目能run起來的話,不用管,這不是bug.



#########app應用卸載監聽##########

  1. ?http://www.apkbus.com/thread-250628-1-1.html

2.http://blog.csdn.net/delmoremiao/article/details/52032832?(實現思路)







? ? ? 本文轉自屠夫章哥 ?51CTO博客,原文鏈接:http://blog.51cto.com/4259297/1689141,如需轉載請自行聯系原作者



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279800.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279800.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279800.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

dvd vlc 復制_如何使用VLC翻錄DVD

dvd vlc 復制There are many ways to rip a DVD to your computer, but if you’re looking for the most straightforward option, VLC is easy and free. Besides, you probably already have VLC on your computer (and if you don’t, you should). Here, we’ll show you …

新年芯事 | 龍芯物聯網主控芯片龍芯1C102和龍芯1C103流片成功

前言近期&#xff0c;龍芯中科面向物聯網領域研制的主控芯片--龍芯1C102和龍芯1C103流片成功&#xff0c;兩款微控制器芯片各項功能測試正常&#xff0c;符合設計預期。 龍芯1C102主要面向智能家居以及其他物聯網設備詳細介紹龍芯1C102采用龍芯LA132處理器核心&#xff0c;是一…

Javascript基礎學習20問(二)

1.函數&#xff08;方法&#xff09;&#xff1a;封裝執行一項專門任務的步驟的代碼序列--》重用2.參數&#xff1a;方法內獨有的變量&#xff0c;接受傳入數據&#xff0c;在方法中處理3.作用域&#xff1a;一個變量的可用范圍 全局作用域&#xff1a;全局變量 局部作用…

Thrift第三課 編寫腳本

警告 盡量使用tutorial下面的模板&#xff0c;注意腳本的格式&#xff0c;否則生成錯誤 使用thrift-0.9.0生成C/csharp代碼 使用的指令如下: thrift-0.9.0.exe --gen cpp thriftcom.thrift thrift-0.9.0.exe --gen csharp thriftcom.thrift 1 注釋 有如下的三種方式 1&#xff…

【加更】搭建基于chatgpt的釘釘聊天機器人

應某些小伙伴的加更請求&#xff0c;出一期基于釘釘上的聊天機器人&#xff0c;我順便加更一期&#xff0c;搭建一個釘釘聊天機器人的小教程。首先進入到釘釘開放平臺的后臺管理系統&#xff1a;https://open.dingtalk.com/進入到 應用開發->企業內部開發->機器人右上角選…

word中 有注釋標簽嗎_如何在Word中注釋圖像

word中 有注釋標簽嗎If you’re writing a document that includes images, you may want to add annotations to those images to clarify what they represent. You can add callouts to your images to point out particular parts of the image and add text to describe t…

Lang.String

StringBuilder 原文&#xff1a; public final class StringBuilder extends Object implements Serializable, CharSequence A mutable sequence of characters. This class provides an API compatible with StringBuffer, but with no guarantee of synchronization. This c…

牛客網暑期ACM多校訓練營(第二場)J farm (二維樹狀數組)

題目鏈接&#xff1a; https://www.nowcoder.com/acm/contest/140/J 思路&#xff1a; 都寫在代碼注釋里了&#xff0c;非常好懂。。 for_each函數可以去看一下&#xff0c;遍歷起vector數組比較方便&#xff0c;用for(int i 0;i < q[i].size();i)的話&#xff0c;是會有一…

微軟IE 9 Beta全程體驗圖集

微軟剛剛更新了IE 9 Beta的新頁面&#xff0c;此次發布的Beta版本一共有27個國家的語言&#xff0c;其中也包括了簡體中文和香港和臺灣的繁體中文版。 點擊此處進入下載頁面&#xff1a; http://windows.microsoft.com/zh-CN/internet-explorer/download/ie-9/worldwide IE9的熱…

.net core中Quartz的使用方法

我們在日常開發中&#xff0c;總會遇到這樣的需求&#xff1a;每隔一段時間&#xff0c;執行一次某個任務。固定某個時間執行任務&#xff0c;例如凌晨12點對當天的數據進行統計。每個月的第幾天&#xff0c;執行某個任務。Quartz.Net是根據Java的Quartz用C#改寫而來&#xff0…

AspectJ學習筆記

介紹 AspectJ是一個基于Java語言的AOP框架Spring2.0以后新增了對AspectJ切點表達支持AspectJ是AspectJ1.5新增功能&#xff0c;通過JDK5注解技術&#xff0c;允許Bean類中定義切面&#xff0c;新版本Spring框架&#xff0c;建議使用AspectJ方式來開發AOP主要用途&#xff1a;自…

windows10訪客_如何在Windows 10中創建訪客帳戶

windows10訪客If you find that your guests are asking fairly often to use your computer temporarily to check their email or look something up on the web, you don’t have to let them use your personal account or create a special account for each guest. 如果發…

C#使用 System.Net.Mail發送郵件功能

介紹System.Net.Mail命名空間是在.NET Framework中新增的&#xff0c;該命名空間提供了發送電子郵件的功能。通過對本章的學習&#xff0c;讀者可以輕松地使用.NET Framework提供的類庫來發送電子郵件。System.Net.Mail 命名空間包含用于將電子郵件發送到SMTP服務器的類&#x…

初識smarty

個人體會(不完全正確)&#xff1a;就是smarty就是為了更好的使得php/html結合做出來的一個框架。 , 轉載于:https://www.cnblogs.com/nul1/p/9357694.html

幾個有趣的算法題目

本文首發 http://svtter.cn最接近的數字 題目 一個K位的數N $$ (K\leq2000&#xff0c;N\leq10^{20}) $$ 找出一個比N大且最接近的數&#xff0c;這個數的每位之和與N相同&#xff0c;用代碼實現之。 例如&#xff1a;0050 所求書數字為0104&#xff1b;112 所求數為121&#x…

獲取一篇新聞的全部信息

給定一篇新聞的鏈接newsUrl&#xff0c;獲取該新聞的全部信息 標題、作者、發布單位、審核、來源 發布時間:轉換成datetime類型 點擊&#xff1a; newsUrlnewsId(使用正則表達式re)clickUrl(str.format(newsId))requests.get(clickUrl)newClick(用字符串處理&#xff0c;或正則…

上twitter_如何在Twitter上更改您的顯示名稱

上twitterUnlike Facebook, Twitter has never insisted people user their real names. In fact, there’s a long tradition of people changing their names to a joke or pun because it’s Christmas or Halloween, or just for no reason at all. 與Facebook不同&#xf…

技術走向管理一些思考(1)-性格特質和自我管理

技術走向管理一些思考-文件夾 1&#xff0c;管理需具備的性格特質 贊賞他人&#xff1a;以一種不以自我為中心的合作的方式和他人相處&#xff0c;能平靜和客觀地接受不同的人。放下自己的性格、喜好&#xff0c;去贊賞不同類型的人。不是通過個人友誼或者熟悉程度。而是通過某…

網橋

配置實現網橋 網橋&#xff1a;即橋接 把一套機器上的若干個網絡接口 “連接” 起來&#xff0c;其結果是&#xff0c;其中一個網口收到的報文會被復制給其他網口并發送出去。以使得網口之間的報文能夠互相轉發。網橋就是這樣一個設備&#xff0c;它有若干個網口&#xff0c;并…

Newtonsoft.Json Deserialize Type 或者 同類型 變量 反序列化

Newtonsoft.Json 經常再用 這樣的需求 還是很少用 場景 方法一&#xff1a;根據 Type 反序列化 int demo 0; string jsongString JsonConvert.SerializeObject(demo); int jsonDemo JsonConvert.DeserializeObject(jsongString, demo.GetType()); 方法二 根據 同類型變量 序…