java 钩子函数是写在静态方法里面的吗?为什么?该方法中断或报错就调用钩子函数吗?哪位大佬详解一下?

java 钩子函数是写在静态方法里面的吗?为什么?该方法中断或报错就调用钩子函数吗?哪位大佬详解一下?

1个回答

不知道你说的是不是 JVM 的钩子,

Java Runtime.addShutdownHook(Thread hook) 

方法,可以注册一个 JVM 关闭的钩,这是 JVM 层面维护的,用以在关闭 tomcat 或者 JVM 退出时执行一些收尾工作。

qq_27836205
Jordan裔 嗯 对 就是这个 可是这方法应该写在哪里呢? 普通方法内部可以写吗?如何触发?
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Vue全局函数无法在钩子函数里调用

#在钩子函数中无法调用全局函数,但是却能在方法中调用。这是什么情况??? 钩子函数中调用出错 ![图片说明](https://img-ask.csdn.net/upload/201907/19/1563531345_932352.png) 错误代码 ![图片说明](https://img-ask.csdn.net/upload/201907/19/1563531663_523603.png) ![图片说明](https://img-ask.csdn.net/upload/201907/19/1563531361_266883.png) 函数声明 ![图片说明](https://img-ask.csdn.net/upload/201907/19/1563531370_942815.png)

全局键盘钩子函数的回调函数有时无效

``` DLL代码: myHooke.c #include "myHooke.h" #include <windows.h> #include <winuser.h> #include <stdlib.h> #include <stdio.h> int ndown = 0; HHOOK hhkHook = NULL; //定义钩子句柄 HINSTANCE hInstance = NULL; //程序实例 BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } hInstance = (HINSTANCE)hModule; //得到DLL实例 return TRUE; } //回调函数 __declspec(dllexport) LRESULT CALLBACK myHookProc(int nCode, WPARAM wParam, LPARAM lParam) { LRESULT Result=CallNextHookEx(hhkHook, nCode, wParam, lParam); if(wParam == 'M' && (lParam & 0x40000000)) { printf("M is downed ! %d\n", ndown++); } return Result; } //加载钩子 int load() { if(!(hhkHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)myHookProc, hInstance, 0))) { return FALSE; } return TRUE; } //卸载钩子 int unload() { return UnhookWindowsHookEx(hhkHook); } myHooke.h: #ifndef MYHOOKD_H #define MYHOOKD_H #define EXPORT __declspec(dllexport) #define _WIN32_WINNT 0x400 EXPORT int load(); EXPORT int unload(); #endif 调用的函数: #include <windows.h> #include <winuser.h> #include <stdio.h> #include <stdlib.h> typedef int (*FUNCTION)(); int main(int argc, char *argv[]) { HINSTANCE hDll; FUNCTION loadhook = NULL; FUNCTION unloadhook = NULL; hDll = LoadLibrary("..\\myHooke\\Debug\\myHooke.dll"); if(hDll != NULL) { loadhook = (FUNCTION)GetProcAddress(hDll, "load"); unloadhook = (FUNCTION)GetProcAddress(hDll, "unload"); if(loadhook == NULL) { MessageBox(0, "loadhook failed", "MyHook", MB_OK); return 1; } if(unloadhook == NULL) { MessageBox(0, "unloadhook failed", "MyHook", MB_OK); return 1; } if(!loadhook()) { return 1; } // while(1) { printf("hook is load !"); MessageBox(0, "Hold on box", "MyHook", MB_OK); //使用循环会使程序卡住,所以用了MessageBox是程序暂停 Sleep(1000); } unloadhook(); FreeLibrary(hDll); } return 0; } ``` 有些出口可以获取键盘消息,有些不能获取键盘消息,这是全局钩子,我是菜鸟,求大神帮助啊!!! 补充一下,程序运行时,切换到其他程序,有的可以获取键盘消息,printf有响应;有的没有任何响应,比如切换到网页等; 我想实现的功能是:无论在哪里,只要键盘按下,我的程序就会有响应 打印按键被按下的消息

MFC里面的钩子函数,怎么使用

MFC中的钩子函数 MFC中的钩子函数 MFC中的钩子函数 求救 求救 求救

如何在Vue2.0的mounted钩子函数里获取指定dom对象?

