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就妥妥了
有以下幾種思路吧:
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ù)。
因?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ú)力吐槽。
如上圖所示,接口返回的數(shù)據(jù)如下,有超市名稱和經(jīng)緯度
超市大小數(shù)據(jù)獲取不到,只能開(kāi)車去實(shí)地考察了。
這個(gè)的話有以下幾個(gè)想法:
忘了看的哪個(gè)電影了,真正的黑客往往都精通社會(huì)工程學(xué)。
你要改用 Autodesk.Viewing.Private.GuiViewer3D
去創(chuàng)建 Viewer 默認(rèn)的工具列跟 ViewCube 才會(huì)出現(xiàn),或者是在使用 Autodesk.Viewing.Viewer3D
的情境通過(guò)下面的代碼創(chuàng)建 ViewCube
和 Toolbar
// 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.Section
、Autodesk.FirstPerson
, Autodesk.BimWalk
,其大多數(shù)都是編寫在 GuiViewer3D
的代碼內(nèi),請(qǐng)到 viewer3d.js 里查找 GuiViewer3D#createUI()
的執(zhí)行思路。
參考:
服務(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è),那么昵稱就要限制
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
北大青鳥(niǎo)中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過(guò)二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。