先去學(xué)學(xué)json的格式吧,不能用'a'模式一個(gè)一個(gè)寫open('name.json','a'),你追加的方式等于每一行是一個(gè)json,在一起不符合json格式當(dāng)然解析報(bào)錯(cuò)了
import json
def save_name(name):
#print("查無此人,請(qǐng)登記。")
#name = input("\n 請(qǐng)輸入你的名字:") 不要再輸入了,萬一他又輸了一個(gè)已存在的名字,重復(fù)了啊
with open('name.json','w') as file:
json.dump(name,file)
print("你的名字已經(jīng)登記"+str(name[-1]))
return name[-1]
def find_name(fn):
try:
file = open('name.json','r')
except FileNotFoundError:
return save_name([fn])
else:
name = json.load(file)
file.close()
"""for i in name:
if fn == i:
return fn
else: 一次不對(duì)就存名字,后面對(duì)了你不就錯(cuò)了
return save_name()"""
if fn in name:
return fn
else:
name.append(fn)
return save_name(name)
def hello_name():
name = input("\n 請(qǐng)輸入你的名字:")
print("歡迎你"+str(find_name(name)))
hello_name()function f(arr) {
var ret = []
function fi(result, i) {
if (i === -1) {
ret.push(result)
} else {
let items = arr[i]
if (!Array.isArray(items)) {
items = [items]
}
items.forEach(item => {
fi([item,...result], i - 1)
});
}
}
fi([], arr.length - 1)
return ret
}
const arr = [[1,2],3,[4,5,6]];
console.log(f(arr))找到原因了:
是shiro的標(biāo)簽不支持導(dǎo)致的頁面渲染錯(cuò)誤,暫未找到對(duì)應(yīng)的解決辦法
錯(cuò)誤解決辦法如下:
//相當(dāng)于調(diào)用SecurityUtils.setSecurityManager(securityManager)
@Bean
public MethodInvokingFactoryBean methodInvokingFactoryBean(SecurityManager securityManager){
MethodInvokingFactoryBean bean = new MethodInvokingFactoryBean();
bean.setStaticMethod("org.apache.shiro.SecurityUtils.setSecurityManager");
bean.setArguments(securityManager);
return bean;
}1、promotion failure,是在minor gc過程中,survivor的剩余空間不足以容納eden及當(dāng)前在用survivor區(qū)間存活對(duì)象,只能將容納不下的對(duì)象移到年老代(promotion),而此時(shí)年老代滿了無法容納更多對(duì)象,通常伴隨full gc,因而導(dǎo)致的promotion failure。這種情況通常需要增加年輕代大小,盡量讓新生對(duì)象在年輕代的時(shí)候盡量清理掉。
2、concurrent mode failure,主要是由于cms的無法處理浮動(dòng)垃圾(Floating Garbage)引起的。這個(gè)跟cms的機(jī)制有關(guān)。cms的并發(fā)清理階段,用戶線程還在運(yùn)行,因此不斷有新的垃圾產(chǎn)生,而這些垃圾不在這次清理標(biāo)記的范疇里頭,cms無法再本次gc清除掉,這些就是浮動(dòng)垃圾。由于這種機(jī)制,cms年老代回收的閾值不能太高,否則就容易預(yù)留的內(nèi)存空間很可能不夠(因?yàn)楸敬蝕c同時(shí)還有浮動(dòng)垃圾產(chǎn)生),從而導(dǎo)致concurrent mode failure發(fā)生。可以通過-XX:CMSInitiatingOccupancyFraction的值來調(diào)優(yōu)。
關(guān)閉自動(dòng)編譯,需要編譯的時(shí)候使用 Command+F9 快捷鍵
channel本來就是非阻塞的,所以獲取到的并不是完全實(shí)時(shí)的數(shù)據(jù),可能會(huì)有延遲,所以兩次發(fā)送的數(shù)據(jù)服務(wù)端一次接收本身就是正常的。
關(guān)鍵的是,你不應(yīng)該以“幀”來分隔數(shù)據(jù),而應(yīng)該自己約定一種分割方法。比如每一個(gè)數(shù)據(jù)都附帶一個(gè)length,或者以若干個(gè)特殊的字節(jié)來作為分隔符,等。
可以試試使用Spring boot的多環(huán)境切換.在測(cè)試環(huán)境的配置文件加入security.basic.enable=false和management.security.enabled=false關(guān)閉Spring Security的功能.在測(cè)試用例中加入@ActiveProfiles切換成測(cè)試環(huán)境.
Rxjava 完美解決該問題。
直接瀏覽器訪問的話,先登錄再調(diào)試其他接口。如果用其他工具的話,在瀏覽器登錄然后把你那個(gè)token帶上就可以了
Collectors.toMap() 的方法簽名是:* @param <T> the type of the input elements
* @param <K> the output type of the key mapping function
* @param <U> the output type of the value mapping function
* @param keyMapper a mapping function to produce keys
* @param valueMapper a mapping function to produce values
* @param mergeFunction a merge function, used to resolve collisions between
* values associated with the same key, as supplied
* to {@link Map#merge(Object, Object, BiFunction)}
public static <T, K, U>
Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper,
BinaryOperator<U> mergeFunction)
簡單來說,keyMapper 用來根據(jù) stream 的內(nèi)容生成 HashMap 的鍵,valueMapper 用來根據(jù) stream 的內(nèi)容生成 HashMap 的值,mergeFunction 是用來處理 某兩個(gè)值屬于同一個(gè) key 時(shí)使用哪個(gè)值 的。
PositionContent::getName 是 Java 8 里用來表示 lambda 里 eta 轉(zhuǎn)換概念的操作符,這個(gè)你可以去看看 Java 8 函數(shù)式編程 的相關(guān)文章。Function.identity() 注釋里有講這個(gè)是干嘛的:Returns a function that always returns its input argument.返回傳入的參數(shù)
(key1, key2) -> key2 這個(gè)還是 lambda 表達(dá)式,就是剛才那個(gè) mergeFunction,這里的作用是使用新的值覆蓋舊的值。List<PositionContent> list 里的每個(gè)元素映射到一個(gè) key 為 PositionContent 實(shí)例的 name ,value 為當(dāng)前元素的 HashMap。
這個(gè)點(diǎn)在 javascript 里叫 鏈?zhǔn)秸{(diào)用,簡單來說就是一個(gè)類的方法返回當(dāng)前實(shí)例,這樣就可以一直 .func1().func2() 這樣下去;
具體到這里的例子,在 Java 里這個(gè)叫 構(gòu)造器模式,你可以去了解一下。
No module named 'apachetest'
這都寫得很清楚啦,沒有apachetest模塊
用問答寫文章?!
你打印一下value的類型就知道了
向 map 這樣的高級(jí)遍歷函數(shù),內(nèi)部也是用 for 去循環(huán)的。
具體指哪個(gè)為位置的緩存?
第一步,寫一個(gè)類實(shí)現(xiàn)Principal
例如:
public class WebsocketUserVO implements Principal {
private String id;
public WebsocketUserVO(String id) {
this.id = id;
}
@Override
public String getName() {
return id;
}
}
第二步,在創(chuàng)建連接的時(shí)候,設(shè)置用戶
public class WebsocketUserInterceptor extends ChannelInterceptorAdapter {
@Autowired
private WebSocketServ webSocketServ;
@Autowired
private SimpUserRegistry userRegistry;
@SuppressWarnings("rawtypes")
@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
if (StompCommand.CONNECT.equals(accessor.getCommand())) {
System.out.println("連接success");
Object raw = message.getHeaders().get(SimpMessageHeaderAccessor.NATIVE_HEADERS);
if (raw instanceof Map) {
Object name = ((Map) raw).get("name");
if (name instanceof LinkedList) {
String id = ((LinkedList) name).get(0).toString();
//設(shè)置當(dāng)前訪問器的認(rèn)證用戶
accessor.setUser(new WebsocketUserVO(id));
webSocketServ.pushOnlineUser(id);
}
}
} else if (StompCommand.DISCONNECT.equals(accessor.getCommand())) {
//點(diǎn)擊斷開連接,這里會(huì)執(zhí)行兩次,第二次執(zhí)行的時(shí)候,message.getHeaders.size()=5,第一次是6。直接關(guān)閉瀏覽器,只會(huì)執(zhí)行一次,size是5。
System.out.println("斷開連接");
WebsocketUserVO vo = (WebsocketUserVO) message.getHeaders().get(SimpMessageHeaderAccessor.USER_HEADER);
// 如果同時(shí)發(fā)生兩個(gè)連接,只有都斷開才能叫做不在線
if (message.getHeaders().size() == 5&&StringUtils.isBlank(userRegistry.getUser(vo.getName()))) {
webSocketServ.removeOnlineUser(vo.getName());
}
}
return message;
}
}
第三步,發(fā)送消息
messagingTemplate.convertAndSendToUser(userId,url, MVCUtil.success(object));
這里的userId,就是WebsocketUserVO里面getName返回的值
有很多好東西可以做數(shù)據(jù)庫相關(guān)的操作。
另外,main方法的args是可以傳參數(shù)的。你可以把參數(shù)傳入,然后用最笨的辦法把參數(shù)和SQL用String.format組合起來。
比如通過args傳入的參數(shù)是ABC,代碼可以是如下這樣寫:
String.format("select * from table where name=%s and age=%s and sex=%s", A, B, C)columns里還有個(gè)render函數(shù),可以自定義顯示方式,多看文檔
代碼重構(gòu)是在源碼級(jí)別的改動(dòng),不會(huì)多出什么依賴,你要是理解了代碼,就放心的重構(gòu)吧,先把原先的代碼備份好,以防萬一 ;)
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(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ū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。