我使用原生js的document.getElementById()和Vue的ref属性均获取不到指定dom对象 ![使用原生js的html代码:](https://img-ask.csdn.net/upload/201710/31/1509417422_410474.png) ![js代码:](https://img-ask.csdn.net/upload/201710/31/1509417441_477280.png) ![页面显示](https://img-ask.csdn.net/upload/201710/31/1509417460_68487.png) 使用Vue2.0的ref属性 ![html代码:](https://img-ask.csdn.net/upload/201710/31/1509417700_300550.png) ![js代码:](https://img-ask.csdn.net/upload/201710/31/1509417714_685933.png) ![页面显示](https://img-ask.csdn.net/upload/201710/31/1509417739_391307.png) 不知道问题出在哪里,请各位大神帮帮忙!

如何在64位Linux下Hook,实现跳转到自己定义的钩子函数?

想在64bit的linux上,做Hook。 实现如下功能: 1.由系统函数跳转到自己定义的钩子函数,如何是爱心啊注意:是64bit系统不是32系统。

如何在php中静态调用函数?

<div class="post-text" itemprop="text"> <p>I am using pear to send mail in PHP. I've followed the example that is on here (<a href="http://pear.php.net/manual/en/package.mail.mail.send.php" rel="nofollow noreferrer">http://pear.php.net/manual/en/package.mail.mail.send.php</a>). However, I am getting this error message. </p> <blockquote> <p><strong>Strict Standards:</strong> Non-static method Mail::factory() should not be called statically in C:\xampp\htdocs\functions.php on line 43</p> </blockquote> <p>So I've been trying to get this Strict Standards message to not show up.</p> <p>This is my code:</p> <pre><code>$smtpinfo["host"] = "********"; $smtpinfo["port"] = "587"; $smtpinfo["auth"] = true; $smtpinfo["username"] = $mail_username; $smtpinfo["password"] = $mail_password; ## This line below is causing the problem ## $mail =&amp; Mail::factory("smtp", $smtpinfo); // &lt;-- Line 43 </code></pre> <p>I've read many <a href="https://stackoverflow.com/questions/4044996/php-pear-mail-help?rq=1">Stack Overflow Q&amp;A</a> that say just add a <code>@</code> to the beginning of <code>$mail</code>. And it is true, it makes the error disappear, but I feel like that just hides the error, and doesn't actually solve the problem.</p> <pre><code>@$mail =&amp; Mail::factory("smtp", $smtpinfo); </code></pre> <p><strong>How do I not call the method above as statically?</strong> </p> <p>Even the documentation on this page (<a href="http://pear.php.net/manual/en/package.mail.mail.send.php" rel="nofollow noreferrer">http://pear.php.net/manual/en/package.mail.mail.send.php</a>), says <code>This function cannot be called statically.</code>... but the example they gave is the same way I am calling the method?!</p> <p>Please don't answer just add <code>@</code> in front to remove the strict standard or <code>E_ALL &amp; ~E_STRICT</code> ... that is not a solution!</p> </div>

textout 钩子函数为何无法触发

我从网上下了部分代码,写了一个钩子函数获取textout输出内容。一个是包含钩子函数的DLL程序包,另一个应用程序安装了改钩子,调用了TextOut之后。 DLL里的TextOut钩子函数未被调用,请大侠指点一下问题出在哪儿? 附DLL 钩子程序包。 CPP部分: #include "stdafx.h" #include "hook.h" #include "winuser.h" #include <ImageHlp.h> #include <tlhelp32.h> #pragma comment(lib,"ImageHlp") //定义全局共享数据段 #pragma data_seg("Shared") HMODULE hmodDll=NULL; HHOOK hHook=NULL; #pragma data_seg() #pragma comment(linker,"/Section:Shared,rws") //设置全局共享数据段的属性 //dll的入口点 BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch(ul_reason_for_call) { case DLL_PROCESS_ATTACH: break; case DLL_PROCESS_DETACH: break; } hmodDll=hModule; return TRUE; } void WINAPI HookOneAPI(LPCTSTR pszCalleeModuleName,PROC pfnOriginApiAddress, PROC pfnDummyFuncAddress,HMODULE hModCallerModule) { ULONG size; //获取指向PE文件中的Import中IMAGE_DIRECTORY_DESCRIPTOR数组的指针 PIMAGE_IMPORT_DESCRIPTOR pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR) ImageDirectoryEntryToData(hModCallerModule,TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT,&size); if (pImportDesc == NULL) return; //查找记录,看看有没有我们想要的DLL for (;pImportDesc->Name;pImportDesc++) { LPSTR pszDllName = (LPSTR)((PBYTE)hModCallerModule+pImportDesc->Name); if (lstrcmpiA(pszDllName,pszCalleeModuleName) == 0) break; } if (pImportDesc->Name == NULL) return; //寻找我们想要的函数 PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA)((PBYTE)hModCallerModule+pImportDesc->FirstThunk); for (;pThunk->u1.Function;pThunk++) { //ppfn记录了与IAT表项相应的函数的地址 PROC * ppfn= (PROC *)&pThunk->u1.Function; if (*ppfn == pfnOriginApiAddress) { //如果地址相同,也就是找到了我们想要的函数,进行改写,将其指向我们所定义的函数 WriteProcessMemory(GetCurrentProcess(),ppfn,&(pfnDummyFuncAddress), sizeof(pfnDummyFuncAddress),NULL); return; } } } //查找所挂钩的进程所应用的dll模块的 BOOL WINAPI HookAllAPI (LPCTSTR pszCalleeModuleName,PROC pfnOriginApiAddress, PROC pfnDummyFuncAddress,HMODULE hModCallerModule) { if (pszCalleeModuleName == NULL) return FALSE; if (pfnOriginApiAddress == NULL) return FALSE; MEMORY_BASIC_INFORMATION mInfo; HMODULE hModHookDLL; HANDLE hSnapshot; MODULEENTRY32 me = {sizeof(MODULEENTRY32)}; //MODULEENTRY32:描述了一个被指定进程所应用的模块的struct VirtualQuery(HookOneAPI,&mInfo,sizeof(mInfo)); hModHookDLL=(HMODULE)mInfo.AllocationBase; hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,0); BOOL bOk = Module32First(hSnapshot,&me); if (bOk == FALSE) return FALSE; while (bOk) { if (me.hModule != hModHookDLL) { hModCallerModule = me.hModule;//赋值 //me.hModule:指向当前被挂钩进程的每一个模块 HookOneAPI(pszCalleeModuleName,pfnOriginApiAddress, pfnDummyFuncAddress,hModCallerModule); } bOk = Module32Next(hSnapshot,&me); } return TRUE; } //通过使pfnDummyFuncAddress与pfnOriginApiAddress相等的方法,取消对IAT的修改 BOOL WINAPI UnhookAllAPIHooks(LPCTSTR pszCalleeModuleName,PROC pfnOriginApiAddress, PROC pfnDummyFuncAddress,HMODULE hModCallerModule) { PROC temp; temp = pfnOriginApiAddress; pfnOriginApiAddress = pfnDummyFuncAddress; pfnDummyFuncAddress = temp; return HookAllAPI(pszCalleeModuleName,pfnOriginApiAddress, pfnDummyFuncAddress,hModCallerModule); } //钩子子程。与其它钩子子程不大相同,没做什么有意义的事情,继续调用下一个钩子子程,形成循环 LRESULT CALLBACK GetMsgProc(int code,WPARAM wParam,LPARAM lParam) { return CallNextHookEx(hHook,code,wParam,lParam); } void __declspec(dllexport) WINAPI InstallHook(BOOL IsHook,DWORD dwThreadId) { if(IsHook) { hHook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)GetMsgProc,hmodDll,dwThreadId); //GetProcAddress(GetModuleHandle("GDI32.dll"),"ExtTextOutA"):取得要钩的函数在所在dll中的地址 HookAllAPI("GDI32.dll",GetProcAddress(GetModuleHandle("GDI32.dll"), "TextOutW"),(PROC)&H_TextOutW,NULL); HookAllAPI("GDI32.dll",GetProcAddress(GetModuleHandle("GDI32.dll"), "TextOutA"),(PROC)&H_TextOutA,NULL); } else { UnInstallHook(); //Beep(440,1000); UnhookAllAPIHooks("GDI32.dll",GetProcAddress(GetModuleHandle("GDI32.dll"), "TextOutA"),(PROC)&H_TextOutA,NULL); UnhookAllAPIHooks("GDI32.dll",GetProcAddress(GetModuleHandle("GDI32.dll"), "TextOutW"),(PROC)&H_TextOutW,NULL); } } //卸载钩子 BOOL WINAPI UnInstallHook() { UnhookWindowsHookEx(hHook); return TRUE; } /*======================TextOutA/W 接口函数=========================================*/ BOOL WINAPI H_TextOutA(HDC hdc,int nXStart,int nYStart,LPCSTR lpString,int cbString) { MessageBox(NULL,"textout captured!!!","test",MB_OK); TextOut(hdc,nXStart,nYStart,LPCSTR(lpString),cbString);//返回原来的函数,以显示字符 return TRUE; } BOOL WINAPI H_TextOutW(HDC hdc,int nXStart,int nYStart,LPCSTR lpString,int cbString) { MessageBox(NULL,"TextOutW","APIHook_Dll ---rivershan",MB_OK); TextOut(hdc,nXStart,nYStart,LPCSTR(lpString),cbString);//返回原来的函数,以显示字符 return TRUE; } H文件部分: #ifdef HOOK_EXPORTS #define HOOK_API __declspec(dllexport) #else #define HOOK_API __declspec(dllimport) #endif extern HOOK_API int nHook; HOOK_API int fnHook(void); void __declspec(dllexport) WINAPI InstallHook(BOOL,DWORD); BOOL WINAPI UnInstallHook(); LRESULT CALLBACK GetMsgProC(int code,WPARAM wParam,LPARAM lParam); void WINAPI HookOneAPI(LPCTSTR pszCalleeModuleName,PROC pfnOriginApiAddress, PROC pfnDummyFuncAddress,HMODULE hModCallerModule); BOOL WINAPI HookAllAPI(LPCTSTR pszCalleeModuleName,PROC pfnOriginApiAddress, PROC pfnDummyFuncAddress,HMODULE hModCallerModule); BOOL WINAPI UnhookAllAPIHooks(LPCTSTR pszCalleeModuleName,PROC pfnOriginApiAddress, PROC pfnDummyFuncAddress,HMODULE hModCallerModule); BOOL WINAPI H_TextOutA(HDC, int, int, LPCSTR, int); BOOL WINAPI H_TextOutW(HDC, int, int, LPCSTR, int);

WordPress和Woocommerce中的钩子及其钩子函数执行队列

<div class="post-text" itemprop="text"> <p>I am new to Wordpress/WooCommerce and PHP, although I have experience in other web platforms and languages. I have searched, but have not found the answer to my question which is...</p> <p>Are hooks that are created by the "add_action" "added" to the list of actions called by that specific hook, or do they override any existing hooks of that action?</p> <p>For example, if I add a <code>woocommerce_thankyou</code> hook using:</p> <pre><code>add_action( 'woocommerce_thankyou', 'order_created_get_skus',#); </code></pre> <p><strong>Question:</strong> Does this override any other hooks for <code>woocommerce_thankyou</code> or does it get called in addition to any other hooks set for <code>woocommerce_thankyou</code>?</p> </div>

c++ WH_GETMESSAGE 钩子 ,勾住程序,但是回调函数没执行,请教

需要拦截目标程序的显示和关闭窗口消息。照搬网上的代码。显示注入DLL成功。但是回调函数并没有执行。请教 ``` #include "stdafx.h" #include <stdio.h> #include <stdlib.h> HHOOK hooker; HWND notepadhandle; BOOL handled; extern "C" __declspec(dllexport) LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam); char* ConvertInttoChar(int i); BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) { if(ul_reason_for_call==DLL_PROCESS_ATTACH) { handled=FALSE; notepadhandle=FindWindow(TEXT("Notepad"),NULL); if(notepadhandle==NULL) { printf("Notepad Not Found.\n"); return TRUE; } hooker=SetWindowsHookEx(WH_GETMESSAGE,HookProc,(HINSTANCE)hModule,GetWindowThreadProcessId(notepadhandle,NULL)); if(hooker) { OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE,(DWORD)notepadhandle); printf("hookpro:%d\n",HookProc); printf("hmodule:%d\n",hModule); printf("pid:%d\n",notepadhandle); printf("Hook Successfully.\nHookID:%d\n",hooker); } else { printf("Hook Failed.\nError:%d\n",GetLastError()); return TRUE; } //PostMessage(notepadhandle,WM_CLOSE,0,0); //printf("发送关闭指令"); } if(ul_reason_for_call==DLL_PROCESS_DETACH) { UnhookWindowsHookEx(hooker); return TRUE; } return TRUE; } extern "C" __declspec(dllexport) LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam) { printf("NCOD111"); if(nCode<0) { printf("NCOD<0"); return CallNextHookEx(hooker,nCode,wParam,lParam); } tagMSG* msg; msg=(tagMSG*)lParam; if(nCode==HC_ACTION && (msg->message==WM_CLOSE)) { if(handled==FALSE) printf("拦截到消息:%d\n",msg->message); handled=TRUE; UnhookWindowsHookEx(hooker); msg->message=WM_NULL; return CallNextHookEx(hooker,nCode,wParam,(LPARAM)msg); } printf("LAST"); return CallNextHookEx(hooker,nCode,wParam,lParam); } ``` 执行的结果,DLLmain的代码能正常执行,并显示注入成功;但是回调函数中的打印代码均没执行,请教。 执行结果 hookpro:1666846815 hmodule:1666777088 pid:4063406 Hook Successfully. HookID:17567643

vuejs的watch钩子函数监听一个对象,在对象被直接赋值后无法去监听。看我详细描述。

我监听了data中定义好的info对象,这是一个包含登录信息的对象, 每当我启动程序后,都会拉取本地数据库的历史登录信息,当有登录历史时, 我做了如下操作: # this.info = resp.infos[0](resp.infos[0]的结构和this.info一致,包含的字段都一样), 这个时候我监听这个info时,watch不执行,但是当我注释调这个赋值的代码后,wathc监听正常,之后我做了一个笨办法,就是分别给this.info中的字段赋值, # 如:this.info.account = resp.info[0].account, 这样的处理后watch监听正常。 这个问题怎么解决,我不想逐条赋值,因为的info这个对象中有十二个字段,那样做感觉很难看。

drupal钩子函数及其参数

<div class="post-text" itemprop="text"> <p>I'm reading through Pro Drupal development right now, and an example on page 82 uses the following function:</p> <pre><code>function menufun_menu_link_alter(&amp;$item, $menu){ if ($item['link_path'] == 'logout'){ $item['link_title'] = 'Sign off'; } } </code></pre> <p>I understand that I can find out what parameters "hook_menu_link_alter" takes by looking at api.drupal.org. What I don't understand is how I'm supposed to find out what $item actually contains. In this example, $item['link_path'] and $item['link_title'] were both used - how did he know they existed?</p> <p>I'm not only interested in this specific example, of course. I want to be able to do this for any function that I look at in drupal.</p> <p>Thanks in advance for the help!</p> </div>

MFC如何在子对话框关联的类中调用全局函数应用于子对话框

![图片说明](https://img-ask.csdn.net/upload/201712/24/1514089316_774272.png) 这是主对话框类能实现的,代码放在子对话框类中就不能实现了 ![图片说明](https://img-ask.csdn.net/upload/201712/24/1514089229_353252.png) 是因为全局作用域符吗?全局的作用符可以把hSender句柄传递进去,但是我现在要在子对话框中实现全局的GetWIndowRect,使用上hSender句柄应该如何操作?

钩子函数锁屏后无法使用数字键输出

疑似钩子函数锁屏后shift win键和数字键绑定 有没有解决方法

java web 程序 可不可以在客户端运行键盘钩子 要 怎么做?

java web 程序 可不可以在客户端运行键盘钩子 要 怎么做?

C# 64位程序调用第三方32位dll,请给出方案

实现功能:C#实现64位程序调用第三方32位dll。 实现方案:使用32位程序调用第三方dll,64位程序与32位程序进行通信,从而间接完成64位程序调用第三方32位dll 需求:接收端(32位程序)最好不使用遍历方式查询新消息,调用第三方dll需传输和接收的数据量很小(小于50字节),但要求传输时延越小越好,请问套接字(scoket)与消息队列哪种更好,实现更简单,另外64位程序与32位程序间最好可以互相订阅消息,也就是64与32位程序收到对方发的消息后可立即执行,希望提供64位程序与32位程序通信的C#代码。 之前有位朋友给出了windows钩子的解决方案,因为答案被删了,请再发一下。

GoLang使用gin调用函数而不传递gin.Context

<div class="post-text" itemprop="text"> <p>I've come across a scenario where </p> <pre><code>func main (c *gin.Context){ if err := g.Bind(&amp;data); err != nil { log.Fatalln(err) helper.TraceLog(err) helper.Fail(c, helper.INPUT_PARAMS_ERROR, "", err) return } } func Fail(c *gin.Context, errorCode string, result string, message interface{}) { response := Response{} response.Code = errorCode response.Result = message response.Message = result json.Marshal(response) c.JSON(http.StatusBadRequest, response) } </code></pre> <p>Is it possible that I do not have to pass gin to Fail func? I've tried every solution I can think of and nothing works.</p> <p>The reason I'm doing this is to make the code looks more simple and clean.</p> <p>What I'm looking for is something like this:</p> <pre><code> func main (c *gin.Context){ if err := g.Bind(&amp;data); err != nil { log.Fatalln(err) helper.TraceLog(err) helper.Fail(helper.INPUT_PARAMS_ERROR, "", err) return } } func Fail(errorCode string, result string, message interface{}) { var c *gin.Context response := Response{} response.Code = errorCode response.Result = message response.Message = result json.Marshal(response) c.JSON(http.StatusBadRequest, response) } </code></pre> </div>

请各位高手帮忙,新人求问,关于录制回放钩子

我参考文献写了以下代码,设置动态链接库再用对话框嗲用,但是在vs上调试和生成程序都没有错误,但是对话框按钮按了之后总是没有反应,请各位帮忙 CTypedPtrList <CPtrList, EVENTMSG*> EventMsgList; //全局的链表 #pragma data_seg ("mydata") HHOOK hHook; //全局的钩子句柄 #pragma data_seg ( ) //以下为WH_JOURNALRECORD 钩子函数的实现 //注意它必须是全局函数。 LRESULT WINAPI JournalRecordProc( int nCode, // 钩子代码 WPARAM wParam, // 本参数未定义 LPARAM lParam) /* 指向包含被处理 的消息的EVENTMSG 结构*/ { //如果nCode<0 则结束本钩子过程, //将控制权转交给下一个钩子。 if (nCode < 0) return CallNextHookEx(NULL, nCode, wParam, lParam); //指针类型转换 EVENTMSG *pmsg = (EVENTMSG *)lParam; EVENTMSG* pEventMsg = new EVENTMSG; switch (nCode) { // HC_ACTION 表示参数lParam 指向一个EVENTMSG 结构, 它包含刚被处理的消息。 case HC_ACTION: //复制消息: 使用内存块拷贝法 memcpy(pEventMsg, pmsg, sizeof(EVENTMSG)); //将复制后的消息添加到链表中, //已备回放时使用。 EventMsgList.AddTail(pEventMsg); break; case HC_SYSMODALOFF: //模态对话框被关闭 break; case HC_SYSMODALON: //模态对话框显示 break; } } LRESULT WINAPI JournalPlaybackProc( int nCode, // 钩子代码 WPARAM wParam, // 本参数未定义 LPARAM lParam) /* 指向包含被处理的消息的 EVENTMSG 结构*/ { //静态变量, 用来指示链表中元素的位置索引 static signed i=0; // bFlag 静态变量, 用来标志是否为第1 次进入HC_GETNEXT 分支 static BOOL bFlag = TRUE; EVENTMSG *pMsg; //链表的当前元素位置变量 POSITION pos; //用来记录前后两个消息发生的时刻, 以便计算前后两条消息的时间间隔 DWORD PreTime, NowTime; switch (nCode) { case HC_SKIP: //设置此标志的理由, 见说明(2) 和(5) bFlag = TRUE; //向后移动位置索引, 以备检索链表中的下一条消息 i++; break; case HC_GETNEXT: /*不要回放最后两个消息, 因为这两个消息为鼠标 左键单击“停止录制”按钮的消息。而在回放时, 没有必要 再次单击此按钮。Q*/ if (i>EventMsgList.GetCount()-3) { //使下标计算器重新回到0, 以备再次重新录制。 i = 0; //解除钩子(释放Hook) UnhookWindowsHookEx(hHook); AfxMessageBox(L"消息回放完毕!"); } //在链表中检索第i 个消息 pos = EventMsgList.FindIndex(i); pMsg = EventMsgList.GetAt(pos); //按内存块复制方法, 将第i 个消息复制到lParam 所指向的内存块中 memcpy((LPEVENTMSG)lParam, pMsg, sizeof(EVENTMSG)); //以下判断是为了防止当i = 0 时, i - 1 会发生下标越界的情况 if ((i) != 0 && bFlag == TRUE) { /* 必须修改标志, 防止重复执行本段代 码, 否则系统呈现挂起状态。*/ bFlag = FALSE; //记下当前消息对应的时刻 NowTime = pMsg->time; //定位到当前消息的前一条消息 pos = EventMsgList.FindIndex(i - 1); //获取前一条消息 pMsg = EventMsgList.GetAt(pos); //读出前一条消息对应的时刻 PreTime = pMsg->time; /*该返回值表示当前消息被处理前 系统应该等待的毫秒数, 在此返回前后两条消息之间的时 间差"*/ return NowTime - PreTime; } else return 0; break; default: return CallNextHookEx(NULL, nCode, wParam,lParam); }//end of switch (nCode) return 0; } Chook::Chook() //类构造函数 { } Chook::~Chook() //类析构函数 { stophook(); } void Chook::starthook() //安装钩子并设定接收显示窗口句柄 { hHook = SetWindowsHookEx(WH_JOURNALRECORD, JournalRecordProc, AfxGetApp() -> m_hInstance, 0); } void Chook::stophook() //卸载钩子 { UnhookWindowsHookEx(hHook); } void Chook::starthook1() { hHook = SetWindowsHookEx(WH_JOURNALPLAYBACK, JournalPlaybackProc,AfxGetApp() ->m_hInstance,0); } ``` ```

Linux 下学习hook函数使用时用GCC编译报错

使用linux下netfilter和hook函数,使用结构体nf_hook_ops定义时总是报错 invalid use of undefined type ‘struct nf_hook_ops’,我已经在添加了该有的头文件,代码和网上很多一样,就是简单的netfilter hook代码。求dalao解惑!linux是火帽3.2.2-5,。代码和编译情况如下: ``` #ifndef MODULE #define MODULE #endif #ifndef __KERNEL__ #define __KERNEL__ #endif #include <linux/module.h> #include <linux/kernel.h> #include <linux/netdevice.h> #include <linux/netfilter.h> #include <linux/netfilter_ipv4.h> /*hook处理函数*/ unsigned int hook_func(unsigned int hook, struct sk_buff *skb, const struct net_device *in, const struct net_device *out, int (*okfn)(struct sk_buff *)); /*注册hook函数数据结构*/ static struct nf_hook_ops my_hook; /*初始化程序*/ int init_module() { my_hook.hook=hook_func; //my_hook.owner=THIS_MODULE; my_hook.pf= PF_INET; my_hook.hooknum= NF_IP_LOCAL_IN; my_hook.priority = NF_IP_PRI_FIRST; nf_register_hook(my_hook);//注册入内核 return 0; } /*清除钩子*/ void cleanup_moudule() { nf_unregister_hook(&my_hook);//将用户定义的钩子从内核中删除 } ``` gcc编译报错: Myfirewall.c:21: warning: `struct net_device' declared inside parameter list Myfirewall.c:21: warning: its scope is only this definition or declaration, which is probably not what you want Myfirewall.c:21: warning: `struct sk_buff' declared inside parameter list Myfirewall.c: In function `init_module': Myfirewall.c:37: invalid use of undefined type `struct nf_hook_ops' Myfirewall.c:39: invalid use of undefined type `struct nf_hook_ops' Myfirewall.c:40: invalid use of undefined type `struct nf_hook_ops' Myfirewall.c:41: invalid use of undefined type `struct nf_hook_ops' Myfirewall.c:43: `my_hook' has an incomplete type Myfirewall.c: At top level: Myfirewall.c:28: storage size of `my_hook' isn't known

把router.beforeEach 路由钩子 单独成立一个文件之后 不触发

1.这里首先还是创建路由实例对象 默认导出 import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) const routes = [ { path: '/login', name: 'login', component: () => import('@/views/login') }, { path: '/', name: 'layout', component: () => import('@/views/layout') } ] export default new Router({ mode: 'history', routes }) 2.新建了一个permission.js的文件 然后导入进来路由实力 编写路由前置钩子 import router from './router/index.js' router.beforeEach((to, from, next) => { console.log(1111) }) 现在问题是 切换路由的时候 这个前置钩子函数不会执行 不知道什么原因

Windows版YOLOv4目标检测实战:训练自己的数据集

课程演示环境:Windows10; cuda 10.2; cudnn7.6.5; Python3.7; VisualStudio2019; OpenCV3.4 需要学习ubuntu系统上YOLOv4的同学请前往:《YOLOv4目标检测实战:训练自己的数据集》 课程链接:https://edu.csdn.net/course/detail/28745 YOLOv4来了!速度和精度双提升! 与 YOLOv3 相比,新版本的 AP (精度)和 FPS (每秒帧率)分别提高了 10% 和 12%。 YOLO系列是基于深度学习的端到端实时目标检测方法。本课程将手把手地教大家使用labelImg标注和使用YOLOv4训练自己的数据集。课程实战分为两个项目:单目标检测(足球目标检测)和多目标检测(足球和梅西同时检测)。 本课程的YOLOv4使用AlexyAB/darknet,在Windows系统上做项目演示。包括:安装软件环境、安装YOLOv4、标注自己的数据集、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算)和先验框聚类分析。还将介绍改善YOLOv4目标检测性能的技巧。 除本课程《Windows版YOLOv4目标检测实战:训练自己的数据集》外,本人将推出有关YOLOv4目标检测的系列课程。请持续关注该系列的其它视频课程,包括: 《Windows版YOLOv4目标检测实战:人脸口罩佩戴检测》 《Windows版YOLOv4目标检测实战:中国交通标志识别》 《Windows版YOLOv4目标检测:原理与源码解析》

2019数学建模历年题目及优秀论文

2019数学建模历年题目及优秀论文 ,好资源与大家分享!!

华为海思数字IC提前批笔试题目,2020届华为海思校园招聘,西南地区

华为海思数字IC提前批笔试题目,2020届华为海思校园招聘,西南地区。单选和多选题华为海思数字IC提前批笔试题目,2020届华为海思校园招聘,西南地区。单选和多选题

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

软件测试2小时入门

本课程内容系统、全面、简洁、通俗易懂,通过2个多小时的介绍,让大家对软件测试有个系统的理解和认识,具备基本的软件测试理论基础。 主要内容分为5个部分: 1 软件测试概述,了解测试是什么、测试的对象、原则、流程、方法、模型;&nbsp; 2.常用的黑盒测试用例设计方法及示例演示;&nbsp; 3 常用白盒测试用例设计方法及示例演示;&nbsp; 4.自动化测试优缺点、使用范围及示例‘;&nbsp; 5.测试经验谈。

Python数据分析与挖掘

92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元 &nbsp; 为什么学习数据分析? &nbsp; &nbsp; &nbsp; 人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。 &nbsp; &nbsp; &nbsp; 从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。 &nbsp;&nbsp; 本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。 &nbsp; 二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 &nbsp; 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。 &nbsp; 四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。 &nbsp; 五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。

【大总结2】大学两年,写了这篇几十万字的干货总结

本文十天后设置为粉丝可见,喜欢的提前关注 不要白嫖请点赞 不要白嫖请点赞 不要白嫖请点赞 文中提到的书我都有电子版,可以评论邮箱发给你。 文中提到的书我都有电子版,可以评论邮箱发给你。 文中提到的书我都有电子版,可以评论邮箱发给你。 本篇文章应该算是Java后端开发技术栈的,但是大部分是基础知识,所以我觉得对任何方向都是有用的。 1、数据结构 数据结构是计算机存储、...

阿里巴巴高级面试题(首发、高频136道、含答案)

整理的136道阿里的Java面试题,都来挑战一下,看看自己有多厉害。下面题目都带超详细的解答,详情见底部。 java基础 Arrays.sort实现原理和Collection实现原理 foreach和while的区别(编译之后) 线程池的种类,区别和使用场景 分析线程池的实现原理和线程的调度过程 线程池如何调优 线程池的最大线程数目根据什么确定 动态代理的几种方式 HashMap的并发问题 了解LinkedHashMap的应用吗 反射的原理,反射创建类实例的三种方式是什么? clon

Java进阶高手课-核心篇

<p> <br> </p> <p> Java进阶的必经之路!<span></span> </p> <p> <br> </p> <p> <b>【超实用课程内容】</b><b></b> </p> <p> 本课程囊括了<span>Java</span>语言进阶的核心知识点,以真实场景项目实战为导向,循序渐进,深入浅出的了解Java并发编程、JVM虚拟机、网络编程和MySQL应用,讲解<span>Java</span>这门使用广泛的编程语言,助你能够游刃有余地游走在这些技术之中。<span> </span> </p> <p> <br> </p> <p> 套餐中一共包含<span>4</span>门<span>Java</span>进阶必学的核心知识(共<span>57</span>讲) </p> <p> 课程<span>1</span>:《<span>Java</span>进阶高手课<span>-</span>并发编程透彻理解》 </p> <p> 课程<span>2</span>:《<span>Java</span>进阶高手课<span>-</span>深入<span>JVM</span>虚拟机》 </p> <p> 课程<span>3</span>:《<span>Java</span>进阶高手课<span>-</span>深入浅出<span>Java</span>网络编程》 </p> <p> 课程<span>4</span>:《<span>Java</span>进阶高手课<span>-</span>必知必会<span>MySQL</span>》 </p> <p> <br> </p> <p> <strong>【</strong><strong>哪些人适合学习这门课程?</strong><strong>】</strong><strong></strong> </p> <p> 1)大学生,平时只接触了语言基础,并未学习深入语言内核; </p> <p> 2)对<span>Java</span>掌握程度薄弱的人,课程可以让你更好的理解<span>Java</span>语言原理及应用 </p> <p> 3)想修炼更好的<span>Java</span>内功,工作中遇到<span>Bug</span>可以游刃有余 </p> <p> 4)被面试官打破沙锅问到底的问题问到怀疑人生的应聘者 </p> <p> <br> </p> <p> <strong>【</strong><strong>你能收获到什么?</strong><strong>】</strong> </p> <p> 1.基础再提高,针对<span>Java</span>核心知识点学透,用对<span> </span> </p> <p> 2.能力再提高,日常工作中的代码换新貌,不怕问题<span> </span> </p> <p> 3.面试再加分,巴不得面试官打破沙锅问到底,竞争力<span>MAX</span> </p> <p> <br> <strong>【课程如何观看?】</strong> </p> <p> 1、登录<span>CSDN</span>学院<span> APP </span>在我的课程中进行学习; </p> <p> 2、移动端:<span>CSDN </span>学院<span>APP</span>(注意不是<span>CSDN APP</span>哦) </p> <p> 本课程为录播课,课程<span>2</span>年有效观看时长 </p> <p> <br> </p> <p class="ql-long-24357476"> <strong>【</strong><strong>资料开放</strong><strong>】</strong><strong></strong> </p> <p class="ql-long-24357476"> 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化 </p> <p class="ql-long-24357476"> 下载方式:电脑登录课程观看页面,点击右下方课程资料、代码、课件等打包下载 </p> <p class="ql-long-24357476"> <img src="https://img-bss.csdn.net/202004200153008539.png" alt=""> </p> <p> <br> </p>

