檢查spring-context-5.0.5.RELEASE這個jar有沒引入
方法一:小程序沒有很好的監(jiān)聽方法,我的做法是增加一個啟動頁,在啟動頁面里調(diào)用加載需要的初始化數(shù)據(jù),確保所有數(shù)據(jù)都被加載。
方法二:按你的需求起始沒必要做監(jiān)聽這么麻煩,你直接通過函數(shù)回調(diào)或者promise來處理,在app.js中增加獲取數(shù)據(jù)的方法,如getUserInfo,將返回結(jié)果通過回調(diào)傳回來,在方法中判斷是否有緩存,有則直接從存儲中取數(shù)據(jù)返回即可。這樣你的頁面在顯示前會確保數(shù)據(jù)被拿到。
邊插入邊排序:
* 每次插入的復雜度是O(log n)
* 總復雜度自然就是O(nlog n)
先插入后排序:
* 不用說了...都知道O(nlogn)
所以從算法角度的話是一樣的。
不過邊插入邊排序的話一般肯定不會傻傻的單純用一個普通鏈表。如果考慮構(gòu)建一個堆之類的數(shù)據(jù)結(jié)構(gòu),構(gòu)建的復雜度是有可能到O(n)的
找你們后端,如果是做前端分頁讓他返回所有數(shù)據(jù),也很可能是后端分頁而你們沒對清楚接口
response.data.data.list.forEach(function(item){
...
console.log(that.total);//打印了10次12 意思是list長度本來就是10
});
list.forEach里面push,如果你只是想格式化數(shù)組用map。更不要在forEach里重復的執(zhí)行無用的 that.total = ...和 that.tableData = ...,10次循環(huán)前面9次都是無用的賦值。obj.method()是怎么調(diào)用?是不是得先找到obj的內(nèi)存地址,獲取obj的類型(或者是其他什么能識別的東西),然后找到method的偏移地址,調(diào)用method。而當obj是null的時候,連method都找不到,怎么會去在method里拋出異常。
多參考參考別人的博客吧 https://blog.csdn.net/qq_3161...
PS:如果用興趣了解底層,可以嘗試把java轉(zhuǎn)成匯編,看看具體是如何實現(xiàn)的
use Event\Event;
use Event\Select;
$pid_list = [];
$parent_pid = posix_getpid();
for ($i = 0; $i < 4; ++$i)
{
$pair = stream_socket_pair(STREAM_PF_UNIX , STREAM_SOCK_STREAM , STREAM_IPPROTO_IP);
$pid = pcntl_fork();
if ($pid < 0) {
throw new Exception("創(chuàng)建子進程失敗");
} else if ($pid > 0) {
// 父進程
fclose($pair[0]);
$child = $pair[1];
fwrite($child , "父進程問候 " . posix_getpid());
Select::addIo($child , Event::READ , function($ctrl , $socket , $child) use($parent_pid){
$msg = fread($socket , 65535);
echo "父進程領(lǐng)域!父進程 {$parent_pid} 當前執(zhí)行進程 " . posix_getpid() . " 消息:{$msg}" . PHP_EOL;
} , $child);
} else {
// 子進程
fclose($pair[1]);
$parent = $pair[0];
fwrite($parent , "子進程問候 " . posix_getpid());
Select::addIo($parent , Event::READ , function($ctrl , $socket , $parent) use($parent_pid){
$msg = fread($socket , 65535);
echo "子進程領(lǐng)域!子進程 " . posix_getpid() . " 當前執(zhí)行進程 " . posix_getpid() . " 消息:{$msg}\n";
} , $parent);
}
}
產(chǎn)生的進程信息:
父進程:32140
子進程:32141 32142 32143 32144
坑人的結(jié)果:
父進程領(lǐng)域!父進程 32140 當前執(zhí)行進程 32142 消息 子進程問候 32141
父進程領(lǐng)域!父進程 32140 當前執(zhí)行進程 32143 消息 子進程問候 32142
父進程領(lǐng)域!父進程 32140 當前執(zhí)行進程 32144 消息 子進程問候 32143
父進程領(lǐng)域!父進程 32140 當前執(zhí)行進程 32140 消息 子進程問候 32144
子進程領(lǐng)域!子進程 32141 當前執(zhí)行進程 32141 消息 父進程問候 32140
子進程領(lǐng)域!子進程 32142 當前執(zhí)行進程 32142 消息 父進程問候 32140
子進程領(lǐng)域!子進程 32143 當前執(zhí)行進程 32143 消息 父進程問候 32140
子進程領(lǐng)域!子進程 32144 當前執(zhí)行進程 32144 消息 父進程問候 32140
這得仔細分析 for 循環(huán)!
Event::$events 添加子進程監(jiān)聽事件,子進程平行執(zhí)行。對產(chǎn)生的第一個子進程來說, Event::$events 為空,所以沒有拷貝到父進程的事件。Event::$events 再次添加監(jiān)聽子進程事件,此時,對產(chǎn)生的第二個子進程來說,Event::$events 存在一個事件!從父進程拷貝了一個事件。Event::$events 再次添加監(jiān)聽子進程事件,此時,對產(chǎn)生的三個子進程來說, Event::$events 存在兩個事件!從父進程拷貝了兩個事件。Event::$evnets 添加事件,此時,相對產(chǎn)生的第四個子進程來說,Event::$events 存在三個事件,從父進程拷貝了三個事件。由上可知,子進程實際也在監(jiān)聽從父進程拷貝的事件,如果事件觸發(fā),那么監(jiān)聽該事件的父子進程實際上都會觸發(fā)。從而出現(xiàn)了令人郁悶的:子進程亂入到了父進程的領(lǐng)域。
在子進程中,把從父進程拷貝的事件銷毀即可。
for ($i = 0; $i < 4; ++$i)
{
$pid = pcntl_fork();
if ($pid < 0) {
throw new Exception("創(chuàng)建子進程失敗");
} else if ($pid > 0) {
// 父進程
Select::addIo( .... );
// ...添加相關(guān)事件
} else {
// 子進程
// 銷毀從父進程拷貝的事件
Select::clear();
// ....做些什么
}
}對于很深層的循環(huán)來說,使用break跳出更容易理解。但是能不用的就不要用。所以書上才說“避免使用”而不是“禁止使用”。像例子里的兩層的就沒必要用這個,可以抽象出來一個searchInMatrix的方法來做
org.springframework.webflow.definition.registry.NoSuchFlowDefinitionException: No flow definition 'logout' found
你這是該什么東西了吧?把logout webflow流改的找不到了。
不寫模塊名,默認當前模塊。
不寫控制器,默認當前控制器。
說一個簡單的辦法:在公司內(nèi)部注冊一個域名,搭一個 http 服務,數(shù)據(jù)存在是 mysql 數(shù)據(jù)庫里。每個項目實例定期將統(tǒng)計信息匯報到這個 http 服務。再寫一個查詢頁面,從 mysql 里查出數(shù)據(jù)并展示。
電腦開wifi熱點,手機連電腦熱點,然后用wireshark抓手機連的網(wǎng)卡
你要有b的formid才行
Digest翻譯過來是摘要,不是加密. 既然是摘要,也就不能解密的, 就象你不能用論文摘要還原整個論文一樣.
摘要的作用不是加密, 而是防篡改. 至于很多摘要算法用于密碼變形,則是完全的另一回事,不要看成是加密.
// 假設(shè)rows有100條數(shù)據(jù),每行3個select
首先這句話就很值得優(yōu)化,為什么會有100行,實際業(yè)務當中必然是會做分頁或者懶加載處理的,所以不會存在100行如此之多的數(shù)據(jù)。
再者,實際當中會遇到的應用場景是,每個select他們需要渲染的數(shù)組是從不同的數(shù)據(jù)字典當中獲取的。那么就盡量一次請求獲取多個select數(shù)據(jù),切忌發(fā)送多次請求,從http的角度進行優(yōu)化,暫時寫這兩個。。。開會去了
啊哈哈哈哈哈哈哈哈,我解決了,感謝知乎的答友提醒我看安裝包里的 INSTALL 文件,里面很詳細,雖然是全英文,但是我眼神好,看到一句 ‘make update’當時就想,我擦,還有這個操作,即使沒理解上下文,但是先試試吧,然后重新編譯了一次openssl:
./config shared --prefix=/usr/local/openssl (這一句我其實用過幾回了,都沒有效果)
make
make update (沒想到居然不是用make install?。?/p>
//以下是編譯openssh的結(jié)果,終于識別我想裝的版本啦?。?!
checking OpenSSL header version... 100020cf (OpenSSL 1.0.2l 25 May 2017)
checking OpenSSL library version... 100020cf (OpenSSL 1.0.2l 25 May 2017)
checking whether OpenSSL's headers match the library... yes
checking if programs using OpenSSL functions will link... yes
....(此處省略)
OpenSSH has been configured with the following options:
User binaries: /usr/local/openssh/bin
System binaries: /usr/local/openssh/sbin
Configuration files: /etc/ssh
Askpass program: /usr/local/openssh/libexec/ssh-askpass
Manual pages: /usr/share/man/manX
PID file: /var/run
Privilege separation chroot path: /var/empty
sshd default user PATH: /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/openssh/bin
Manpage format: doc
PAM support: yes
OSF SIA support: no
KerberosV support: no
SELinux support: no
Smartcard support:
S/KEY support: no
MD5 password support: yes
libedit support: no
libldns support: no
Solaris process contract support: no
Solaris project support: no
Solaris privilege support: no
IP address in $DISPLAY hack: no
Translate v4 in v6 hack: yes
BSD Auth support: no
Random number source: OpenSSL internal ONLY
Privsep sandbox style: seccomp_filter
Host: x86_64-pc-linux-gnu
Compiler: gcc
Compiler flags: -g -O2 -pipe -Wall -Wpointer-arith -Wuninitialized -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign -Wno-unused-result -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset -fstack-protector-strong -fPIE
Preprocessor flags: -I/usr/local/openssl/include -I/usr/local/zlib/include -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -D_DEFAULT_SOURCE
Linker flags: -L/usr/local/openssl/lib -L/usr/local/zlib -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -fstack-protector-strong -pie
Libraries: -lcrypto -ldl -lutil -lz -lcrypt -lresolv
+for sshd: -lpam
PAM is enabled. You may need to install a PAM control file
for sshd, otherwise password authentication may fail.
Example PAM control files can be found in the contrib/
subdirectory針對錯誤異常,你可以定義不同的項目自定義異常,類似AOP校驗異常,Token校驗異常,項目全局異常等
通過Handler進行捕獲,并返回對應格式要求的數(shù)據(jù),
如下代碼 我定義了一個全局、一個校驗異常
@Getter
public class SbException extends RuntimeException {
private Integer code;
public SbException(ResultEnum resultEnum){
super(resultEnum.getMessage());
this.code = resultEnum.getCode();
}
public SbException(Integer code, String message){
super(message);
this.code = code;
}
}
public class SbAuthorizeException extends RuntimeException {
}
接著定義handler
@ControllerAdvice
public class SbExceptionHandler {
@Autowired
private ProjectUrlConfig projectUrlConfig;
//攔截登錄異常
@ExceptionHandler(value = SbAuthorizeException.class)
@ResponseStatus(HttpStatus.FORBIDDEN)
public ModelAndView handlerAuthorizeException(){
return new ModelAndView("redirect:"
.concat(projectUrlConfig.getWechatOpenAuthorize())
.concat("/sb/wechat/qrAuthorize")
.concat("?returnUrl=")
.concat(projectUrlConfig.getSb())
.concat("/sb/seller/login"));
}
//全局異常
@ExceptionHandler(value = SbException.class)
@ResponseBody
public ResultVO handlerSbException(SbException e){
return ResultVOUtil.error(e.getCode(),e.getMessage());
}
// Http狀態(tài)碼異常返回
@ExceptionHandler(value = ResponseBankException.class)
@ResponseStatus(HttpStatus.FORBIDDEN)//403
public void handleResponseBankException(){
}
//未知系統(tǒng)異常
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResultVO handlerException(Exception e){
return ResultVOUtil.error(666,e.getMessage());
}
}
這樣你只需要在對應的地方或業(yè)務執(zhí)行錯誤時拋出對應的異常即可
const str="1232{按鈕1}{按鈕2}765432";
const result=str.split(/(?=\{)|(?<=})/g);
//?["1232", "{按鈕1}", "{按鈕2}", "765432"]
然后把數(shù)字字符串轉(zhuǎn)成數(shù)字。
result.map(str=>{let num=parseInt(str); if(num)return num; return str;});
使用了向前匹配和向后匹配,看這篇
可以用函數(shù)處理,逐個字符串進行判斷。
最好自己嘗試實現(xiàn)以下這個函數(shù)...
const str = "1232{按鈕1}{按鈕2}765432";
function handleStr(str) {
const result = [];
//表示是否在處理花括號內(nèi)的字符
let inBraceNow = false;
for (let i = 0; i < str.length; i++) {
const currentChar = str[i];
if (inBraceNow) {
result[result.length - 1] += currentChar;
if (currentChar == "}") {
inBraceNow = false;
}
} else {
//遇到"{"開始進入花括號處理階段...
if (currentChar == "{") {
result.push("{");
inBraceNow = true;
} else {
// result數(shù)組為空時,需要初始化
//如果數(shù)組最后一個不能轉(zhuǎn)為數(shù)字,說明是剛進入數(shù)字處理階段,需要傳入一個0
if (result.length == 0||(!+result[result.length-1])) {
result.push(0);
}
result[result.length - 1] =10*result[result.length - 1]+(+currentChar);
}
}
}
return result;
}
console.log(handleStr(str));
--javascript-delay 1000
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓領(lǐng)域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。