图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一维的数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。
设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为:
阿里云 95187
阿里云 售前 95187-1
阿里云 售后 95187-2
腾讯云 4009-100-100
招商银行信用卡 人工客服 4008205555->输入身份证信息->输入查询密码->9->6
苹果(APPLE)客服电话 400-666-8800
平安证券客服电话 95511转8
当我们开发的Spark Application变得越来越复杂,依赖的jar包越来越多时,难免会碰到jar包冲突的问题。
我们的业务代码用到了一个第三方库,好比:guava(虽然好用,但是版本间的兼容性差的一坨翔)
Spark本身也依赖了guava,但是和业务代码中依赖的guava版本不同
这种情况下,把我们的Spark Application提交到集群里执行,很有可能因为版本问题导致运行出错。
大家都知道,JVM的ClassLoader加载类的时候,同一个ClassLoader加载的类,如果出现重复,只有第一个会被加载,后面重复的类会被忽略掉。
就我们的例子来说,整个Spark Application会优先加载Spark jars目录下的guava包,那么我们的业务代码自然很有可能受到影响了。
LogBack
是一个日志框架,它是Log4j作者Ceki的又一个日志组件。
LogBack,Slf4j,Log4j之间的关系
slf4j
是The Simple Logging Facade for Java的简称,是一个简单日志门面抽象框架,它本身只提供了日志Facade API和一个简单的日志类实现,一般常配合Log4j
,LogBack
,java.util.logging
使用。Slf4j作为应用层的Log接入时,程序可以根据实际应用场景动态调整底层的日志实现框架(Log4j/LogBack/JdkLog…);
LogBack
和Log4j都是开源日记工具库,LogBack是Log4j的改良版本,比Log4j拥有更多的特性,同时也带来很大性能提升。
LogBack
官方建议配合Slf4j使用,这样可以灵活地替换底层日志框架。
我们知道轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同。
这有个前提,就是每个请求所占用的后端时间要差不多,如果有些请求占用的时间很长,会导致其所在的后端负载较高。在这种场景下,把请求转发给连接数较少的后端,能够达到更好的负载均衡效果,这就是least_conn算法。
least_conn算法很简单,首选遍历后端集群,比较每个后端conns/weight,选取该值最小的后端。
如果有多个后端的conns/weight值同为最小的,那么对它们采用加权轮询算法。
如果有least_conn指令,表示使用least connected负载均衡算法。
log_format指令用来设置日志的记录格式,它的语法如下:1
2
3
4
5
6
7
8
log_format name format {format ...}
其中name表示定义的格式名称,format表示定义的格式样式。
log_format有一个默认的、无须设置的combined日志格式设置,相当于Apache的combined日志格式,其具体参数如下:
log_format combined '$remote_addr-$remote_user [$time_local]'
‘"$request"$status $body_bytes_sent’
‘"$http_referer" "$http_user_agent"’
location 用来匹配来访的url https://segmentfault.com/a/1190000013267839
proxy_redirect https://blog.csdn.net/u010391029/article/details/50395680
X-Real-IP 这个X-real-ip是一个自定义的变量名,名字可以随意取,这样做完之后,用户的真实ip就被放在X-real-ip这个变量里了,然后,在web端可以这样获取:
request.getAttribute(“X-real-ip”)
http://gong1208.iteye.com/blog/1559835
root 需要本地文件 https://www.jianshu.com/p/4be0d5882ec5
栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中)。
堆(heap):存放所有new出来的对象。
常量池(constant pool):在堆中分配出来的一块存储区域,存储显式的String常量和基本类型常量(float、int等)。另外,可以存储不经常改变的东西(public static final)。常量池中的数据可以共享。
静态存储:存放静态成员(static定义的)。
1)1
2 String a = "abc";①
String b = "abc";②
分析:
①代码执行后在常量池(constant pool)中创建了一个值为abc的String对象,②执行时,因为常量池中存在”abc”所以就不再创建新的String对象了。
2)1
2 String c = new String("xyz");①
String d = new String("xyz");②
分析:①Class被加载时,”xyz”被作为常量读入,在常量池(constant pool)里创建了一个共享的值为”xyz”的String对象;然后当调用到new String(“xyz”)的时候,会在堆(heap)里创建这个new String(“xyz”)对象;②由于常量池(constant pool)中存在”xyz”所以不再创建”xyz”,然后创建新的new String(“xyz”)。
3)1
2
3
4
5 String s1 = new String("xyz"); //创建二个对象(常量池和堆中),一个引用
String s2 = new String("xyz"); //创建一个对象(堆中),并且以后每执行一次创建一个对象,一个引用
String s3 = "xyz"; //创建一个对象(常量池中),一个引用
String s4 = "xyz"; //不创建对象(共享上次常量池中的数据),只是创建一个新的引用
4)
1 | public class TestStr { |
参考 https://www.cnblogs.com/devinzhang/archive/2012/01/25/2329463.html
在多维数据仓库中,保存度量值的详细值或事实的表称为“事实表”。一个按照州、产品和月份划分的销售量和销售额存储的事实表有5个列,概念上与下面的示例类似。
Sate | Product | Mouth | Units | Dollars |
---|---|---|---|---|
WA | Mountain-100 | January | 3 | 7.95 |
WA | CableLock | January | 4 | 7.32 |
OR | Mountain-100 | January | 3 | 7.95 |
OR | CableLock | January | 4 | 7.32 |
WA | Mountain-100 | February | 16 | 42.40 |
在这些事实表的示例数据行中,前3个列——州、产品和月份——为键值列。剩下的两个列——销售额和销售量——为度量值。事实表中的每个列通常要么是键值列,要么是度量值列,但也可能包含其他参考目的的列——例如采购订单号或者发票号。
快速定位到接口方法在实现类中的位置: CTRL + B 点击方法