LINGO20200701.zip

2020第三届河北省研究生建模竞赛B题,利用lingo进行求解的代码。lingo在处理这类涉及下标的约束条件是个难点,希望我的代码能够提供一些帮助

oracle学习第三天

怎么建表? 根据需求建ER图 根据ER图和三范式建表 SQL structured query language 结构化查询语言 数据库执行语句 数据定义语言 (Data Definition Language, DDL) 是SQL语言集中负责数据结构定义与数据库对象定义的语言,由CREATE、ALTER与DROP三个语法所组成 数据控制语言(DCL:Data Control Language)是用来设置或者更改数据库用户或角色权限的语句,这些语句包括GRANT、REVOKE等语句 插入语句

2020联发科笔试题(IC方向)b.docx

文档位联发科公司的数字IC岗位笔试题,自己回忆版本,跟前一个A卷一起是完整版

使用TensorFlow+keras快速构建图像分类模型

课程分为两条主线: 1&nbsp;从Tensorflow的基础知识开始,全面介绍Tensorflow和Keras相关内容。通过大量实战,掌握Tensorflow和Keras经常用到的各种建模方式,参数优化方法,自定义参数和模型的手段,以及对训练结果评估与分析的技巧。 2&nbsp;从机器学习基础算法开始,然后进入到图像分类领域,使用MNIST手写数据集和CIFAR10图像数据集,从简单神经网络到深度神经网络,再到卷积神经网络,最终完成复杂模型:残差网络的搭建。完成这条主线,学员将可以自如地使用机器学习的手段来达到图像分类的目的。

