return nextc == 0; } } } CountDownLatch里面有个内部类Sync继承了AbstractQueuedSynchronizer——这个类在java.util.concurrent.locks public void countDown() { sync.releaseShared(1); } 如List-5,内部调用了Sync的releaseShared(1),即释放1,如下List List-6 public final boolean releaseShared(int arg) { if (tryReleaseShared(arg)) { doReleaseShared Reference http://openjdk.java.net/
Stackoverflow上看到的Java对象头部mark word和kclass pointer的大小 从Stackoverflow上看到,Java对象头部有一个mark word和一个klass java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit 所以可以看到数组和普通的Java对象头部是有区别的。 我们给List-5中的类,加上get/set/constructor,如下List-6 List-6 类A加上get/set/contructor public class A { long 图5 List-6的运行结果 图5中的结果与图4中的结果一样,说明类的方法数量,对Java对象占多少byte没有影响。当然,这里我只是实验了一个,这个结论不是很严谨。
先来定义实体类,如下List-3和List-4 List-3 Department.java /** * @author dmj1161859184@126.com 2018-09-18 01:21 this.officeStaffs = officeStaffs; this.strings = strings; } } List-4 OfficeStaff.java \"com.mjduan.project.objectRedisTemplate.model.Department\",\"name\":\"System\",\"officeStaffs\":[\"java.util.ArrayList ,\"other\":\"other\"}" 127.0.0.1:6379[7]> 注:除了引入Spring-data-redis和Jedis,还需要引入jackson的依赖,我使用的版本如下List -6: List-6 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core
List-4 export JAVA_HOME=/opt/jdk1.8 export HADOOP_HOME=/opt/hadoop-2.7.7 export SCALA_HOME=/opt/scala2.12 spark-eventlog 3、log4j.properties cp log4j.properties.template log4j.properties,修改log4j.properties,内容如下List 加入List-7中的内容,最终结果是List-6所示。 List-6 log4j.rootCategory=INFO, console,FILE log4j.appender.console=org.apache.log4j.ConsoleAppender
daemon-reload 5.重启MySQL之后,查看performance_schema数据库, 查看open_files_limit的值,这个值默认值是1024,我们可以看到这个值变为65535了,如下List List-6 mysql> select * from global_variables where variable_name like "%open_file%"; +---------------
下面来看下VirtualFilterChain的doFilter,如List-6所示。 List-6 VirtualFilterChain的doFilter public void doFilter(ServletRequest request, ServletResponse response 图1 如List-6所示,会先调用additionalFilters中的Filer,之后才会调用originalChain这个Filter,如图1所示,这个过程有点递归的感觉。
SimpleUrlLogoutSuccessHandler,如图2和List-5所示,它直接调用父类AbstractAuthenticationTargetUrlRequestHandler的handle方法,看List -6所示,方法determineTargetUrl决定使用哪个targetUrl;List-6中handle方法的redirectStrategy.sendRedirect(request, response authentication) throws IOException, ServletException { super.handle(request, response, authentication); } } List
List-5的1处,调用getRowValue方法,该方法获取resultSet中的一行数据,并将数据封装位对象 List-6 private Object getRowValue(ResultSetWrapper rowValue : null; } return rowValue; } List-6中1处,通过反射,创建Person对象(如List-7),之后在List-6的2处 List
List-5的getObject()中,调用父类SqlSessionDaoSupport的方法getSqlSession(),来看下SqlSessionDaoSupport,如下List-6 List this.sqlSession, "Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required"); } } Spring会调用List 这样List-6中,就引用了我们在图1中定义的sqlSessionFactory,之后构造出SqlSessionTemplate。
------+------+------+----------+----------------+ 1 row in set, 1 warning (0.00 sec) 来验证下删除的情况 List Meituan | 16 | | 13 | Jack | 16 | +----+---------+------+ 5 rows in set (0.00 sec) List-7 删除一条满足List
public final int getAndIncrement() { return unsafe.getAndAddInt(this, valueOffset, 1); } List 为什么AtomicBoolean中的value是int类型,而不是boolean类型,见https://stackoverflow.com/questions/13724858/why-java-util-concurrent-atomic-atomicboolean-is-internally-implemented-with-int 底层上是如何实现的,它是native方法 unsafe的putOrderedInt,底层上是如何实现的,它是native方法 openjdk6的unsafe.cpp文件:http://hg.openjdk.java.net jdk6/hotspot/file/4fc084dac61e/src/share/vm/prims/unsafe.cpp openjdk7的unsafe.cpp文件:http://hg.openjdk.java.net jdk7/hotspot/file/4fc084dac61e/src/share/vm/prims/unsafe.cpp openjdk8的unsafe.cpp文件:http://hg.openjdk.java.net
RequestBodyAdvice的实现 有人用RequestBodyAdvice来做参数的解密(前端传过来的是加密的),或者使用RequestBodyAdvice进行全局统一返回,但是我的需求是只对Java ArgumentResolverAdvice 4处判断这个类是否是RequestBodyAdvice类型,如果不是则不会加到结果集,所以就是我们要实现RequestBodyAdvice的原因 List-5的3处我们再来看下,如下List List-6 public Object resolveBean() { return this.bean instanceof String ?
name, properties); } } return null; } } YamlPropertySourceLoader如下List List-6 public class YamlPropertySourceLoader implements PropertySourceLoader { public String[] getFileExtensions
db_volume \ replica 3 node1:/data_gluster/db node2:/data_gluster/db node3:/data_gluster/db force 激活卷,如下List -6 List-6 gluster start db_volume 到这里,我们虽然激活了卷,但是还不能直接使用,要将其挂载出来,如下List-10,将卷db_volume挂载到/mnt/gluster
spark-env.sh文件(如果不存在,则cp spark-env.sh.template spark-env.sh),修改为如下List-2,这个修改三台机器上都要做: List-2 export JAVA_HOME spark-root-org.apache.spark.deploy.master.Master-1-master.out 在workerr1/worker2上,spark安装目录,执行如下: List
C client : configurations) { this.configurations.put(client.getName(), client); } } List AnnotationConfigApplicationContext的parent为当前Spring上下文,这样当在AnnotationConfigApplicationContext中获取不到bean时,就会从父ApplicationContext中获取 List
-12T23:29:34.287157Z 5 Close stmt JDBC连接的url加上useServerPrepStmts=true&cachePrepStmts=true,如下List -6所示: List-6 url=jdbc:mysql://127.0.0.1:3306/mjduan?
String类型的bean name,如下List-5,首先获取bean name对应的Class,getMappingForMethod在RequestMappingHandlerMapping中实现,如List AopUtils.selectInvocableMethod(method, userType); registerHandlerMethod(handler, invocableMethod, mapping); }); } } List
在没有特殊设置的情况下,mybatis中,如下List-6,默认使用的executor是SimpleExecutor,StatementHandler是RoutingStatementHandler,内部委托给 List-6 <select id="findByUsername" resultType="Person" parameterType="Person"> select * from person
node_master node.data-dir=/opt/prestoserver/data 5、在etc下新建catalog目录,在etc/catalog下新建hive.properties,如下List -6所示,192.168.33.33:9083是hive的metastore服务地址 List-6 connector.name=hive-hadoop2 hive.metastore.uri=thrift