就是简单的输出一些字符串,用以学习Go的package和实际的path的关系
package main import ( "fmt" "HelloWorld/heelo" ) func main() { p() } func p() { fmt.Println("Hello", "HelloTat") heelo.Hehe() }
package heelo import "fmt" func Hehe() { fmt.Println("this is Hello2") }
就是简单的输出一些字符串,用以学习Go的package和实际的path的关系
package main import ( "fmt" "HelloWorld/heelo" ) func main() { p() } func p() { fmt.Println("Hello", "HelloTat") heelo.Hehe() }
package heelo import "fmt" func Hehe() { fmt.Println("this is Hello2") }
基本的冒泡(O(n^2)):
public static void bubbleSort(int[] arrays, int begin, int end) { assert arrays != null; for (int i = begin; i < end; i++) { for (int j = begin; j < end; j++) { if (arrays[i] > arrays[j]) { swap(arrays, i, j); } } } } private static void swap(int[] arrays, int a, int b) { int t = arrays[a]; arrays[a] = arrays[b]; arrays[b] = t; }
new IO 或者none block IO
一个对可以实现IO操作的抽象,任何类实现了channel,则表明可以往通道存放一些byte,然后不需要再去操心如何去实现。
事实上channel也不是直接操作byte[],而是操作其中的包装对象xxxBuffer。当然多数情况下我们连byteBuffer都懒得操纵,我们对ByteBuffer也做了装扮(decorate),使之变成了ByteBuffer的一个View,我们称xxxx是xxx的视图(view),实质上是表明,底层一样,但是对外的语义变换了。
视图带来了好处就是能够以我们熟悉的语义来操纵对象,而避免脑中还要顺便转换成相应的byte[]结构。
NIO带来了新的对IO操作的抽象,但是也仅仅是模型变换,除此之外,更多的非模型上而是工程上实际问题带来了改进,比如非阻塞式的访问(其实Stream模型也可以做到非阻塞式访问,只不过要根据这个模型来重新实现),还有Network到Network的转发可以不经过用户态而直接在内核态的进行转发避免上下文切换带来的CPU和内存带宽的消耗,等其他可能我还没了解到的特性
java.util.concurrent.locks.ReentrantLock
提供了比synchronized提供更灵活的锁,可以设置为公平锁,非公平锁,能够带超时时间获取公平锁等等。
synchronized
Java默认提供,由JVM提供。但是因为JVM的黑盒子特性,锁特性会在运行中发生变化。
具体可以翻阅一下这篇文章
简单而言就是JVM提供了一个钩子,能在JVM接受到关闭的信号量时候start一个线程,然后做一些清理工作,避免产生脏数据
Runtime.getRuntime().addShutdownHook(new Thread(){ @Override public void run() { scheduledExecutorService.shutdown(); } });
第一种,简洁算法
根据矩阵运算中的可得
package com.liangyumingblog; public class RollUpString { private String string; public RollUpString(String s) { this.string = s; } public String rollup(int n) { StringBuilder s1 = new StringBuilder(string.substring(0, n)); StringBuilder s2 = new StringBuilder(string.substring(n + 1)); return s1.reverse().append(s2.reverse().toString()).reverse().toString(); } }
基本实现是Array+Linked实现的,
如果发现某个支链太长会将其变成红黑树。(才发现红黑树这个事情是1.8才加进入的。。我们以前上算法可都说过这个基本优化吧。。)
哈希值:
(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)
ApplicationContext:
这是一个标准的Spring程序的入口,用来加载上下文其实现类是:AbstractApplicationContext:
这里实现了对Spring上下文的生命周期的管理
AbstractXmlApplicationContext
解析xml使之成为Spring的上下文
ClassPathXmlApplicationContext,FileSystemXmlApplicationContext
寻找到具体的xml所在的磁盘或者classpath所在的位置
1 byte=8bit
1 int=4 byte
1 long =8 byte
1 short=2 byte
1 float=2 byte
1 double = 8 byte
= =其实我想吐槽的是。。我压根分不清他们翻译成中文之后的关系。。。神特么非要推广专有名词的中文化