点进来看看,为什么要学习【数据结构与算法】? 该如何学习?

【数据结构与算法】应该是大学计算机专业必修的一门课,为什么这门课会被列入到必修课的行列当中呢?因为对于每一个程序员来说,在以后的工作中不免要面对一些复杂的业务逻辑,同时要写对应的代码来实现这个复杂的业务。当然了,有很多种方式都可以实现同一个业务逻辑,但每种方式的代码运行效率可能不一样,我们接下来通过一个简单的例子感受一下。 例子: 假如你们班级里有一万个人,并且每个人的姓名和身份信息都存储在一个

《三天给你聊清楚redis》第2天看看redis怎么被搞出来的(22036字)

后端需要知道的关于redis的事,基本都在这里了。 此文后续会改为粉丝可见,所以喜欢的请提前关注。 你的点赞和评论是我创作的最大动力,谢谢。 3、单机实现 3.1、数据库概述 redis服务器将所有数据库都保存在redis/redisServer中,数组db存放所有数据库,每一项是一个redisdb结构。dbnum代表数据库数量。 客户端有一个指针指向当前数据库,可以切换,也就是移动指

中国全国省地县乡村五级地标kmz(很准)

中国全国省地县乡村五级地标kmz(很准),我也不知道写啥了,反正挺好用的

