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

jpress
http://JPress.io
當(dāng)然,可以在網(wǎng)易蜂巢找到docker鏡像,一鍵安裝

尛曖昧 回答

如果用匿名代理的話,你肯定拿不到攻擊者真實(shí)IP的,我覺(jué)得用匿名代理應(yīng)該是黑客的基本素質(zhì)吧。

離殤 回答

nginx 可以由一個(gè)特殊的 X-Accel-Redirect 頭部控制資源訪問(wèn)。

所以可以直接 proxy_pass 到 upstream, upstream 根據(jù)請(qǐng)求動(dòng)態(tài)生成文件路徑,添加到X-Accel-Redirect: /path/to/file 頭部,nginx取回上游返回后,內(nèi)部跳轉(zhuǎn)/path/to/file, 這是一個(gè)內(nèi)部跳轉(zhuǎn),外部不可見(jiàn)的,你還可以添加 internal 指令控制該文件不可直接訪問(wèn)。

毀憶 回答

我看了下,感覺(jué)是一個(gè)懶加載的方式~

如果是的話用 lazyload.js 試試~

value一般是指表單的元素的值,比如input,.的話是獲取對(duì)象的一種方式,比如

var abc={name:'花非花'}
abc.name ==>指向的就是"花非花"
司令 回答

return 是條語(yǔ)句,不能直接打印

function x(){
  return 2
} 
console.log(x())
陌離殤 回答
1)為何CNAME不能添加@,A記錄可以添加@解析?

這要問(wèn)你的 DNS 服務(wù)商,按你說(shuō)的,你的配置是沒(méi)問(wèn)題的。

2)目前使用的A記錄或者CNAME幾率的*泛解析,會(huì)不會(huì)影響到MX解析?

不會(huì)。你的 @ 的 MX 已經(jīng)到 qq.com 那邊去了。

命于你 回答

HTML 處理就不會(huì)帶名字空間:

# -*- coding: utf-8 -*-

from lxml import etree

content = '''
<?xml version='1.0' encoding='utf-8'?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <meta name="calibre:cover" content="true"/>
        <title>Cover</title>
        <style type="text/css" title="override_css">
            @page {padding: 0pt; margin:0pt}
            body { text-align: center; padding:0pt; margin: 0pt; }
        </style>
    </head>
    <body>
        <div>
            <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100%" height="100%" viewBox="0 0 200 266" preserveAspectRatio="none">
                <image width="200" height="266" xlink:href="cover1.jpeg"/>
            </svg>
        </div>
    </body>
</html>
'''

print etree.tostring(etree.HTML(content).xpath('//body/*')[0])
爛人 回答

如果不同業(yè)務(wù)已經(jīng)設(shè)計(jì)成通過(guò)請(qǐng)求參數(shù)來(lái)控制的話,建議使用shiro的自定義權(quán)限控制,解析對(duì)應(yīng)的業(yè)務(wù)代碼,進(jìn)行權(quán)限控制。這種方法比較靈活,即可寫死權(quán)限規(guī)則,也可以配合數(shù)據(jù)庫(kù)等做成動(dòng)態(tài)規(guī)則控制。

