鍍金池/ 問答/ 網(wǎng)絡(luò)安全問答
怪痞 回答

你所使用的go版本是否>=1.7.6?

初心 回答

1.這段代碼應(yīng)該是umd的寫法,就是檢測當(dāng)前的運(yùn)行環(huán)境支持哪種模塊化規(guī)范,exports是commonjs規(guī)范,define是amd規(guī)范的寫法
2.this在這里是指調(diào)用的全局環(huán)境

參考http://blog.csdn.net/Real_Bir...

自己解決了
改成了@"C:\Users\liux\AppData\Local\Yarn\Data\global\node_modules\.bin\vue.cmd" %*
不知道為什么yarn自動生成的鏈接會報這種錯

伴謊 回答

phpstorm + xdebug
xdebug 可以用斷點(diǎn)調(diào)試 也可以輸出日志分析 phpstorm有分析工具

終于解決了這個問題,在stackoverflow上面提問找到了解答:問答詳情

做法是添加消息隊列.為什么添加在這個問答:為什么添加消息隊列,大致意思是因為低級鼠標(biāo)鍵盤鉤子默認(rèn)會馬上返回返回值,通過添加消息隊列就能解決.

添加了一個線程來控制鉤子,如果不添加好像程序不能按要求退出.

最后c++部分代碼:

// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
#include "stdio.h"

HHOOK g_HookHwnd = NULL;
HHOOK g_hMouse = NULL;
HANDLE hThread = NULL;

// 鉤子子程
extern "C" _declspec(dllexport) LRESULT CALLBACK MyHookFun(int nCode, WPARAM wParam, LPARAM lParam)
{
    printf("in hook key function\n");
    // 這個Structure包含了鍵盤的信息
    /*typedef struct {
    DWORD vkCode;
    DWORD scanCode;
    DWORD flags;
    DWORD time;
    ULONG_PTR dwExtraInfo;
    } KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;*/
    // 我們只需要那個vkCode
    PKBDLLHOOKSTRUCT pVirKey = (PKBDLLHOOKSTRUCT)lParam;

    // MSDN說了,nCode < 0的時候別處理
    if (nCode >= 0)
    {
        // 按鍵消息
        switch (wParam)
        {
        case WM_KEYDOWN:
        case WM_SYSKEYDOWN:
        case WM_KEYUP:
        case WM_SYSKEYUP:
            switch (pVirKey->vkCode)
            {
            case VK_LWIN:
            case VK_RWIN:
                return 1;  // 吃掉消息
                break;
            }
            return 1;
            break;
        }
    }

    return CallNextHookEx(g_HookHwnd, nCode, wParam, lParam);
}

extern "C" _declspec(dllexport) LRESULT CALLBACK  MyHookMouse(int nCode, WPARAM wParam, LPARAM lParam)
{
    printf("in hook mouse function\n");
    return 1;
}


HMODULE g_Module;
extern "C" _declspec(dllexport)  BOOL APIENTRY DllMain( HMODULE 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;
    }
    }
    return TRUE;
}