R语言入门基础

本课程旨在帮助学习者快速入门R语言: 课程系统详细地介绍了使用R语言进行数据处理的基本思路和方法。 课程能够帮助初学者快速入门数据处理。 课程通过大量的案例详细地介绍了如何使用R语言进行数据分析和处理 课程操作实际案例教学,通过编写代码演示R语言的基本使用方法和技巧

玩转Linux:常用命令实例指南

人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。 本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 --------------------------------------------------------------- 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+700元编程礼包。 &nbsp;

利用 Python 爬取了 13966 条运维招聘信息,我得出了哪些结论?

作者:JackTian、黄伟呢 公众号:杰哥的IT之旅,后台回复:「运维」可获取本文完整数据 大家好,我是 JackTian。 我经常会收到读者关于一系列咨询运维方面的事情,比如:杰哥,运维到底是做什么的呀?运维的薪资水平/ 待遇怎么样呢?杰哥帮忙看下这个岗位的招聘需要对于小白来说,能否胜任的了呢?等等。 这里,我把之前写的《一篇文章带你解读从初级运维工程师到资深运维专家的学习路线》,本文从初级 / 中级 / 高级运维工程师以及到资深方向逐步展开给大家汇总了一些各阶段所具备的技能,仅供学习路线参考,如有.

