2018年4月9日 星期一

Re:还在用JSON? Google Protocol Buffers 更快更小 (原理篇)

看了這篇
https://mp.weixin.qq.com/s?__biz=MzUyNzMwMTAwNw==&mid=2247483736&idx=1&sn=247c204880bde06eda8b77fd14e4d93a&chksm=fa00e1b8cd7768aee094020746eda244b26f2bb78332e8c68257f80d7966ed1ba82ed23dfe23&scene=21#wechat_redirect

順便學習了一些程式編碼問題與複習(雖然這篇後段完全看不懂...)

首先先看這篇,先了解原碼、反碼、補碼
http://www.cnblogs.com/en-heng/p/5570609.html

然後 裡面有計算ZigZag

根據int 編碼h(n) = (n << 1) ^ (n >> 31)

依照範例 數值 1,-1來練習

if n=1;

original code=0,0000000000,0000000000,0000000000,1

n<<1= 0,0000000000,0000000000,0000000001,0
n>>31= 0,0000000000,0000000000,0000000000,0

(n << 1) ^ (n >> 31)
^ => 0,0=0 1,0=1 0,1=1 1,1=0

so =  0,0000000000,0000000000,0000000001,0

Decimal=2
---------------------------------------------------------------  
if n=-1;

original code=1,0000000000,0000000000,0000000000,1
反碼=1,1111111111,1111111111,1111111111,0
補碼=1,1111111111,1111111111,1111111111,1
 
n<<1= 1,1111111111,1111111111,1111111111,0
n>>31= 1,1111111111,1111111111,1111111111,1

(n << 1) ^ (n >> 31)
^ => 0,0=0 1,0=1 0,1=1 1,1=0

so =  0,0000000000,0000000000,0000000000,1

Decimal=1

2018年3月8日 星期四

轉傳:用 ConstraintLayout 解決鍵盤擋住輸入框及按鈕

https://medium.com/joe-tsai/%E7%94%A8-constraintlayout-%E8%A7%A3%E6%B1%BA%E9%8D%B5%E7%9B%A4%E6%93%8B%E4%BD%8F%E8%BC%B8%E5%85%A5%E6%A1%86%E5%8F%8A%E6%8C%89%E9%88%95-642fe2a9b855

這個方法太棒了,想在這做個紀錄

2018年2月25日 星期日

關於eclipse主題顏色

我依照這篇更改我的eclipse主題,讓白色主題換成黑色
https://samkuo.me/post/2013/10/eclipse-dark-theme/

但有可能系統不一樣或者是版本差異,我選了Dark Juno,Color Theme則選擇RecognEyes

然後有時候變更主題他不會儲存
我會先依照這個更改
https://github.com/eclipse-color-theme/eclipse-color-theme/issues/223

在依照這個
https://stackoverflow.com/questions/30145776/eclipse-color-theme-reverts-to-default-every-time-i-exit

就成功了

2018年2月1日 星期四

重灌電腦加系統複製

因為我灌了一整天,想說紀錄一整天的經驗

1.別用Acronis True Image WD,我弄了一個下午重開機,都沒跑進去系統複製,結果換了一個軟體力馬就行,我用的是MiniTool Partition Wizard Free

複製教學:http://blog.xuite.net/yh96301/blog/394356641-MiniTool+Partition+Wizard+Free+9.1%E8%A4%87%E8%A3%BDWindows+10

然後如果有不要的硬碟要格式化,如果在[我的電腦] 按右鍵 [管理] -> [磁碟管理] 可以格式化,但如果有系統硬碟的話,要用cmd指令

教學:https://www.techbang.com/posts/6982-a-to-delete-a-stubborn-stick-ji-efi-partition-yang-liwei

2017年12月3日 星期日

關於Java queue類說明