攔截所有請(qǐng)求, 對(duì)應(yīng)shiro配置: /**=perms;
繼承org.apache.shiro.authz.Permission,重寫implies方法,進(jìn)行權(quán)限校驗(yàn)。

幼梔 回答

@donglegend 你好,謝謝,基本上可以,但是這種方式感覺(jué)有缺陷,如下:

//假設(shè)我想在1s中完成動(dòng)畫(滑動(dòng)250px)
//那么我需要函數(shù)執(zhí)行多少次呢?
//很顯然,如果我想動(dòng)畫看上去越順滑,那必須每次移動(dòng)的像素就越小,所以函數(shù)執(zhí)行越頻繁;
//相反,如果函數(shù)間隔時(shí)間越大,動(dòng)畫會(huì)非常難看(一次移動(dòng)的像素太多)

問(wèn)題:假設(shè)我滑動(dòng)的距離足夠大(1000px),執(zhí)行的時(shí)間足夠短(0.3s),看上去動(dòng)畫要足夠順滑(每次移動(dòng)5px),那么函數(shù)需要多長(zhǎng)時(shí)間執(zhí)行一次呢? 。0.3 / (1000 / 5) ,0.3s要執(zhí)行200次函數(shù),每 0.0015s 執(zhí)行一次,這么頻繁的執(zhí)行函數(shù)到底有沒(méi)有問(wèn)題呢?如果每次只能移動(dòng)1px呢?

再者就是這些計(jì)算麻煩,不如css3動(dòng)畫來(lái)得方便。

我用css實(shí)現(xiàn)的動(dòng)畫和js鉤子實(shí)現(xiàn)的作比較,都是0.3s,總感覺(jué)css的動(dòng)畫要快,要順滑。

<template>
    <transition
        v-on:before-enter="beforeEnter"
        v-on:enter="enter"
        v-on:leave="leave"
    >
        <slot></slot>
    </transition>
</template>
<script>
export default {
    name: 'animation',
    data() {
        return {
            enterTimer: null,
            leaveTimer: null
        }
    },
    methods: {
        beforeEnter: function(el) {
            //設(shè)置滑塊的初始位置(滑塊的寬度)
            el.style.bottom = '-250px'
        },
        enter: function(el, done) {
            clearInterval(this.leaveTimer)
            let _v = 0
            //假設(shè)我想在1s中完成動(dòng)畫(滑動(dòng)250px)
            //那么我需要函數(shù)執(zhí)行多少次呢?
            //很顯然,如果我想動(dòng)畫看上去越順滑,那必須每次移動(dòng)的像素就越小,所以函數(shù)執(zhí)行越頻繁;
            //相反,如果函數(shù)間隔時(shí)間越大,動(dòng)畫會(huì)非常難看(一次移動(dòng)的像素太多)
            this.enterTimer = setInterval(() => {
                if (_v < 250) {
                    _v += 2.5
                } else {
                    _v = 250
                    clearInterval(this.enterTimer)
                    done()
                }
                el.style.opacity = _v
                el.style.transform = `translateY(-${_v}px)`
            }, 3)
        },
        leave: function(el, done) {
            clearInterval(this.enterTimer)
            let _v = 250
            this.leaveTimer = setInterval(() => {
                if (_v > 0) {
                    _v -= 2.5
                } else {
                    _v = 0
                    clearInterval(this.leaveTimer)
                    done()
                }
                el.style.opacity = _v
                el.style.transform = `translateY(-${_v}px)`
            }, 3)
        }
    }
}
</script>

之前一直以為官方價(jià)紹了兩種方式是等價(jià)的,并且兩種方式對(duì)應(yīng)的demo不是等效的,感覺(jué)這是巨大的一個(gè)坑

不將就 回答

查看了源碼發(fā)現(xiàn)pipe其實(shí)是做了上一個(gè)流結(jié)束會(huì)觸發(fā)下一個(gè)流結(jié)束的操作。

var endFn = doEnd ? onend : cleanup;
    if (state.endEmitted)
        process.nextTick(endFn);
    else
        src.once('end', endFn);

    dest.on('unpipe', onunpipe);

    function onunpipe(readable) {
        debug('onunpipe');
        if (readable === src) {
            cleanup();
        }
    }

    function onend() {
        debug('onend');
        dest.end();
    }
    function cleanup() {
        debug('cleanup');
        // cleanup event handlers once the pipe is broken
        dest.removeListener('close', onclose);
        dest.removeListener('finish', onfinish);
        dest.removeListener('drain', ondrain);
        dest.removeListener('error', onerror);
        dest.removeListener('unpipe', onunpipe);
        src.removeListener('end', onend);
        src.removeListener('end', cleanup);
        src.removeListener('data', ondata);

        cleanedUp = true;

        // if the reader is waiting for a drain event from this
        // specific writer, then it would cause it to never start
        // flowing again.
        // So, if this is awaiting a drain, then we just call it now.
        // If we don't know, then assume that we are waiting for one.
        if (state.awaitDrain &&
            (!dest._writableState || dest._writableState.needDrain))
            ondrain();
    }

但是不知道duplex抽什么風(fēng)了。然后改用transiform就妥妥了

赱丅呿 回答

首先第一個(gè)獲取你住的地方為中心,半徑3公里內(nèi)最大的超市。

有以下幾種思路吧:

1. 使用爬蟲,抓取數(shù)據(jù)篩選,計(jì)算距離

可以抓取高德或其他數(shù)據(jù)源(超市大小可能要整合其他網(wǎng)站資源獲?。?,抓取后的格式如下:

經(jīng)度 維度 超市名 超市大?。ㄆ椒矫祝?/th>
116.407243 39.822295 超級(jí)大超市 500
114.454612 40.123255 小超市 100
... ... ... ...
想獲取自己的經(jīng)緯度可以用手機(jī)查下,一般民用GPS誤差10m內(nèi)。

計(jì)算出邊界經(jīng)緯度,篩選出可能符合條件的超市數(shù)據(jù)。

clipboard.png

因?yàn)橹挥?公里,針對(duì)這么大的地球來(lái)講真的很小,簡(jiǎn)化為一個(gè)平面,計(jì)算與當(dāng)前位置的距離與超市的大小,獲取滿足條件最大的。

上面只是簡(jiǎn)略計(jì)算,完整球面模型計(jì)算距離,請(qǐng)參考美團(tuán)的這篇文章:地理空間距離優(yōu)化

2. 直接使用高德或其他地圖接口

公司網(wǎng)絡(luò)對(duì)上傳文件大小有限制,所以我圖片都截的很小,無(wú)力吐槽。

clipboard.png

如上圖所示,接口返回的數(shù)據(jù)如下,有超市名稱和經(jīng)緯度

clipboard.png

超市大小數(shù)據(jù)獲取不到,只能開(kāi)車去實(shí)地考察了。

請(qǐng)用有效方法計(jì)算出這個(gè)超市在,3月14日,星期三,晚23:59,貨架上還有多少瓶330毫升的紅色聽(tīng)裝可口可樂(lè)?

這個(gè)的話有以下幾個(gè)想法:

  1. 如果系統(tǒng)對(duì)接了,那方便,直接通過(guò)接口獲取。
  2. 攻破超市的系統(tǒng),如果有那個(gè)能力。
  3. 通過(guò)偽裝超市wifi釣魚,看能不能截取到超市系統(tǒng)的賬號(hào)密碼(如果是https稍微麻煩點(diǎn))。
  4. 和超市說(shuō)自己在那時(shí)候丟東西了(最好是在飲料機(jī)旁邊),請(qǐng)求查看那個(gè)時(shí)間段的監(jiān)控錄像。
忘了看的哪個(gè)電影了,真正的黑客往往都精通社會(huì)工程學(xué)。

你要改用 Autodesk.Viewing.Private.GuiViewer3D 去創(chuàng)建 Viewer 默認(rèn)的工具列跟 ViewCube 才會(huì)出現(xiàn),或者是在使用 Autodesk.Viewing.Viewer3D 的情境通過(guò)下面的代碼創(chuàng)建 ViewCubeToolbar

// ViewCube
const viewCubeUi = new Autodesk.Viewing.Private.ViewCubeUi( viewer );
viewer.viewCubeUi = viewCubeUi;

viewCubeUi.create();

// Toolbar
const toolbar = new Autodesk.Viewing.UI.ToolBar( 'my-awesome-toolbar' );
viewer.toolbar = toolbar;

// Button
var button1 = new Autodesk.Viewing.UI.Button( 'my-orbit-button' );
button1.onClick = function(e) {
    var state = button1.getState();
    if( state === Autodesk.Viewing.UI.Button.State.INACTIVE ) {
        viewer.setActiveNavigationTool( 'orbit' );
        button1.setState(Autodesk.Viewing.UI.Button.State.ACTIVE);
    } else if( state === Autodesk.Viewing.UI.Button.State.ACTIVE ) {
        viewer.setActiveNavigationTool();
        button1.setState( Autodesk.Viewing.UI.Button.State.INACTIVE );
    }
};
button1.addClass( 'my-orbit-button' );
button1.setToolTip( 'Orbit' );

// SubToolbar
const subToolbar = new Autodesk.Viewing.UI.ControlGroup( 'my-custom-view-toolbar' );
subToolbar.addControl( button1 );

toolbar.addControl( subToolbar );

默認(rèn)工具僅少數(shù)是通過(guò)擴(kuò)展加載例如 Autodesk.SectionAutodesk.FirstPerson, Autodesk.BimWalk,其大多數(shù)都是編寫在 GuiViewer3D 的代碼內(nèi),請(qǐng)到 viewer3d.js 里查找 GuiViewer3D#createUI() 的執(zhí)行思路。

參考:

網(wǎng)妓 回答

服務(wù)端加上一個(gè)允許跨域的響應(yīng)頭就好了

澐染 回答

1.這么寫肯定是會(huì)不對(duì)的,會(huì)崩潰。稍微寫個(gè)小測(cè)試,確實(shí)會(huì)奔潰。

Book *book = [[Book alloc] init];

{    //從作用域出去后store就會(huì)釋放
    Store *store = [[Store alloc] init];
    book.delegate = store;
}
[book test];
.....
-(void)test{
    
    NSLog(@"book test");
    
    if ([self.delegate respondsToSelector:@selector(testDelegate)]) {
        [self.delegate testDelegate];
    }
}

2.為什么沒(méi)出現(xiàn)奔潰?可能是delegate很少優(yōu)先于self釋放,可能delegate因?yàn)槠渌驔](méi)釋放(單例或者引用循環(huán)等)。一般來(lái)說(shuō)被委托者應(yīng)該在更深的層級(jí),會(huì)先釋放,比如界面A->B->C,這樣情況,肯定是C作為B的委托,C會(huì)先于B釋放。這個(gè)問(wèn)題你逐個(gè)的檢查一下為什么沒(méi)有奔潰。主要看:是否delegate釋放了還回去調(diào)用self.delegate之類的。

近義詞 回答

9點(diǎn)是會(huì)運(yùn)行的,這個(gè)每隔3小時(shí)是從24小時(shí)中的0點(diǎn)算起的。 0,3,6,9,12,。。。這樣類推。
這里有例子:
linux的crontab中每隔一段時(shí)間是以什么為準(zhǔn)

故人嘆 回答

columns中設(shè)置widht或者className

情皺 回答

可重入鎖不是這么用的,一般是在面向?qū)ο笾惺褂?,比?/p>

class A:
   def f1(self):
       mutex.acquire()
       try:
           #do something
       finally:
           mutex.release()
   def f2(self):
       mutex.acquire()
       try:
           #do something
       finally:
           mutex.release()

def run1(obj):
    obj.f1()
    obj.f2()
    
def run2(obj):
    obj.f2()
    obj.f1()

obj1 = A()
t1 = threading.Thread(target=run1, args=(obj1, ))
t2 = threading.Thread(target=run2, args=(obj1, ))
t1.start()
t2.start()

調(diào)用順序不同,而且都需要同步的時(shí)候,如果不用遞歸鎖,會(huì)死鎖。如果f1或f2不加鎖,數(shù)據(jù)不同步,報(bào)錯(cuò)

還吻 回答

QQ號(hào):5到10位數(shù)字
手機(jī)號(hào):1開(kāi)頭的11位數(shù)字,還可以通過(guò)前三位號(hào)段限制
電子郵件:必帶@的及一個(gè).加后綴結(jié)尾的
昵稱:限制和其他不同
身份證:肯定是15或18位數(shù)字 最后也為可以是x 羅列規(guī)則,再進(jìn)行分析,簡(jiǎn)單先判斷,你一個(gè)字段匹配五個(gè),那么昵稱就要限制