原创 產品經理系列-禁術-爭論

爭論是最沒用且費勁的 用爭論描述,可能還是一個比較委婉的形容,實際可能會有更瘋狂的事件發生。爭論的雙方,向執己見。 產品經理的職責範圍內,接觸的人員很多。老闆、研發、交互、視覺、測試、銷售等。日常最多見的就是產品與研發爭論。 在一個項目中,

原创 產品經理系統-祕術-快速失敗原則

產品設計順序流程 一般在設計功能時,會有一個順序的流程。 例如設計一個搜索功能,需要有一個搜索輸入框,一個搜索按鈕,還有搜索列表。搜索的基本功能點就是這些了,後期可以再計劃加一個搜索的漸進提示框,視覺和交互慢慢細化。 這就算設計結束了嗎??

原创 產品經理系列-禁術-玩概念

概念與產品 所謂概念,可以指創意、點子等,新奇的事物。沒有實際的物體或軟體。 舉幾個例子, 概念車,車企會發布一些未來科技感很強的概念車,不會造實車。 共享,近年比較流行的概念。但實際做的好的行業,不多。 曾經直播也只是概念。 賈躍亭的

原创 Log4j輸出日誌沒有堆棧解決

問題 logger.error("xxx error",exception) 正常的日誌輸出 ,在生產環境中,時常會沒有異常堆棧輸出 。 java.lang.NullPointerException 這真的是讓人頭大, 這就是降維打擊。

原创 Java,List操作技巧

Java List 操作技巧 去重 藉助Set去重 , 效率要好一些 , 算是以空間換時間 List ori = Arrays.asList(2,1,4,5,3,2,1); Set unique = new HashSet(ori); Li

原创 Calendar.HOUR 和 Calendar.HOUR_OF_DAY

區別 /** * Field number for <code>get</code> and <code>set</code> indicating the * hour of the morning or afternoo

原创 神奇的【時間】問題

偶現的問題 系統當前有一個會員到期提醒的功能。功能做的比較 low, 臨近到期 7 天提醒一次,3 天提醒一次。 只在用戶那天第一次登錄的時候提醒一下。 但是偶爾會有反饋說少一次提醒,要麼7天沒提醒,要麼3天的沒提醒。 反饋完,第二天 測試

原创 shell 腳本複習

目標 寫個測試腳本,重啓50次 , 每次重啓後執行一些命令,保存到文本,然後再次重啓 。簡單腳本, 直接 shell 走一波。 思路 每次輸出一波文本 , 則每次用一個目錄來保存這些文本 重啓後直接執行命令 , 那麼需要在 rc.loca

原创 線上服務器 , 簡單的清除日誌腳本

新應用採用了新的日誌目錄 , 運維還不支持 , 所以只能自己手動加腳本了. 日誌格式: 不同目錄不同的日誌文件 . app/ 下是應用日誌 , sql/ 下是數據庫日誌 , exp/ 下是異常日誌 . 每個目錄下的日誌文件名格式爲: xxx

原创 神奇在 Double 轉換異常 input is infinite or NaN

異常 線上收到告警, 有以下異常 java.lang.ArithmeticException: input is infinite or NaN at com.google.common.math.DoubleMath.ro

原创 Java正則多次匹配和多次組匹配

關於正則表達式 , 可以學習下這篇介紹 : 正則表達式 對於多次匹配, 正則表達式就需要講究些技巧了. 替換 單文的多次匹配 有以下幾種方式 , 把a全匹配替換 替換 a "aab".replaceAll("a{1}", "x"); //x

原创 [轉]後端開發如何設計數據庫

設計傳統系統表結構(Java開發) 以前經常能夠看到,數據庫範式,現在說數據庫三大範式的少了。 三大範式我以前也很嚴格的弄過,但是後來發現,還是靈活好啊,爲什麼,業務變動太快了啊,按照範式來,結構變更頂不住。 下面我就說一說設計數據庫表要注

原创 如果我來設計一個簡單標籤

個人在做一個tts(文本轉語音)翻譯功能。對於不同的語音語義通過標籤標識。 例如: 停頓 <break> 多音字 <pinyin> 斷句 <segment> <phone>,<muney> 等 目前在對接不同的平臺,不同平臺的使用大同小

原创 Kotlin與Java互操作[文檔]

在 Kotlin 中調用 Java 代碼 Kotlin 在設計時就考慮了 Java 互操作性。可以從 Kotlin 中自然地調用現存的 Java 代碼,並且在 Java 代碼中也可以很順利地調用 Kotlin 代碼。在本節中我們會介紹從 K

原创 Kotlin泛型[文檔]

泛型 與 Java 類似,Kotlin 中的類也可以有類型參數: class Box<T>(t: T) { var value = t } 一般來說,要創建這樣類的實例,我們需要提供類型參數: val box: Box<Int>