读书笔记-Linux Bible 9th Edition之文件系统

跟着书,重新梳理一下linux文件系统的有关知识, 最近一天一个接口的节奏真真是极好的,有时间看看书了。😻😻😻

相关博客:
Linux Bible 9th Edition之使用shell
Linux Bible 9th Edition之玩转文本文件
Linux Bible 9th Edition之进程大法好

霸气的喵喵

查看更多

分享到 评论

读书笔记-Linux Bible 9th Edition之使用shell

其实也不算读书笔记 主要是想整理一下常用的一些linux命令

相关博客:
Linux Bible 9th Edition之玩转文本文件
Linux Bible 9th Edition之文件系统
Linux Bible 9th Edition之进程大法好

查看更多

分享到 评论

EsGiraffe-利用注解和反射拼接Elasticsearch查询语句

EsGiraffe

封闭开发结束,终于有时间可以整理一下了。EsGiraffe是一个利用注解和反射开发一套工具类,用来生成elastisearch的查询语句。为什么要叫Giraffe呢?一是因为我喜欢长颈鹿,二是希望可以通过工具类把像长颈鹿脖子一样长的代码简化一下,三是希望这个工具类可以像桥梁一样连接java和elaticsearch。实在编不下去了,其实就是因为喜欢长颈鹿。目前只适用于简单的查询,不过会在工作学习中慢慢完善的。由于目前在工作中用到最多的就是Bool查询,所以目前生成的查询语句最外层就是bool查询,生成的大致的样子如下:

"query": {
     "bool": {
              "must": [
                      ...
              ],
              "must_not": [
                      ...
              ],
              "should": [
                      ...
              ]
          }
      }

git地址:

查看更多

分享到 评论

读书笔记---深入理解Java虚拟机1

最近看书总是看不进去,所以。。。决定边看边画画图,做个总结。下面是深入理解Java虚拟机这本书的第二,三章的总结。

深入理解java虚拟机1

深入理解java虚拟机2

分享到 评论

【译】如何在java中使用ConcurrentHashMap

原文来自一个java大牛的技术博客 地址http://javarevisited.blogspot.com/2013/02/concurrenthashmap-in-java-example-tutorial-working.html 博客讲解了如何在java中使用ConcurrentHashMap。马上要封闭开发10天,连上15天班,真酸爽。下面是原文的翻译:

查看更多

分享到 评论

【译】Java8中的扩展(default/extension)方法

原文来自一个java大牛的技术博客 地址http://javarevisited.blogspot.hk/2014/07/default-defender-or-extension-method-of-Java8-example-tutorial.html#uds-search-results 博客讲解了Java 8中新引入的可以在接口中定义扩展方法。下面是原文的翻译。

Java 8允许开发者使用defaultstatic两个关键字在接口中加入非抽象的方法。带有default关键字的方法在Java中也被称作defender方法或defaul方法。在Java 8之前,想要改变一个已经发布的接口几乎是不可能的,任何改动(例如增加一个新的方法)都会影响该接口现有的实现类。这也是为什么在Java 8想要改变内部iterator的实现,使用forEach()方法时面临了一个巨大的挑战,因为这会破坏了现有的Iterable接口的实现类。毫无疑问,向后兼容是Java工程师最优先考虑的事,所以要破坏现有的实现类是不可行的。因此,他们提出了一个解决办法,引入default方法。这是一个绝妙的想法,因为现在你可以用扩展现有的接口。JDK本身也使用了许多default方法,java.util.Map接口扩展了许多default方法,例如replaceAll(),putIfAbsent(Key k,Value v)….。另外,由于default方法可以扩展现有的接口也被称作extension方法。一个接口中的default方法是数量不受限制的。我相信,在这次改变之后,将不再需要抽象类来提供骨架实现(skeletal implementation),例如List接口有AbstractList,Collection接口有AbstractCollection,Set接口有AbstractSet,Map接口有AbstractMap。我们可以通过在接口中定义default方法来替代创建一个新的抽象类。相似的,static方法的引入也使得接口的工具类变得冗余。例如,Collection接口的Collections类,Path接口的Paths类,因为你可以直接在接口中定义静态工具方法。如果你想了解更多关于Java 8的新特性,我建议阅读Cay S. Horstmann写的Java SE 8 Really Impatient。这是我最喜欢的关于Java 8的书之一,它详细的介绍了Java7与Java 8不同的特性。

查看更多

分享到 评论

【译】以生产者消费者为例阐述如何使用wait,notify和notifyAll