extern "C" _declspec(dllexport) DWORD WINAPI controllHook(LPVOID lpParamter)
{
    g_HookHwnd = SetWindowsHookEx(WH_KEYBOARD_LL, MyHookFun, g_Module, 0);
    g_hMouse = SetWindowsHookEx(WH_MOUSE_LL, MyHookMouse, g_Module, 0);
    while (true) {
        MSG msg;
        if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
}


extern "C" _declspec(dllexport) void FuncHookDevice()
{
    if (!g_HookHwnd)
    {
        hThread = CreateThread(NULL, 0, controllHook, NULL, 0, NULL);
        
        printf("start hook\n");
        g_HookHwnd = SetWindowsHookEx(WH_KEYBOARD_LL, MyHookFun, g_Module, 0);

    }
}

extern "C" _declspec(dllexport) void FuncEndHook()
{
    printf("end hook\n");
    UnhookWindowsHookEx(g_HookHwnd);
    UnhookWindowsHookEx(g_hMouse);
    CloseHandle(hThread);
    g_HookHwnd = NULL;
}
久不遇 回答

!{JSON.stringify(buyTips)} 不會報錯嗎

朕略傻 回答

我一般選擇用命令的方式設(shè)置,并且將這兩個文件夾配置在其他盤符防止權(quán)限問題

npm config set prefix "D:\nodejs\node_global" //設(shè)置全局包目錄
npm config set cache "D:\nodejs\node_cache" //設(shè)置緩存目錄
硬扛 回答

缺少一個配置

{
    devtool: 'sourcemap'
}
乖乖噠 回答

設(shè)置$('.details')元素的高度(height),并且設(shè)置overflow:auto;

雨蝶 回答

你只是想把本地代碼上傳到遠(yuǎn)程ftp服務(wù)器。
簡單起見,每次修改完畢把本地代碼打tar包,ssh連接到服務(wù)器后用rz直接上傳,全量或者部分更新。

你非要用git來同步代碼的話,
可以在github、gitee.com等網(wǎng)站開一個私有的倉庫,代碼都同步到第三方。
或者自己在ftp服務(wù)器上搭建一個gitlab服務(wù)

不討囍 回答
  1. 應(yīng)用里面有權(quán)限管理,把地理位置禁掉;
  2. H5的話,真的想禁,就把瀏覽器的禁掉。
陌璃 回答

兩種:

第一種:

TypedQuery<User> query = em.createQuery(
  "SELECT u FROM User u WHERE (u.name like :n1 and u.age < :a1) or (u.name like :n2 and u.age > :a2)",
  User.class
);
query.setParameter("n1", n1);
query.setParameter("n2", n2);
query.setParameter("a1", a1);
query.setParameter("a2", a2);

第二種:

Predicate less = builder.and(
  builder.like(u.get("name"), n1),
  builder.lt(u.get("age"), a1)
);
Predicate more = builder.and(
  builder.like(u.get("name"), n2),
  builder.gt(u.get("age"), a2)
);
query.where(builder.or(less, more));
若相惜 回答

clipboard.js的官網(wǎng)包括在githubissue中已經(jīng)說明不支持IE8


我在issue找到一條,有人專門針對IE8clipboard.js,鏈接如下:https://github.com/zenorocha/...
往下翻會看到,執(zhí)行的安裝命令是:bower install clipboard-ie8 雖然我也沒試過,不過你可以試試

小曖昧 回答

@馮恒智
請問有可以參考的例子嗎?用Objective-C實現(xiàn)的原生軟鍵盤,謝謝

別瞎鬧 回答

Docker的四種網(wǎng)絡(luò)模式:

Bridge模式

當(dāng)Docker進(jìn)程啟動時,會在主機(jī)上創(chuàng)建一個名為docker0的虛擬網(wǎng)橋,此主機(jī)上啟動的Docker容器會連接到這個虛擬網(wǎng)橋上。虛擬網(wǎng)橋的工作方式和物理交換機(jī)類似,這樣主機(jī)上的所有容器就通過交換機(jī)連在了一個二層網(wǎng)絡(luò)中。

從docker0子網(wǎng)中分配一個IP給容器使用,并設(shè)置docker0的IP地址為容器的默認(rèn)網(wǎng)關(guān)。在主機(jī)上創(chuàng)建一對虛擬網(wǎng)卡veth pair設(shè)備,Docker將veth pair設(shè)備的一端放在新創(chuàng)建的容器中,并命名為eth0(容器的網(wǎng)卡),另一端放在主機(jī)中,以vethxxx這樣類似的名字命名,并將這個網(wǎng)絡(luò)設(shè)備加入到docker0網(wǎng)橋中??梢酝ㄟ^brctl show命令查看。

bridge模式是docker的默認(rèn)網(wǎng)絡(luò)模式,不寫--net參數(shù),就是bridge模式。使用docker run -p時,docker實際是在iptables做了DNAT規(guī)則,實現(xiàn)端口轉(zhuǎn)發(fā)功能。可以使用iptables -t nat -vnL查看。

bridge模式如下圖所示:

clipboard.png

Host模式

如果啟動容器的時候使用host模式,那么這個容器將不會獲得一個獨(dú)立的Network Namespace,而是和宿主機(jī)共用一個Network Namespace。容器將不會虛擬出自己的網(wǎng)卡,配置自己的IP等,而是使用宿主機(jī)的IP和端口。但是,容器的其他方面,如文件系統(tǒng)、進(jìn)程列表等還是和宿主機(jī)隔離的。

Host模式如下圖所示:

clipboard.png

Container模式

這個模式指定新創(chuàng)建的容器和已經(jīng)存在的一個容器共享一個 Network Namespace,而不是和宿主機(jī)共享。新創(chuàng)建的容器不會創(chuàng)建自己的網(wǎng)卡,配置自己的 IP,而是和一個指定的容器共享 IP、端口范圍等。同樣,兩個容器除了網(wǎng)絡(luò)方面,其他的如文件系統(tǒng)、進(jìn)程列表等還是隔離的。兩個容器的進(jìn)程可以通過 lo 網(wǎng)卡設(shè)備通信。

Container模式示意圖:

clipboard.png

None模式

使用none模式,Docker容器擁有自己的Network Namespace,但是,并不為Docker容器進(jìn)行任何網(wǎng)絡(luò)配置。也就是說,這個Docker容器沒有網(wǎng)卡、IP、路由等信息。需要我們自己為Docker容器添加網(wǎng)卡、配置IP等。

Node模式示意圖:

clipboard.png

更多請自行閱讀: http://www.a-site.cn/article/...

悶騷型 回答

與查一個網(wǎng)站的IP相同,都是用dns協(xié)議查詢。只不過IP反查需要運(yùn)營商支持,這個國外做的比較好一點(diǎn)。

有的是用了工信部的備案平臺逆向查詢的,不過由于信息不準(zhǔn)確問題可信度已經(jīng)很低了;
另外就是谷歌的服務(wù),推測是記錄了歷史訪問解析數(shù)據(jù)。

http://blog.csdn.net/u0103728...
http://www.viewdns.info/rever...

墨染殤 回答

C#是半默認(rèn)break,你不寫會編譯器會發(fā)錯誤

菊外人 回答

如果是檢驗的是對象的屬性
可以封裝一下方法(validator注入,你的bean是getValidator):

public static void validateWithException(Object object, Class<?>... groups) {
        Set constraintViolations = validator.validate(object, groups);
        if (!constraintViolations.isEmpty()) {
            Iterator iterator = constraintViolations.iterator();
            //取第一個錯誤拋出
            ConstraintViolation constraintViolation = (ConstraintViolation) iterator.next();
            throw new IllegalArgumentException(constraintViolation.getMessage());
        }

    }
    

當(dāng)然也可以使用AOP的方式對請求方法進(jìn)行校驗。
對單個參數(shù)/多個參數(shù),非對象的屬性,則需要添加@Validated于類上,提前需配置MethodValidationPostProcessor bean