首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏软件开发-青出于蓝

    JDK之JVM中Java对象的头部占多少byte

    java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit 所以可以看到数组和普通的Java对象头部是有区别的。 List-4 import org.openjdk.jol.info.ClassLayout; import org.openjdk.jol.vm.VM; /** * @author dmj1161859184 System.out.println(layout.toPrintable()); } public static class A { boolean f; } }     List 图3 List-4的运行结果 List-5 import org.openjdk.jol.info.ClassLayout; import org.openjdk.jol.vm.VM; /** *

    1.5K50发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    Springsecurity-oauth2之ClientDetailsService

    2 InMemoryClientDetailsService package org.springframework.security.oauth2.provider.client; import java.util.HashMap ; import java.util.Map; import org.springframework.security.oauth2.provider.ClientDetails; import org.springframework.security.oauth2 + clientId); } return details; }     如List-3,用jdbcTemplate从数据库中查询,来看下selectClientDetailsSql,如下List -4 List-4 select client_id, client_secret, resource_ids, scope, authorized_grant_types, web_server_redirect_uri

    5.6K41发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    OpenJDK之CountDownLatch

    return nextc == 0; } } }     CountDownLatch里面有个内部类Sync继承了AbstractQueuedSynchronizer——这个类在java.util.concurrent.locks tryAcquireShared方法在类Sync中实现,如List-1中,当还有线程还未执行完,tryAcquireShared会返还-1,这样就调用doAcquireSharedInterruptibly()如List InterruptedException(); if (tryAcquireShared(arg) < 0) doAcquireSharedInterruptibly(arg); } List Reference http://openjdk.java.net/

    64450发布于 2019-10-24
  • 来自专栏软件开发-青出于蓝

    openJDK之sun.misc.Unsafe类CAS底层实现

    8303698.html,而后自己结合hotspot源码看的 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long arg1, java.lang.Object arg2, java.lang.Object arg3); compareAndSwapInt(java.lang.Object arg0 , long arg1, int arg2, int arg3); compareAndSwapLong(java.lang.Object arg0, long arg1, long arg2, long arg3); 来看下openJDK8的hotspot中,unsafe是如何实现的,链接http://hg.openjdk.java.net/jdk8u/jdk8u60/hotspot/file/37240c1019fd 中,如下List-4所示 List-4 jbyte Atomic::cmpxchg(jbyte exchange_value, volatile jbyte* dest, jbyte compare_value

    1.2K20发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    Springcloud之zuul的过滤头部

    -3,1处和2处,会将ZuulProperties中sensitiveHeaders的值加入到要过滤的字段里面,来看下ProxyRequestHelper的addIgnoredHeaders方法,如下List name.toLowerCase());//1 } for (String name : names) { set.add(name.toLowerCase());//2 } } List 调用isIncludedHeader方法,isIncludedHeader里面获取RequestContext,判断当前的这个header key是不是在IGNORED_HEADERS这个集合里面——List context.getZuulRequestHeaders()获取我们手动设置的header(调用addZuulResponseHeader方法设置),之后逐个遍历,如果在IGNORED_HEADERS这个集合里面——List 要注意的是,如果要往下游传的header含有大写的,那么下游接收到的header是小写的,原因在List-4中可以看出。 Reference 源码

    1.6K20发布于 2019-07-08
  • 来自专栏软件开发-青出于蓝

    Mybatis之拦截器Interceptor

    Object target); void setProperties(Properties properties); }     来看PageInterceptor如何实现intercept接口的,如下List -4 List-4 @Override public Object intercept(Invocation invocation) throws Throwable { try { List-4中如果不需要分页,则直接调用executor的query方法。 List-4中,需要count查询后,判断手写的count已存在,不存在则调用mybatis的builder等工具类构造,之后进行count查询,得到结果后调用dialect的afterCount方法, else if(page.isOrderByOnly()){ page.setTotal(pageList.size()); } return page; }     List

    2.4K30发布于 2019-06-16
  • 来自专栏软件开发-青出于蓝

    Redis之SpringDataRedis对象写入到Redis中

    先来定义实体类,如下List-3和List-4 List-3 Department.java /** * @author dmj1161859184@126.com 2018-09-18 01:21 this.name = name; this.officeStaffs = officeStaffs; this.strings = strings; } } List -4  OfficeStaff.java /** * @author dmj1161859184@126.com 2018-09-18 01:22 * @version 1.0 * @since \"com.mjduan.project.objectRedisTemplate.model.Department\",\"name\":\"System\",\"officeStaffs\":[\"java.util.ArrayList

    1.2K30发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    SpringFramework之mvc的HandlerMapping

    getHandlerInternal的实现在AbstractHandlerMethodMapping中,如List-3所示 获取request中的url 调用lookupHandlerMethod方法获取HandlerMethod,如List handlerMethod.createWithResolvedBean() : null); } finally { this.mappingRegistry.releaseReadLock(); } } List return handleNoMatch(this.mappingRegistry.getMappings().keySet(), lookupPath, request); } }     如List 回到List-3,在List-4中返回HandlerMethod后,调用getHandlerExecutionChain方法构造一个HandlerExecutionChain,读者可以去看下HandlerExecutionChain

    60520发布于 2019-07-01
  • 来自专栏软件开发-青出于蓝

    SpringFramework之ClassPathBeanDefinitionScanner

    并将每个类封装为Resource,如下List-3,之后将每个resource转换为MetadataReader,仔细看下1处isCandidateComponent(metadataReader)的处理,如下List -4,在List-4中,includeFilters默认添加了new AnnotationTypeFilter(Component.class),这意味着isCandidateComponent()方法中调用 BeanDefinitionStoreException("I/O failure during classpath scanning", ex); } return candidates; } List scanning"); } catch (ClassNotFoundException ex) { // JSR-250 1.1 API (as included in Java

    1.1K20发布于 2019-06-28
  • 来自专栏软件开发-青出于蓝

    OpenJDK之CyclicBarrier

    generation = new Generation(); } 2.reset()方法     await()被调用n次后,计数器已经变为0了,此时再次使用await()不行,需要使用reset()来重置计数器 List trip.signalAll(); // set up next generation count = parties; generation = new Generation(); }     List Reference http://openjdk.java.net/ (adsbygoogle = window.adsbygoogle || []).push({});

    60110发布于 2019-10-24
  • 来自专栏软件开发-青出于蓝

    Spark之Ubuntu18上安装Spark单机环境

        安装JDK,步骤略, List-1 mjduan@mjduan-ubuntu:~$ java -version java version "1.8.0_111" Java(TM) SE Runtime Environment (build 1.8.0_111-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)     安装Spark,下载地址 List-4 mjduan@mjduan-ubuntu:~$ tail -f ~/.bashrc ...... WARN NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_111) Type in expressions to have them evaluated.

    1.3K30发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    SpringFramework之DispatcherServlet的初始化简析

    ; } else { return new LinkedList<T>(); } }     defaultStrategies是DispatcherServlet的一个属性,它的初始化如下List -4所示, List-4 defaultStrategies的初始化源码 private static final Properties defaultStrategies; static { // 图3 文件DispatcherServlet.properties的内容     List-3中的createDefaultStrategy(context, clazz),代码如下List-4所示。 List-4 方法createDefaultStrategy的源码 protected Object createDefaultStrategy(ApplicationContext context,

    77130发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    SpringFramework之@Controller/@RequestMapping解析

    afterPropertiesSet() { initHandlerMethods(); }     由List-3知道afterPropertiesSet调用了initHandlerMethods(),如下List List-4中的handlerMethodsInitialized是空方法,不用管。 List-4 protected void initHandlerMethods() { if (logger.isDebugEnabled()) { logger.debug("Looking detectHandlerMethods(beanName); } } } handlerMethodsInitialized(getHandlerMethods()); }     来看List

    75420发布于 2019-07-01
  • 来自专栏软件开发-青出于蓝

    Feign源码分析之FeignClientFactoryBean

    RequestInterceptor接口,之后交给Spring容器,feign会自动加上这个拦截器,这个的实现也在FeignClientFactoryBean中,在configureUsingConfiguration方法中,如下List -4 List-4 Map<String, RequestInterceptor> requestInterceptors = context .getInstances(this.contextId = null) { builder.requestInterceptors(requestInterceptors.values()); }     List-4中的context.getInstances

    1.6K10发布于 2019-10-08
  • 来自专栏软件开发-青出于蓝

    MySQL之修改max_connections

    mysql.service文件末尾加入如下List-3中的内容 List-3 LimitNOFILE=65535 LimitMEMLOCK=65535 3.编辑/etc/mysql/my.cnf,加入List -4中的内容 List-4 [mysqld] max_connections=600 4.执行命令 List-5 sudo systemctl daemon-reload 5.重启MySQL之后,查看

    1.9K30发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    Kubernetes之ingress设置账号密码

    怎么在ingress中使用这个secret呢,如下List-4,在annotations中使用我们创建好的secret List-4 apiVersion: networking.k8s.io/v1beta1

    2.5K10发布于 2020-05-20
  • 来自专栏软件开发-青出于蓝

    JDK中线程池满后再放入队列

    让线程池去创建新的线程 此时线程数量大于等于maxSize,将task放入任务队列中 EagerThreadPoolExecutor继承ThreadPoolExecutor,改写execute()的实现: List ()中被调用的,分别在Runnable.run()的前后被调用,而且线程池中抛出异常,在线程池外面是捕获不到的,所以外面需要的afterExecute()中将task数减去1     改进:我们可以将List https://github.com/apache/dubbo/blob/fb5761683729f63c715e39c78a8b7b75278050c9/dubbo-common/src/main/java /org/apache/dubbo/common/threadpool/support/eager/EagerThreadPoolExecutor.java

    1.2K10发布于 2020-07-21
  • 来自专栏软件开发-青出于蓝

    Springsecurity之LogoutFilter

    HttpServletResponse的重定向 如果满足步骤1的要求,那么不会调用FilterChain了     来看下SecurityContextLogoutHandler的logout方法,如下List -4所示, List-4 public void logout(HttpServletRequest request, HttpServletResponse response, Authentication SecurityContextHolder.getContext(); context.setAuthentication(null); } SecurityContextHolder.clearContext(); }     在List

    1.3K30发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    Disruptor之ExceptionHandler

    IgnoreExceptionHandler只是将异常打印下,但是FatalExceptionHandler则不同,正如其名字所示,它内部将异常再次封装到RuntimeException再次抛出,如下List -4 List-4 public final class FatalExceptionHandler implements ExceptionHandler<Object> { private

    1.4K20发布于 2020-06-18
  • 来自专栏软件开发-青出于蓝

    Springboot中@Ehable**学习 原

    com.mjduan.project.springbootlearn.selector.SelectorB"}; } }     之后定义自己的EnableMyX,如下List-3 List-3 import java.lang.annotation.Documented ; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy ; import java.lang.annotation.Target; @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME Import({MyImportSelector.class}) public @interface EnableMyX { }     在main方法的类上加上注解EnableMyX,如下所示: List

    39730发布于 2019-04-15
领券