原文来自一个java大牛的技术博客 地址http://javarevisited.blogspot.com/2015/07/how-to-use-wait-notify-and-notifyall-in.html 博客以生产者和消费者为例 讲解了如何使用wait,notify,notifyAll进行多个线程之间的通信。下面是原文的翻译。

在Java中可以利用use,notify,notifyAll来完成线程之间的通信。举个例子,假设你的程序中有两个线程(eg:Producer(生产者)和Consumer(消费者)),Producer要和Consumer通信,通知Consumer队列中有元素了可以开始消费。相似的,Consumer也需要通知Producer队列中有空闲可以插入元素了。一个线程可以可以在一定条件下调用wait方法暂停什么都不做。比如,在Producer和consumer的问题中,当队列满了时Producer需要调用wait,当队列为空时Consumer需要调用wait方法。如果一些线程在等待某些条件变为真,可以在条件改变时使用notify和notifyAll通知他们并唤醒他们。Notify方法和NotifyAll方法都可以发送通知,不同的是,notify只能向等待的线程中的一个发送通知,不保证接受到通知的是哪个线程,而NotifyAll会向所有线程发送通知。所以如果只有一个线程等待对象锁,notify和notifyAll都会通知到它。在这个java多线程的教程中,将利用生产者,消费者的例子讲述在Java中如何使用wait,notify和notifyAll实现线程内部通信。另外,如果大家对掌握多线程和并发很感兴趣,强烈建议大家阅读Brian Goetz写的Java Concurrency in Practice。如果没看过这本书,你的Java多线程之旅是不完整的🙀。

查看更多

分享到 评论

使用基于注解的mybatis时,利用反射和注解生成sql语句

在开发时遇到一个问题,在使用基于注解的mybatis插入一个对象到mysql时,在写sql语句时需要列出对象的所有属性,所以在插入一个拥有10个以上属性的对象时sql语句就会变得很长,写起来也很不方便,也很容易拼错。google了一下也没有找到什么解决方式(可能是姿势不对😜),在stackoverflow上提的问题截止目前还没有人回答。所以自己想了一个基于反射和注解的解决办法
git地址:

查看更多

分享到 评论

【译】如何重置一个ArrayList--clear vs removeAll

安利一个APP–开发者头条,在上面发现一个不错的英文技术类博客,地址http://javarevisited.blogspot.com/, 会不定期的翻译一些 翻译不好见谅啊😼

原文地址:http://javarevisited.blogspot.co.uk/2015/09/how-to-reset-arraylist-in-java-clear-vs-removeAll-example.html

很多时候为了重用我们会想要重置一个ArrayList,这里的重置是指清空列表或移除列表所有的元素。在Java中,有两个方法可以帮助我们实现重置clearremoveAll。在列表长度很小的情况下(eg:10或100个元素),可以放心的使用这两种方法。但如果列表很大(eg:10M个元素),那么选择clear还是removeAll会对你java应用的性能造成巨大的影响。甚至有时,在列表过大的情况下,重置会耗费许多时间,那么重新创建一个新的列表比将老的列表重置要好。但需要提醒的是,必须要确保老的列表可以被垃圾回收,否则,有很大的风险会出现java.lang.OutOfMemoryError: Java Heap Space。言归正传,让我们看看clear()和removeAll()两个方法。大家应该常常会选择用clear(),因为他的复杂度是O(n),而相比之下,removeAll(Collection C)的性能要差一些,它的复杂度是O(n^2)。这也是为什么在重置大的列表的时候两个方法会有巨大的差异。如果阅读他们的源码并运行下面的例子程序,差异会更明显。

查看更多

分享到 评论

Mac系统下Idea和STS的快捷键对比

又被朋友安利了一遍Idea 所以决定尝试着把IDE由STS切换成Idea。不过发现好多快捷键都不一致,所以在熟悉Idea的过程中顺便记录一下两者的常用快捷键对比

STS(Spring Tool Suite) Idea
Run shift+command+F11 shift + control + r
Debug command + F11 shift + control + d
复制当前行 alt + command + 向下方向键 command + d
剪贴当前行 command + x command + x
删除当前行 command + d command + x
搜索 command + f command + f
搜索替换 command + f command + r
Preferences command + , command + ,
光标移到代码块最后 option+command+]
光标移到代码块最前 option+command+[
Rename alt+command+r shift+F6
所选语句上移 option+向上方向键 shift+command+向上方向键
所选语句下移 option+向下方向键 shift+command+向下方向键
选择实现父类的方法 control+o
generate(setter/constructor/toString) option+command+s command+n
step over F6 F8
step into F5 F7
step out F7 shift+F8
stop option+command+s command+F2
分享到 评论