鍍金池/ 問(wèn)答/ 網(wǎng)絡(luò)安全問(wèn)答
焚音 回答

crontab配置文本化(類(lèi)似代碼)。網(wǎng)站程序自動(dòng)構(gòu)建部署。構(gòu)建過(guò)程中增加一個(gè)crontab部署。

部署機(jī)制:crontab文件有更新,構(gòu)建部署更新配置。

司令 回答

主要關(guān)鍵解解決辦法:===》》適用于所有東西的安裝

安裝有關(guān)環(huán)境配置類(lèi)的軟件及其他,一般情況下切記不要安裝到c盤(pán)programfiles下,否則會(huì)出現(xiàn)各種問(wèn)題的報(bào)錯(cuò)?。。∏杏?!

nvm安裝步驟:

1、下載nvm-setup安裝包

2、打開(kāi)安裝包,選擇nvm的存放路徑,以及nodejs的存放路徑,這里切記不要選擇到c:/program files,這里的兩個(gè)路徑是為了自動(dòng)在系統(tǒng)中添加環(huán)境變量的路徑;

3、打開(kāi)nvm文件夾下的settings.txt文件,在最后添加以下代碼:

node_mirror: https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/

將下載鏡像源指向淘寶(這步也很重要,否則在安裝node的時(shí)候會(huì)出現(xiàn)卡死,npm安裝不成功的情況)

4、打開(kāi)cmd,nvm install v版本號(hào),

5、nvm use 版本號(hào)

6、node -v,npm -v查看node是否安裝成功

安裝好之后的node文件夾截圖:
clipboard.png

如果出現(xiàn)nvm use之后 node版本依然沒(méi)有選中 或者其他等等情況,那就卸載nvm重新安裝繼續(xù)試!

選擇 回答

action 確實(shí)可以做異步操作,盡量多拆分出去吧,不要放到 .vue 里面

孤酒 回答

error_log(var_export($_FILES,true));把整個(gè)數(shù)組輸出到error.log,然后看下它的結(jié)構(gòu)。


竟然還有更新……好吧。你試試用:

<?php
$postdata = file_get_contents("php://input");
error_log(var_export($postdata, true));

看看能不能輸出POST請(qǐng)求體

如果通過(guò)super對(duì)某個(gè)屬性賦值,這時(shí)super就是this

這樣看的話(huà)就好理解了啊,在對(duì)super進(jìn)行某個(gè)屬性賦值時(shí),這個(gè)時(shí)候 super 就是 this,在別的時(shí)候,super 指向的應(yīng)該是父類(lèi),這樣就可以解釋了。

綰青絲 回答
c 語(yǔ)言的 宏 是自動(dòng)根據(jù)值來(lái)確定類(lèi)型的??

宏是不帶類(lèi)型信息的, 只是preprocessor的一個(gè)文本替換的, 與之相對(duì)的c++的模板則帶有類(lèi)型信息.

請(qǐng)問(wèn) 宏 的實(shí)際應(yīng)用價(jià)值是什么??

原理


簡(jiǎn)單的說(shuō), 就是文本替換, 只不過(guò)基于文本替換可以玩出來(lái)些花樣.

實(shí)際應(yīng)用價(jià)值


性能 能省去函數(shù)調(diào)用的開(kāi)銷(xiāo), 實(shí)現(xiàn)真正意義上的inline.

實(shí)現(xiàn)泛型與重載 c是不支持這倆貨的, 一定層面, 宏可以實(shí)現(xiàn)其功能, 很經(jīng)典的一個(gè)例子: #define max(a,b) ((a)<(b)?(b):(a)), 可以傳int, float等等, 你可以理解為支持了重載, 也可以理解為支持了泛型, 雖然很丑陋233. 再舉個(gè)不那么常見(jiàn)的:

#define MAKE_PAIR(T) \
  typedef struct MAKE_PAIR##T{ \
       T first; \
       T second; \
  } ##T##_pair 

 MAKE_PAIR(char);
 MAKE_PAIR(int);
 MAKE_PAIR(float);

這樣就直接定義了多個(gè)類(lèi)型的pair. 也是對(duì)泛型的模擬.

我感覺(jué)他和 變量 的作用是一樣的..,而且相比變量感覺(jué)由于沒(méi)有聲明數(shù)據(jù)類(lèi)型,在使用上更加不方便...

就是不方便呀, 而且不只是缺乏類(lèi)型, 更重要的是它的scope是dynamic scope, 而不是大家所熟知的lexical scope, 前者的name lookup是在調(diào)用處尋找, 而后者則是在定義處. 這有時(shí)候會(huì)造成混亂.

什么時(shí)候可以用?

  • 自己瞎玩時(shí)
  • 確定下來(lái)真的是某個(gè)函數(shù)是性能瓶頸(這種情況其實(shí)很少出現(xiàn))

什么時(shí)候不該用?

能不用的時(shí)候就別用

Update

