From 0799034299cd4a1dbc240a9a160d49fdec74723c Mon Sep 17 00:00:00 2001 From: lzb Date: Tue, 4 Apr 2017 01:27:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=A4=E4=BD=9C=E4=B8=9A=EF=BC=8C04/04?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9=E9=A1=B9=E7=9B=AE=E5=8C=85=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group24/1148285693/.gitignore | 4 +- .../java/me/lzb/algorithm/LRUPageFrame.java | 173 ++++++++++++++++++ .../basic => datastructure}/ArrayList.java | 2 +- .../array => datastructure}/ArrayUtil.java | 2 +- .../BinaryTreeNode.java | 4 +- .../basic => datastructure}/Iterator.java | 2 +- .../basic => datastructure}/LinkedList.java | 2 +- .../basic => datastructure}/List.java | 2 +- .../basic => datastructure}/Queue.java | 8 +- .../basic => datastructure}/Stack.java | 2 +- .../download/DownloadThread.java | 4 +- .../download/FileDownloader.java | 12 +- .../download/api/Connection.java | 4 +- .../download/api/ConnectionException.java | 2 +- .../download/api/ConnectionManager.java | 2 +- .../download/api/DownloadListener.java | 2 +- .../download/impl/ConnectionImpl.java | 8 +- .../download/impl/ConnectionManagerImpl.java | 17 ++ .../lzb/homework0326/download/FileUtil.java | 9 - .../download/impl/ConnectionManagerImpl.java | 17 -- .../litestruts/LoginAction.java | 2 +- .../{homework0319 => }/litestruts/Struts.java | 2 +- .../{homework0319 => }/litestruts/View.java | 4 +- .../litestruts/XmlUtil.java | 2 +- .../src/main/resources/litestruts/struts.xml | 4 +- .../me/lzb/algorithm/LRUPageFrameTest.java | 41 +++++ .../ArrayListTest.java | 6 +- .../LinkedListTest.java | 4 +- .../download/ConnectionTest.java | 12 +- .../download/FileDownloaderTest.java | 8 +- .../litestruts/StrutsTest.java | 2 +- .../src/test/resources/litestruts/struts.xml | 4 +- .../java/me/lzb/loader/ClassFileLoader.java | 57 ++++++ .../src/main/java/me/lzb/utils/FileUtils.java | 63 +++++++ .../main/java/me/lzb/utils/StringUtils.java | 7 + .../me/lzb/loader/ClassFileloaderTest.java | 103 +++++++++++ .../test/java/me/lzb/loader/EmployeeV1.java | 27 +++ group24/1148285693/learning2017/pom.xml | 2 + 38 files changed, 549 insertions(+), 79 deletions(-) create mode 100644 group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/algorithm/LRUPageFrame.java rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0312/basic => datastructure}/ArrayList.java (98%) rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0319/array => datastructure}/ArrayUtil.java (99%) rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0312/basic => datastructure}/BinaryTreeNode.java (96%) rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0312/basic => datastructure}/Iterator.java (77%) rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0312/basic => datastructure}/LinkedList.java (99%) rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0312/basic => datastructure}/List.java (84%) rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0312/basic => datastructure}/Queue.java (92%) rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0312/basic => datastructure}/Stack.java (96%) rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0326 => }/download/DownloadThread.java (91%) rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0326 => }/download/FileDownloader.java (93%) rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0326 => }/download/api/Connection.java (90%) rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0326 => }/download/api/ConnectionException.java (75%) rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0326 => }/download/api/ConnectionManager.java (80%) rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0326 => }/download/api/DownloadListener.java (60%) rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0326 => }/download/impl/ConnectionImpl.java (92%) create mode 100644 group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/impl/ConnectionManagerImpl.java delete mode 100644 group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/FileUtil.java delete mode 100644 group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/impl/ConnectionManagerImpl.java rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0319 => }/litestruts/LoginAction.java (95%) rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0319 => }/litestruts/Struts.java (99%) rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0319 => }/litestruts/View.java (89%) rename group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/{homework0319 => }/litestruts/XmlUtil.java (96%) create mode 100644 group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/algorithm/LRUPageFrameTest.java rename group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/{homework0312/basic => datastructure}/ArrayListTest.java (95%) rename group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/{homework0312/basic => datastructure}/LinkedListTest.java (98%) rename group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/{homework0326 => }/download/ConnectionTest.java (78%) rename group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/{homework0326 => }/download/FileDownloaderTest.java (85%) rename group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/{homework0319 => }/litestruts/StrutsTest.java (96%) create mode 100644 group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/loader/ClassFileLoader.java create mode 100644 group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/utils/FileUtils.java create mode 100644 group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/utils/StringUtils.java create mode 100644 group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/loader/ClassFileloaderTest.java create mode 100644 group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/loader/EmployeeV1.java diff --git a/group24/1148285693/.gitignore b/group24/1148285693/.gitignore index 23f75414d3..f41f37aecb 100644 --- a/group24/1148285693/.gitignore +++ b/group24/1148285693/.gitignore @@ -35,4 +35,6 @@ logs .directory .DS_Store -Test.java \ No newline at end of file + +Test.java +example \ No newline at end of file diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/algorithm/LRUPageFrame.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/algorithm/LRUPageFrame.java new file mode 100644 index 0000000000..1f1d0a36b7 --- /dev/null +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/algorithm/LRUPageFrame.java @@ -0,0 +1,173 @@ +package me.lzb.algorithm; + +/** + * 用双向链表实现LRU算法 + * @author lzb + * + */ +public class LRUPageFrame { + + private static class Node { + + Node prev; + Node next; + int pageNum; + + Node(Node prev, Node next, int pageNum) { + this.prev = prev; + this.next = next; + this.pageNum = pageNum; + } + } + + private int capacity; + + + private Node first;// 链表头 + private Node last;// 链表尾 + + + public LRUPageFrame(int capacity) { + if(capacity < 1){ +// throw new Exception("capacity boom"); + } + this.capacity = capacity; + + } + + /** + * 获取缓存中对象 + * + * @param pageNum + * @return + */ + public void access(int pageNum) { + if(capacity == 1){ + first = last = new Node(null, null, pageNum); + return; + } + + + if(first == null){ + first = last = new Node(null, null, pageNum); + return; + } + + if(first.pageNum == pageNum){ + return; + } + + Node tmp = first; + int size = 0; + for (int i = 0; i < capacity; i++) { + size = size + 1; + //如果发现一样的,把这个挪到最前面 + if(tmp.pageNum == pageNum){ + moveToFirst(tmp); + return; + } + //链表已经循环结束,但是个数还没满,更新last + if(tmp.next == null){ + last = tmp; + break; + } + tmp = tmp.next; + } + + + //没有相同的,在最顶端插入 + Node f = new Node(null, first, pageNum); + addAsFirst(f); + + //已经放满,更新last + if(size >= capacity){ + removeLastOne(); + } + + } + + /** + * 删除最后一个节点 + */ + private void removeLastOne(){ + last = last.prev; + //使GC ROOT 不可达 + last.next.prev = null; + last.next = null; + } + + /** + * 把某节点移动到最顶部 + * @param tmp 在链表中的任意节点 + */ + private void moveToFirst(Node tmp){ + if(tmp == first){ + return; + } + + if (tmp.next != null){ + tmp.next.prev = tmp.prev; + tmp.prev.next = tmp.next; + }else { + tmp.prev.next = null; + //当这个节点是last的时候,更新last + last = tmp.prev; + } + + tmp.next = first; + tmp.prev = null; + + first.prev = tmp; + first = tmp; + } + + /** + * 在顶部增加一个节点 + * @param node node + */ + private void addAsFirst(Node node){ + first.prev = node; + first = node; + } + + + + /** + * ASC + * @return + */ + public String toString(){ + StringBuilder buffer = new StringBuilder(); + Node node = first; + while(node != null){ + buffer.append(node.pageNum); + + node = node.next; + if(node != null){ + buffer.append(","); + } + } + return buffer.toString(); + } + + + /** + * DESC + * @return + */ + public String toStringDESC(){ + + StringBuilder buffer = new StringBuilder(); + Node node = last; + while(node != null){ + buffer.append(node.pageNum); + + node = node.prev; + if(node != null){ + buffer.append(","); + } + } + return buffer.toString(); + } + +} diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/ArrayList.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/ArrayList.java similarity index 98% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/ArrayList.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/ArrayList.java index 6fde63911f..080aa4f724 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/ArrayList.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/ArrayList.java @@ -1,4 +1,4 @@ -package me.lzb.homework0312.basic; +package me.lzb.datastructure; /** * 简易ArrayList diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0319/array/ArrayUtil.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/ArrayUtil.java similarity index 99% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0319/array/ArrayUtil.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/ArrayUtil.java index 94f7b60c64..de101845aa 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0319/array/ArrayUtil.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/ArrayUtil.java @@ -1,4 +1,4 @@ -package me.lzb.homework0319.array; +package me.lzb.datastructure; public class ArrayUtil { diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/BinaryTreeNode.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/BinaryTreeNode.java similarity index 96% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/BinaryTreeNode.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/BinaryTreeNode.java index 053baad0d4..dfcaa60300 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/BinaryTreeNode.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/BinaryTreeNode.java @@ -1,11 +1,11 @@ -package me.lzb.homework0312.basic; +package me.lzb.datastructure; /** * 左边比父节点小,右边比父节点大 * Created by LZB on 2017/3/11. */ public class BinaryTreeNode { - + private int data; private BinaryTreeNode left; private BinaryTreeNode right; diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/Iterator.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/Iterator.java similarity index 77% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/Iterator.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/Iterator.java index 138e090126..b65f73b2e3 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/Iterator.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/Iterator.java @@ -1,4 +1,4 @@ -package me.lzb.homework0312.basic; +package me.lzb.datastructure; /** * Created by LZB on 2017/3/11. diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/LinkedList.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/LinkedList.java similarity index 99% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/LinkedList.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/LinkedList.java index e3cd7e9fa1..f79b7eaf18 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/LinkedList.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/LinkedList.java @@ -1,4 +1,4 @@ -package me.lzb.homework0312.basic; +package me.lzb.datastructure; /** diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/List.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/List.java similarity index 84% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/List.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/List.java index bd66593efa..8f6478c49e 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/List.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/List.java @@ -1,4 +1,4 @@ -package me.lzb.homework0312.basic; +package me.lzb.datastructure; /** * list接口 diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/Queue.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/Queue.java similarity index 92% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/Queue.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/Queue.java index 50ea66f1a2..35dc95f688 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/Queue.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/Queue.java @@ -1,4 +1,4 @@ -package me.lzb.homework0312.basic; +package me.lzb.datastructure; /** * 先进先出 @@ -10,21 +10,21 @@ public class Queue { public void enQueue(Object o){ elementData.add(o); } - + public Object deQueue() throws IndexOutOfBoundsException{ if(isEmpty()){ throw new IndexOutOfBoundsException("index boom"); } return elementData.remove(elementData.size() - 1); } - + public boolean isEmpty(){ if(elementData.size() <= 0){ return true; } return false; } - + public int size(){ return elementData.size(); } diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/Stack.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/Stack.java similarity index 96% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/Stack.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/Stack.java index 4cd8d3dfd9..367b7210e6 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0312/basic/Stack.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/datastructure/Stack.java @@ -1,4 +1,4 @@ -package me.lzb.homework0312.basic; +package me.lzb.datastructure; /** * 先进后出 diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/DownloadThread.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/DownloadThread.java similarity index 91% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/DownloadThread.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/DownloadThread.java index 68e8fe9fc8..9db5e9fc86 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/DownloadThread.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/DownloadThread.java @@ -1,6 +1,6 @@ -package me.lzb.homework0326.download; +package me.lzb.download; -import me.lzb.homework0326.download.api.Connection; +import me.lzb.download.api.Connection; import java.io.RandomAccessFile; import java.util.concurrent.CyclicBarrier; diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/FileDownloader.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/FileDownloader.java similarity index 93% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/FileDownloader.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/FileDownloader.java index d0867fa022..b64ddebd9c 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/FileDownloader.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/FileDownloader.java @@ -1,8 +1,8 @@ -package me.lzb.homework0326.download; +package me.lzb.download; -import me.lzb.homework0326.download.api.Connection; -import me.lzb.homework0326.download.api.ConnectionManager; -import me.lzb.homework0326.download.api.DownloadListener; +import me.lzb.download.api.Connection; +import me.lzb.download.api.ConnectionManager; +import me.lzb.download.api.DownloadListener; import java.io.IOException; import java.io.RandomAccessFile; @@ -69,9 +69,7 @@ public void run() { } catch (Exception e) { e.printStackTrace(); } finally { - if (conn != null) { - conn.close(); - } + } diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/api/Connection.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/Connection.java similarity index 90% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/api/Connection.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/Connection.java index 5e5d70f7e7..17413ca23b 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/api/Connection.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/Connection.java @@ -1,4 +1,4 @@ -package me.lzb.homework0326.download.api; +package me.lzb.download.api; import java.io.IOException; @@ -15,7 +15,7 @@ public interface Connection { * @return */ int getContentLength(); - + /** * 关闭连接 */ diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/api/ConnectionException.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/ConnectionException.java similarity index 75% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/api/ConnectionException.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/ConnectionException.java index a31e69b1aa..6c1f4defbe 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/api/ConnectionException.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/ConnectionException.java @@ -1,4 +1,4 @@ -package me.lzb.homework0326.download.api; +package me.lzb.download.api; public class ConnectionException extends Exception { diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/api/ConnectionManager.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/ConnectionManager.java similarity index 80% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/api/ConnectionManager.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/ConnectionManager.java index c15482bb1b..abec231748 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/api/ConnectionManager.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/ConnectionManager.java @@ -1,4 +1,4 @@ -package me.lzb.homework0326.download.api; +package me.lzb.download.api; public interface ConnectionManager { /** diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/api/DownloadListener.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/DownloadListener.java similarity index 60% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/api/DownloadListener.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/DownloadListener.java index 5969f87969..3131ec9966 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/api/DownloadListener.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/DownloadListener.java @@ -1,4 +1,4 @@ -package me.lzb.homework0326.download.api; +package me.lzb.download.api; public interface DownloadListener { void notifyFinished(); diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/impl/ConnectionImpl.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/impl/ConnectionImpl.java similarity index 92% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/impl/ConnectionImpl.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/impl/ConnectionImpl.java index a3ec1d6c8b..6fc42341db 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/impl/ConnectionImpl.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/impl/ConnectionImpl.java @@ -1,7 +1,7 @@ -package me.lzb.homework0326.download.impl; +package me.lzb.download.impl; -import me.lzb.homework0326.download.api.Connection; -import me.lzb.homework0326.download.api.ConnectionException; +import me.lzb.download.api.Connection; +import me.lzb.download.api.ConnectionException; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; @@ -35,7 +35,9 @@ public ConnectionImpl(String url) throws ConnectionException{ @Override public byte[] read(int startPos, int endPos) throws IOException { + httpget.removeHeaders("Range"); httpget.addHeader("Range", "bytes=" + startPos + "-" + endPos); + CloseableHttpResponse response = httpClient.execute(httpget); InputStream inputStream = response.getEntity().getContent(); diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/impl/ConnectionManagerImpl.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/impl/ConnectionManagerImpl.java new file mode 100644 index 0000000000..d450f5aa92 --- /dev/null +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/impl/ConnectionManagerImpl.java @@ -0,0 +1,17 @@ +package me.lzb.download.impl; + + +import me.lzb.download.api.Connection; +import me.lzb.download.api.ConnectionException; +import me.lzb.download.api.ConnectionManager; + +public class ConnectionManagerImpl implements ConnectionManager { + + + @Override + public Connection open(String url) throws ConnectionException { + return new ConnectionImpl(url); + } + + +} diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/FileUtil.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/FileUtil.java deleted file mode 100644 index 57f9e75cdb..0000000000 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/FileUtil.java +++ /dev/null @@ -1,9 +0,0 @@ -package me.lzb.homework0326.download; - -/** - * Created by LZB on 2017/3/27. - */ -public class FileUtil { - - -} diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/impl/ConnectionManagerImpl.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/impl/ConnectionManagerImpl.java deleted file mode 100644 index e341546897..0000000000 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0326/download/impl/ConnectionManagerImpl.java +++ /dev/null @@ -1,17 +0,0 @@ -package me.lzb.homework0326.download.impl; - - -import me.lzb.homework0326.download.api.Connection; -import me.lzb.homework0326.download.api.ConnectionException; -import me.lzb.homework0326.download.api.ConnectionManager; - -public class ConnectionManagerImpl implements ConnectionManager { - - - @Override - public Connection open(String url) throws ConnectionException { - return new ConnectionImpl(url); - } - - -} diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0319/litestruts/LoginAction.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/LoginAction.java similarity index 95% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0319/litestruts/LoginAction.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/LoginAction.java index 4c4ca22187..5ea923c5b4 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0319/litestruts/LoginAction.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/LoginAction.java @@ -1,4 +1,4 @@ -package me.lzb.homework0319.litestruts; +package me.lzb.litestruts; /** * 这是一个用来展示登录的业务类, 其中的用户名和密码都是硬编码的。 diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0319/litestruts/Struts.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/Struts.java similarity index 99% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0319/litestruts/Struts.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/Struts.java index aea8d1105d..7841100872 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0319/litestruts/Struts.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/Struts.java @@ -1,4 +1,4 @@ -package me.lzb.homework0319.litestruts; +package me.lzb.litestruts; import org.apache.commons.lang3.StringUtils; import org.dom4j.DocumentException; diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0319/litestruts/View.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/View.java similarity index 89% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0319/litestruts/View.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/View.java index 614b4a584f..db8e6e1a9c 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0319/litestruts/View.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/View.java @@ -1,11 +1,11 @@ -package me.lzb.homework0319.litestruts; +package me.lzb.litestruts; import java.util.Map; public class View { private String jsp; private Map parameters; - + public String getJsp() { return jsp; } diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0319/litestruts/XmlUtil.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/XmlUtil.java similarity index 96% rename from group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0319/litestruts/XmlUtil.java rename to group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/XmlUtil.java index c8ad10c83b..8c58fb7902 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/homework0319/litestruts/XmlUtil.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/XmlUtil.java @@ -1,4 +1,4 @@ -package me.lzb.homework0319.litestruts; +package me.lzb.litestruts; import org.dom4j.Document; import org.dom4j.DocumentException; diff --git a/group24/1148285693/learning2017/learning-basic/src/main/resources/litestruts/struts.xml b/group24/1148285693/learning2017/learning-basic/src/main/resources/litestruts/struts.xml index 81c153757c..a4859a04b2 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/resources/litestruts/struts.xml +++ b/group24/1148285693/learning2017/learning-basic/src/main/resources/litestruts/struts.xml @@ -1,10 +1,10 @@ - + /jsp/homepage.jsp /jsp/showLogin.jsp - + /jsp/welcome.jsp /jsp/error.jsp diff --git a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/algorithm/LRUPageFrameTest.java b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/algorithm/LRUPageFrameTest.java new file mode 100644 index 0000000000..66bfd42119 --- /dev/null +++ b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/algorithm/LRUPageFrameTest.java @@ -0,0 +1,41 @@ +package me.lzb.algorithm; + +import org.junit.Assert; +import org.junit.Test; + + +public class LRUPageFrameTest { + + @Test + public void testAccess() { + LRUPageFrame frame = new LRUPageFrame(3); + frame.access(7); + Assert.assertEquals("7", frame.toString()); + Assert.assertEquals("7", frame.toStringDESC()); + frame.access(0); + Assert.assertEquals("0,7", frame.toString()); + Assert.assertEquals("7,0", frame.toStringDESC()); + frame.access(1); + Assert.assertEquals("1,0,7", frame.toString()); + Assert.assertEquals("7,0,1", frame.toStringDESC()); + frame.access(2); + Assert.assertEquals("2,1,0", frame.toString()); + Assert.assertEquals("0,1,2", frame.toStringDESC()); + frame.access(0); + Assert.assertEquals("0,2,1", frame.toString()); + Assert.assertEquals("1,2,0", frame.toStringDESC()); + frame.access(0); + Assert.assertEquals("0,2,1", frame.toString()); + Assert.assertEquals("1,2,0", frame.toStringDESC()); + frame.access(3); + Assert.assertEquals("3,0,2", frame.toString()); + Assert.assertEquals("2,0,3", frame.toStringDESC()); + frame.access(0); + Assert.assertEquals("0,3,2", frame.toString()); + Assert.assertEquals("2,3,0", frame.toStringDESC()); + frame.access(4); + Assert.assertEquals("4,0,3", frame.toString()); + Assert.assertEquals("3,0,4", frame.toStringDESC()); + } + +} diff --git a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/homework0312/basic/ArrayListTest.java b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/datastructure/ArrayListTest.java similarity index 95% rename from group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/homework0312/basic/ArrayListTest.java rename to group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/datastructure/ArrayListTest.java index 4938e6a8ac..dcb879a948 100644 --- a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/homework0312/basic/ArrayListTest.java +++ b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/datastructure/ArrayListTest.java @@ -1,7 +1,7 @@ -package me.lzb.homework0312.basic; +package me.lzb.datastructure; -import me.lzb.homework0312.basic.ArrayList; -import me.lzb.homework0312.basic.Iterator; +import me.lzb.datastructure.ArrayList; +import me.lzb.datastructure.Iterator; import org.junit.Assert; import org.junit.Before; import org.junit.Rule; diff --git a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/homework0312/basic/LinkedListTest.java b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/datastructure/LinkedListTest.java similarity index 98% rename from group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/homework0312/basic/LinkedListTest.java rename to group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/datastructure/LinkedListTest.java index ef0e043a11..1914195aa5 100644 --- a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/homework0312/basic/LinkedListTest.java +++ b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/datastructure/LinkedListTest.java @@ -1,5 +1,7 @@ -package me.lzb.homework0312.basic; +package me.lzb.datastructure; +import me.lzb.datastructure.Iterator; +import me.lzb.datastructure.LinkedList; import org.junit.Assert; import org.junit.Before; import org.junit.Rule; diff --git a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/homework0326/download/ConnectionTest.java b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/download/ConnectionTest.java similarity index 78% rename from group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/homework0326/download/ConnectionTest.java rename to group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/download/ConnectionTest.java index 10eb296623..884c309765 100644 --- a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/homework0326/download/ConnectionTest.java +++ b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/download/ConnectionTest.java @@ -1,8 +1,8 @@ -package me.lzb.homework0326.download; +package me.lzb.download; -import me.lzb.homework0326.download.api.Connection; -import me.lzb.homework0326.download.api.ConnectionManager; -import me.lzb.homework0326.download.impl.ConnectionManagerImpl; +import me.lzb.download.api.Connection; +import me.lzb.download.api.ConnectionManager; +import me.lzb.download.impl.ConnectionManagerImpl; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -28,7 +28,8 @@ public void tearDown() throws Exception { public void testContentLength() throws Exception{ ConnectionManager connMan = new ConnectionManagerImpl(); Connection conn = connMan.open(imageUrl); - Assert.assertEquals(35470, conn.getContentLength()); + Assert.assertEquals(3440179, conn.getContentLength()); + conn.close(); } @Test @@ -45,6 +46,7 @@ public void testRead() throws Exception{ Assert.assertEquals(1024, data.length); + //TODO 这个地方会一直卡住不执行 data = conn.read(1024, 2023); Assert.assertEquals(1000, data.length); diff --git a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/homework0326/download/FileDownloaderTest.java b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/download/FileDownloaderTest.java similarity index 85% rename from group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/homework0326/download/FileDownloaderTest.java rename to group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/download/FileDownloaderTest.java index c1c459184f..76c3edf432 100644 --- a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/homework0326/download/FileDownloaderTest.java +++ b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/download/FileDownloaderTest.java @@ -1,8 +1,8 @@ -package me.lzb.homework0326.download; +package me.lzb.download; -import me.lzb.homework0326.download.api.ConnectionManager; -import me.lzb.homework0326.download.api.DownloadListener; -import me.lzb.homework0326.download.impl.ConnectionManagerImpl; +import me.lzb.download.api.ConnectionManager; +import me.lzb.download.api.DownloadListener; +import me.lzb.download.impl.ConnectionManagerImpl; import org.junit.After; import org.junit.Before; import org.junit.Test; diff --git a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/homework0319/litestruts/StrutsTest.java b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/litestruts/StrutsTest.java similarity index 96% rename from group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/homework0319/litestruts/StrutsTest.java rename to group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/litestruts/StrutsTest.java index 027c33eba9..a970d742b4 100644 --- a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/homework0319/litestruts/StrutsTest.java +++ b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/litestruts/StrutsTest.java @@ -1,4 +1,4 @@ -package me.lzb.homework0319.litestruts; +package me.lzb.litestruts; import org.junit.Assert; import org.junit.Test; diff --git a/group24/1148285693/learning2017/learning-basic/src/test/resources/litestruts/struts.xml b/group24/1148285693/learning2017/learning-basic/src/test/resources/litestruts/struts.xml index 81c153757c..a4859a04b2 100644 --- a/group24/1148285693/learning2017/learning-basic/src/test/resources/litestruts/struts.xml +++ b/group24/1148285693/learning2017/learning-basic/src/test/resources/litestruts/struts.xml @@ -1,10 +1,10 @@ - + /jsp/homepage.jsp /jsp/showLogin.jsp - + /jsp/welcome.jsp /jsp/error.jsp diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/loader/ClassFileLoader.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/loader/ClassFileLoader.java new file mode 100644 index 0000000000..86f017cebf --- /dev/null +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/loader/ClassFileLoader.java @@ -0,0 +1,57 @@ +package me.lzb.loader; + +import me.lzb.utils.FileUtils; +import me.lzb.utils.StringUtils; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + + + +public class ClassFileLoader { + + private List clzPaths = new ArrayList<>(); + + public byte[] readBinaryCode(String className) throws IOException { + String fileName = className.replaceAll(".*\\.", "") + ".class"; + String pkg = className.replaceAll("\\.[^\\.]+$", ""); + String packagePath = pkg.replaceAll("\\.", "\\\\"); + + + String path = ""; + for (String s : clzPaths) { + if (FileUtils.isFileExist(s + packagePath, fileName)){ + path = s; + break; + } + } + + if(StringUtils.isBlank(path)){ + throw new IOException("class file not found"); + } + + return FileUtils.readByteCodes(path + packagePath + "\\" + fileName); + + } + + + public void addClassPath(String path) { + clzPaths.add(path); + } + + + + public String getClassPath(){ + StringBuilder buffer = new StringBuilder(); + for (Iterator iterator = clzPaths.iterator(); iterator.hasNext();) { + buffer.append(iterator.next() + (iterator.hasNext() ? ";" : "")); + } + return buffer.toString(); + } + + + + +} diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/utils/FileUtils.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/utils/FileUtils.java new file mode 100644 index 0000000000..b0947d4326 --- /dev/null +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/utils/FileUtils.java @@ -0,0 +1,63 @@ +package me.lzb.utils; + +import java.io.*; + +/** + * Created by LZB on 2017/4/4. + */ +public class FileUtils { + + /** + * 判断文件是否存在 + * + * @param path 路径 + * @param name 文件名 + * @return true false + */ + public static boolean isFileExist(String path, String name) { + File file = new File(path + "\\" + name); + return file.exists(); + } + + /** + * 读取文件为二进制数组 + * @param clzFileName 文件路径 + * @return 数组 + * @throws IOException + */ + public static byte[] readByteCodes(String clzFileName) throws IOException { + + File f = new File(clzFileName); + + BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f)); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + + + byte[] buffer = new byte[1024]; + int length = -1; + try { + while ((length = bis.read(buffer)) != -1) { + bos.write(buffer, 0, length); + } + } catch (IOException e) { + e.printStackTrace(); + throw e; + } finally { + if (bis != null) { + bis.close(); + } + if (bos != null) { + bos.close(); + } + } + + byte[] codes = bos.toByteArray(); + + bis.close(); + + return codes; + } + + +} diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/utils/StringUtils.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/utils/StringUtils.java new file mode 100644 index 0000000000..b4ec543d49 --- /dev/null +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/utils/StringUtils.java @@ -0,0 +1,7 @@ +package me.lzb.utils; + +/** + * Created by LZB on 2017/4/4. + */ +public class StringUtils extends org.apache.commons.lang3.StringUtils { +} diff --git a/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/loader/ClassFileloaderTest.java b/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/loader/ClassFileloaderTest.java new file mode 100644 index 0000000000..b544e7ddc4 --- /dev/null +++ b/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/loader/ClassFileloaderTest.java @@ -0,0 +1,103 @@ +package me.lzb.loader; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + + + + + +public class ClassFileloaderTest { + + + static String path1 = EmployeeV1.class.getResource("/").getPath(); + static String path2 = "C:\\temp"; + + + + @Before + public void setUp() throws Exception { + } + + @After + public void tearDown() throws Exception { + } + + + + @Test + public void testPath(){ + + String s = EmployeeV1.class.getResource("/").getPath(); + String s2 = EmployeeV1.class.getResource("").getPath(); + System.out.println(s); + System.out.println(s2); + + } + + + + @Test + public void testClassPath(){ + + ClassFileLoader loader = new ClassFileLoader(); + loader.addClassPath(path1); + loader.addClassPath(path2); + + String clzPath = loader.getClassPath(); + + Assert.assertEquals(path1+";"+path2,clzPath); + + } + + @Test + public void testClassFileLength() throws Exception{ + + ClassFileLoader loader = new ClassFileLoader(); + loader.addClassPath(path1); + + String className = "me.lzb.loader.EmployeeV1"; + + byte[] byteCodes = loader.readBinaryCode(className); + + // 注意:这个字节数可能和你的JVM版本有关系, 你可以看看编译好的类到底有多大 + Assert.assertEquals(1036, byteCodes.length); + + } + + + @Test + public void testMagicNumber() throws Exception{ + ClassFileLoader loader = new ClassFileLoader(); + loader.addClassPath(path1); + String className = "me.lzb.loader.EmployeeV1"; + byte[] byteCodes = loader.readBinaryCode(className); + byte[] codes = new byte[]{byteCodes[0],byteCodes[1],byteCodes[2],byteCodes[3]}; + + String acctualValue = this.byteToHexString(codes); + + Assert.assertEquals("cafebabe", acctualValue); + } + + + + + + + private String byteToHexString(byte[] codes ){ + StringBuffer buffer = new StringBuffer(); + for(int i=0;i learning-basic + mini-jvm +