2018年数学建模国赛A题matlab代码及注释.rar

2018年数学建模国赛A题matlab代码及注释,自己做题编写,实测有效,可以运行

微信公众平台开发入门

本套课程的设计完全是为初学者量身打造,课程内容由浅入深,课程讲解通俗易懂,代码实现简洁清晰。通过本课程的学习,学员能够入门微信公众平台开发,能够胜任企业级的订阅号、服务号、企业号的应用开发工作。 通过本课程的学习,学员能够对微信公众平台有一个清晰的、系统性的认识。例如,公众号是什么,它有什么特点,它能做什么,怎么开发公众号。 其次,通过本课程的学习,学员能够掌握微信公众平台开发的方法、技术和应用实现。例如,开发者文档怎么看,开发环境怎么搭建,基本的消息交互如何实现,常用的方法技巧有哪些,真实应用怎么开发。

实用主义学Python(小白也容易上手的Python实用案例)

3折秒杀! 系统掌握Python核心语法16点,轻松应对工作中80%以上的Python使用场景! 69元=72讲+源码+社群答疑+讲师社群分享会&nbsp; 【哪些人适合学习这门课程?】 1)大学生,平时只学习了Python理论,并未接触Python实战问题; 2)对Python实用技能掌握薄弱的人,自动化、爬虫、数据分析能让你快速提高工作效率; 3)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; 4)想修炼更好的编程内功,优秀的工程师肯定不能只会一门语言,Python语言功能强大、使用高效、简单易学。 【超实用技能】 从零开始 自动生成工作周报 职场升级 豆瓣电影数据爬取 实用案例 奥运冠军数据分析 自动化办公:通过Python自动化分析Excel数据并自动操作Word文档,最终获得一份基于Excel表格的数据分析报告。 豆瓣电影爬虫:通过Python自动爬取豆瓣电影信息并将电影图片保存到本地。 奥运会数据分析实战 简介:通过Python分析120年间奥运会的数据,从不同角度入手分析,从而得出一些有趣的结论。 【超人气老师】 二两 中国人工智能协会高级会员 生成对抗神经网络研究者 《深入浅出生成对抗网络:原理剖析与TensorFlow实现》一书作者 阿里云大学云学院导师 前大型游戏公司后端工程师 【超丰富实用案例】 0)图片背景去除案例 1)自动生成工作周报案例 2)豆瓣电影数据爬取案例 3)奥运会数据分析案例 4)自动处理邮件案例 5)github信息爬取/更新提醒案例 6)B站百大UP信息爬取与分析案例 7)构建自己的论文网站案例