回復(fù)OP的疑問(wèn): 你給的這兩個(gè)鏈接的說(shuō)法都不對(duì). inline這個(gè)keyword和語(yǔ)義inline本身無(wú)關(guān), 你添加了inline其實(shí)不會(huì)對(duì)編譯器有什么影響. 編譯器有自己的判斷. c的inline是c99開(kāi)始出現(xiàn)的, 貌似是學(xué)c++的. c語(yǔ)言的odr(或者說(shuō)c其實(shí)是沒(méi)有odr的, 這里只是代指那套規(guī)則)我不是很熟悉, 不過(guò)在c++里面inline關(guān)鍵詞的作用就是屏蔽odr檢查. 和inline的語(yǔ)義(內(nèi)聯(lián))沒(méi)有任何關(guān)系. 泛型的話(huà)也別看百度百科, 里面問(wèn)題一大堆. 多搜英文資料. 或者寫(xiě)寫(xiě)c++的模板就知道了. 上面那個(gè)pair應(yīng)該還是很容易看出泛型在c里面的應(yīng)用的. 不只是primitive type, 其實(shí)你自己的結(jié)構(gòu)體也可以這樣很輕松的做出搞出來(lái)pair.

喵小咪 回答

自己把自己坑了。。。
錯(cuò)誤地應(yīng)用了 request包的寫(xiě)法。。
clipboard.png

落殤 回答

提交的按鈕用

<input type="submit">
孤影 回答

對(duì)象確實(shí)是沒(méi)有contains這個(gè)方法啊?你應(yīng)該是用錯(cuò)了.
ie9已經(jīng)算是現(xiàn)代瀏覽器了,不支持的方法用些polyfill庫(kù)

青裙 回答

solrJ的依賴(lài),創(chuàng)建SolrInputDocument對(duì)象,文檔ID,查的字段,solr配置文件要有查詢(xún)字段的配置,比如是否索引,是否分詞,是否存儲(chǔ)。還可以設(shè)置一個(gè)關(guān)鍵字字段,里面包所有的字段。。。好簡(jiǎn)單的,看下API就好

焚音 回答

惡意訪問(wèn),洪水攻擊什么的沒(méi)法禁止
考慮記錄log,將惡意訪問(wèn)的ip設(shè)定為禁止訪問(wèn),也可以考慮直接上傳到阿里云的后臺(tái)防火墻

萢萢糖 回答

composer global require laravel/installer

laravel new projectname

或者 直接

composer create-project laravel/laravel projectname

package demo.nio;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectableChannel;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Set;
import java.util.Iterator;

/**  
 * @ClassName: SelectorDemo  
 * @Description:  
 * @author 
 * @date 2018年1月12日 下午9:06:21  
 *    
 */
public class SelectorDemo implements Runnable{
    public static void main(String[] args) {
        SelectorDemo selectorDemo = new SelectorDemo();
        selectorDemo.run();
    }

    public void run() {
        try {
            //選擇器
            Selector selector = Selector.open();
            //通道
            SocketChannel socketChannel1 = SocketChannel.open();
            socketChannel1.configureBlocking(false);
            SelectionKey key1 = socketChannel1.register(selector, SelectionKey.OP_CONNECT);
            socketChannel1.connect(new InetSocketAddress("127.0.0.1", 9999));
            
            while(true){
                int readyChannels = selector.selectNow();//selectNow()非阻塞,select(timeout)和select()阻塞
                if(readyChannels == 0)
                    continue;
                //selector.wakeup();//第一個(gè)線(xiàn)程調(diào)用select后,需要執(zhí)行此方法,阻塞在select上的線(xiàn)程會(huì)立馬返回。
                Set<?> selectedKeys = selector.selectedKeys();
                Iterator<?> keyIterator = selectedKeys.iterator();
                while(keyIterator.hasNext()){
                    SelectionKey key = (SelectionKey) keyIterator.next();
                    if(key.isAcceptable()){
                        // a connection was accepted by a ServerSocketChannel.
                        ServerSocketChannel socketchannel = (ServerSocketChannel) key.channel();
                    }else if(key.isConnectable()){
                        // a connection was established with a remote server, false.
                        //Now is Connectable(可連接,但是未必已經(jīng)連接完成)
                         try {
                           socketchannel.finishConnect();//如果是非阻塞模式,可能要循環(huán)詢(xún)問(wèn)
                        } catch (Exception e) {}
                        
                        
                        SocketChannel socketchannel = (SocketChannel) key.channel();
                        ByteBuffer buf1 = ByteBuffer.allocate(10000);
                        buf1.put("A word from client!".getBytes());
                        buf1.flip();
                        socketchannel.write(buf1);
                        buf1.clear();
                        
                        ByteBuffer buf2 = ByteBuffer.allocate(10000);
                        socketchannel.read(buf2);
                        buf2.flip();
                        System.out.println(">>>客戶(hù)端接收數(shù)據(jù):"+new String(buf2.array()));
                        buf2.clear();
                    }else if(key.isReadable()){
                        // a channel is ready for reading.
                        SelectableChannel fileChannel = key.channel();
                    }else if(key.isWritable()){
                        // a channel is ready for writing.
                        SelectableChannel fileChannel = key.channel();
                    }
                    keyIterator.remove();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

題主的英文好像不錯(cuò),可以點(diǎn)進(jìn)SocketChannel.finishConnect()方法里面看下注釋

構(gòu)造對(duì)象時(shí)需要傳入3個(gè)參數(shù) new (p1,p2,p3) 具體看下源碼

傻叼 回答

在C++里使用C庫(kù)的函數(shù)時(shí),你加了 extern "C" { } 嗎? 否則就會(huì)鏈接找不到。

墨沫 回答
// 重寫(xiě)默認(rèn)的notAllowedHandler
$container['notAllowedHandler'] = function ()
{
    return function ($req, $res, $allowMethod) {
        return $res->withJson([
            "status" => 0,
            "info" => "請(qǐng)求方法錯(cuò)誤",
            "data" => $allowMethod
        ]);
    };
};