Java5中的queue類是隊伍數據結構管理類,
在它裡面的元素可以按照添加他們的相同順序被移除。
使用方法
offer 添加一個元素並返回 如果隊伍已滿,則返回false
poll 移除並返回隊伍頭部的元素 如果隊伍為空,則返回null
peek 返回隊伍頭部元素 如果隊伍為空,則返回null
put 添加一個元素 如果隊伍滿,則阻塞
take 移除並返回隊伍頭部的元素 如果隊伍為空,則阻塞
element 返回隊伍頭部的元素 如果隊伍為空,則拋出一個NoSuchElementException
add 增加一個元素 如果隊伍已滿,則拋出一個IegaISalbEePeplian
remove 移除並返回隊伍頭部的元素 如果隊伍為空,則拋出一個NoSuchElementException



方法\處理方法 拋出異常 返回特殊值 一直阻塞 超時退出
插入方法 add(e) offer(e) put(e) offer(e,time,unit)
移除方法 remove() poll() take() poll(time,unit)
檢查方法 element() peek() 不可用 不可用

但poll和peek方法出錯會返回null,因此向隊伍插入null是不合法的行為。

還有帶超時的 offer和poll方法重載,例如下面的呼叫

boolean result=q.offer(value,100,TimeUnit.MILLISECONDS)

嘗試在100毫秒內向隊伍尾部插入一個元素,如果成功返回true,但當超時進入時會返回false,同樣地,呼叫

Object head=q.pll(100,TimeUnit.MILLSECONDS)

如果在100毫秒內成功地移除了隊伍頭元素,則立即返回頭部元素,否則到達超時,返回null。

阻塞的操作有put和take,put方法是隊伍滿時阻塞,take方法是隊伍空時阻塞。

(阻塞的意思就是此條線程會處於等待卡死狀態,解鎖的條件是隊列中有另一條線程存入或取出數據了,就會解鎖,說白了就是滿了不能再存,空了不能取,都得等著,就相當於隊列是倉庫,倉庫沒有貨了就生產,倉庫有貨就能消費,鎖條件是notFull和notEmpty)

Queue接口和List、Set同一級別,都是繼承Collection 接口,LinkedList實現Queue介面,Queue介面窄化了對LinkedList的方法訪問權限(即是方法中的參數類型是Queue時,就完全只能訪問Queue接口所定義的方法了,而不能直接訪問LinkedList的非Queue方法

JDK7提供了7个阻塞队列。分别是
  • ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列。
  • LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列。
  • PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列。
  • DelayQueue:一个使用优先级队列实现的无界阻塞队列。
  • SynchronousQueue:一个不存储元素的阻塞队列。
  • LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。
  • LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。
參考網站,如有不妥,請告知,立即刪除
http://www.infoq.com/cn/articles/java-blocking-queue
https://zhidao.baidu.com/question/541161936.html
http://www.itread01.com/content/1501578122.html

2017年10月23日 星期一

Word 數字 數值加上千分位和金錢符號$

在某ㄧ次的機遇,我需要把整份Word數值改成有千分位並開頭加上$符號

上網查了一下,幾乎都說要插入Excel,但其實使用Word替代和正規表示法就可以解決了



例如Word有下列ㄧ串數字,則就使用右方格式做轉換

76543210  =>尋找目標([0-9]{2})([0-9]{3})([0-9]{3})   取代為$\1,\2,\3

6543210    =>尋找目標([0-9]{1})([0-9]{3})([0-9]{3})   取代為$\1,\2,\3

543210      =>尋找目標([0-9]{3})([0-9]{3})   取代為$\1,\2

43210       =>尋找目標([0-9]{2})([0-9]{3})   取代為$\1,\2

3210         =>尋找目標([0-9]{1})([0-9]{3})   取代為$\1,\2

210          =>尋找目標([!,$])([0-9]{3})  取代為\1$\2

10       

0         

如果要使用的話,請從上至下開始取代,然後數值為百位數時最好自己手動輸入,因為容易因為其他項目符號,或者是不需要當作金錢的數值,ㄧ起取代掉