赵强老师:大数据从入门到精通(套餐)

本系列课程将基于RedHat Linux 7.4版本、Hadoop 2.7.3、Spark 2 版本全面介绍大数据的整体内容,让学员深入理解并掌握运行机制和原理,从而进一步掌握大数据的相关内容。

Python+OpenCV计算机视觉

Python+OpenCV计算机视觉系统全面的介绍。

2020联发科笔试题(IC方向)a.docx

文档为自己回忆 准确度高;2019年2020届笔试题;文档分上下两个章节,

Python代码实现飞机大战

文章目录经典飞机大战一.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第一次接触这个东西的时候,我的内心是被震撼到的。第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

玩转 Spring 全家桶

<p> 新课上新福利:本套餐共包含 4 大课程,原价 ¥199,今日立减¥100,到手仅需¥99! </p> <p> <br> </p> <p class="MsoNormal" align="left"> <b>为什么每一个程序员都需要掌握</b><b> Java Spring </b><b>全家桶?</b><b><br> </b><b></b> </p> <p class="MsoNormal" align="left"> 1. Spring在如今Java的应用市场以及就业市场中,都成为炙手可热的部分。面试出镜率之高,市场应用之广,让其成为Java开发人员的必备技能之一,唯有系统的掌握Spring全家桶的思想、设计、以及实现,才可以让开发过程变得更容易、更高效,以适应当前市场的快速发展。 </p> <p class="MsoNormal" align="left"> <br> </p> <p class="MsoNormal" align="left"> <b>本套餐内容介绍:</b><b></b> </p> <p class="MsoNormal" align="left"> 本课程所有内容基于最新的Spring  Boot 2.2.5.RELEASE 版本,和Spring Cloud Hoxton.SR3 版本,其中大量的独家案例,以及本人多年的经验讲解。 </p> <p class="MsoNormal" align="left"> 课程循序渐进,内容中有Spring的核心基础内容,也有高级的进阶内容。 </p> <p class="MsoNormal" align="left"> 内容分为五大部分,分别是: </p> <p class="MsoNormal" align="left"> <b>初识篇</b><b>Spring Framework</b>:主要讲解Spring的核心内容IOC及AOP。本篇对Spring的基本概念进行大致的讲解,但主要的技术点皆以案例为主,同时会对项目中都会用到的日志进行讲解及案例说明。 </p> <p class="MsoNormal" align="left"> <br> </p> <p class="MsoNormal" align="left"> <b>基础篇</b><b>Spring MVC</b><b>:</b>主要以案例的方式讲解Spring的前端部分,比如表单、验证、国际化、主题、文件上传等,以及高阶内容过滤器、拦截器、多种异常处理方法 ,以及日志Log4j2及SLF4J的使用。最后,会结合Spring、Spring MVC及MyBatis(即SSM)进行产品的增删改查的案例讲解。 </p> <p class="MsoNormal" align="left"> <br> </p> <p class="MsoNormal" align="left"> <b>核心篇</b><b>Spring Boot</b><b>:</b>主要以案例的方式对如何使用Spring Boot开发进行讲解,包括热部署,扩展的启动行为,整合JSON、Thymeleaf、Freemarker、JSP的Web开发,全局异常处理,配置文件的使用,及Logback&SLF4J的日志使用,国际化,最后,会结合Spring Boot及MyBatis进行产品的增删改查的案例讲解。 </p> <p class="MsoNormal" align="left"> <br> </p> <p class="MsoNormal" align="left"> <b>核心篇</b><b>Spring Cloud</b><b>:</b>以案例的方式,结合Spring Boot,对注册中心,消费者与生产者,服务的调用OpenFeign,Hystrix监控,服务网关Gateway,消息驱动微服务Stream,分布式集群,及分布式配置中心进行讲解,使得我们快速掌握微服务的开发方法。 </p> <p class="MsoNormal" align="left"> <br> </p> <p class="MsoNormal" align="left"> <b>核心篇</b><b>Spring Data</b><b>:</b>主要以案例的方式讲解持久层的开发,分别对Spring Data JPA 及 Spring Data JDBC 进行讲解。 </p> <p class="MsoNormal" align="left"> <br> </p> <p class="MsoNormal" align="left"> <br> </p> <p class="MsoNormal" align="left"> <b>学习收获:</b><b></b> </p> <p class="MsoNormal" align="left"> 1、使用 Spring MVC 快速开发; </p> <p class="MsoNormal" align="left"> 2、搞定 Spring Boot 核心的实现原理; </p> <p class="MsoNormal" align="left"> 3、通过 Spring Cloud 快速构建微服务架构; </p> <p class="MsoNormal" align="left"> 4、掌握 Spring 的使用和开发技巧。 </p> <p class="MsoNormal" align="left"> <br> </p> <p class="MsoNormal" align="left"> <br> </p> <p class="MsoNormal" align="left"> <b>讲师介绍</b><b></b> </p> <p class="MsoNormal" align="left"> 杨春娟,05年毕业于清华大学,之后致力于 JavaEE 的设计开发,12年开始致力于 Hybris 的架构、设计及开发,及管理工作。精通C/ C++,Java, JavaEE,MySql,精通SAP Hybris等,善于将复杂的问题简单化并教授给学生,善于培养学生独立思考问题的能力。 </p> <p> <br> </p> <p> <img src="https://img-bss.csdn.net/202005180944265006.png" alt=""> </p> <p> <img src="https://img-bss.csdn.net/202005080326195251.png" alt=""> </p>

linux下利用/proc进行进程树的打印

在linux下利用c语言实现的进程树的打印,主要通过/proc下的目录中的进程文件,获取status中的进程信息内容,然后利用递归实现进程树的打印

相关热词 aero c# c#压缩图片 c# udp服务器 100线程 c# c# fidller请求 c# 参数 调用exe c# 打字母小游戏 c#显示未能加载文件 c# 右击菜单加快捷键 c#将重复的数据保留一条
立即提问