3 | Spring:AOP实现原理

看给容器中注册了什么组件,这个组件什么时候工作,功能是什么?@EnableAspectJAutoProxy工作流程①首先从@EnableAspectJAutoProxy注解入手,它使用@Import注解,加入了一个实现了ImportBeanDefinitionRegistrar的类,叫做Aspect
阅读更多

2 | Spring:BeanPostProcessor执行时机与实现原理

这一篇主要学到了一种新的看源代码的方法。之前都是从最开始的代码开始,然后一步一步step into。这样会比较浪费时间,并且会因为代码多而容易搞混淆,抓不住重点。这篇主要是看BeanPostProcessor的执行时机与相应的源代码,目前对于它是合适执行的,并不知道,但是可以明确的是我们继承的Bea
阅读更多

Windows常见问题解决办法汇总

在windows任务栏上显示秒

https://www.ithome.com/html/win10/288555.htm
用管理员模身份运CMD/POWERSHELL,使用下面命令,在注册表中,添加相应键值。

1
Reg add HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v ShowSecondsInSystemClock /t REG_DWORD /d 1

然后重启explorer.exe进程即可。
若要改回默认设置,直接删除ShowSecondsInSystemClock,重启explorer.exe进程即可。

Win/Unix系双系统时间同步问题

原因:
Windows将硬件时间当做CST时间,直接拿来在系统中显示;关机时直接存入硬件中。
Unix系系统将硬件时间作为UTC时间,拿过来后,会转成成CST时间,即显示UTC + 8;关机时,会将系统显示的时间换算成UTC,即UTC - 8,存入硬件中。

黑苹果在开机时,如果联网了,会进行时间同步。所以会导致在黑苹果中时间显示正常,关机时存入了当前时间-8,再打开windows时,windows读取到-8后的时间,直接显示,形成一种windows总是慢8个小时的现象。

寻思着,为什么windows下面联网时不能自动同步时间呢?

解决办法(两种选一即可):

  1. 让windows认为硬件时间为UTC,拿到转换成CST。 用管理员模身份运CMD/POWERSHELL,使用下面命令,在注册表中,添加相应键值。

    1
    Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
  2. 让Unix系系统把硬件时间看做CST,直接拿来用。关机时直接存入硬件中。解决办法要根据因系统不同而有所不同。以黑苹果为例(未尝试):

    1
    2
    3
    4
    # 貌似已经404了
    sudo sh -c "$(curl -kfsSL https://raw.githubusercontent.com/hieplpvip/LocalTime-Toggle/master/fix_time_osx.sh)"
    # 脚本还有,但是没有尝试过,可以做个参考
    sudo sh -c "$(curl -fsSL https://raw.githubusercontent.com/xiaoMGithub/LocalTime-Toggle/master/fix_time_osx.sh)"

    大致的内容如下,貌似改的东西有点多啊,还是改windows算了。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #!/bin/sh
    #Script auto fix time on hackintosh
    #OSX: 10.6 and above

    DAEMON_PATH=/Library/LaunchDaemons/
    BIN_PATH=/usr/local/bin/
    TMP_PATH=/tmp/
    TIME_FIX_FILE=localtime-toggle
    TIME_DAEMON_FILE=org.osx86.localtime-toggle.plist

    echo "Downloading required file"
    sudo curl -o $TMP_PATH$TIME_FIX_FILE "https://raw.githubusercontent.com/xiaoMGithub/LocalTime-Toggle/master/sbin/localtime-toggle"
    sudo curl -o $TMP_PATH$TIME_DAEMON_FILE "https://raw.githubusercontent.com/xiaoMGithub/LocalTime-Toggle/master/Library/LaunchDaemons/org.osx86.localtime-toggle.plist"

    if [ ! -d "$BIN_PATH" ] ; then
    mkdir "$BIN_PATH" ;
    fi

    echo "Copy file to destination place..."
    sudo cp -R $TMP_PATH$TIME_FIX_FILE $BIN_PATH
    sudo cp -R $TMP_PATH$TIME_DAEMON_FILE $DAEMON_PATH
    sudo rm $TMP_PATH$TIME_FIX_FILE
    sudo rm $TMP_PATH$TIME_DAEMON_FILE

    echo "Chmod localtime-toggle..."
    sudo chmod +x $BIN_PATH$TIME_FIX_FILE
    sudo chown root $DAEMON_PATH$TIME_DAEMON_FILE
    sudo chmod 644 $DAEMON_PATH$TIME_DAEMON_FILE

    echo "Load Localtime-toggle..."
    if sudo launchctl list | grep --quiet localtime-toggle; then
    echo "Stopping existing localtime-toggle daemon."
    sudo launchctl unload $DAEMON_PATH$TIME_DAEMON_FILE
    fi
    sudo launchctl load -w $DAEMON_PATH$TIME_DAEMON_FILE

    echo "Done!"

1 | Spring:基础注解使用及场景概述

本来是打算按照书上面的内容,跟着看一看spring的实现。它是从XML中读取bean配置,感觉现在不怎么用XML来配置了,虽然可以跳过bean的读取,直接看bean的生命周期,但是毕竟现在基本上用注解,所以从网上找了一个直接基于注解讲解spring源码的视频。 视频内容讲解spring的AOP感觉很
阅读更多

0 | Spring:源代码下载、导入与Hello World

最近确实受到一些打击,开始思考人生、也开始思考自己到底缺的是什么。决定从spring源代码开始学习,是我在思考后,作出的决定。但是同时我也不会放弃netty,等稍微有点时间了,我会继续开始netty相关的学习。说起来很是惭愧,因为项目中每天都在用这个框架,也觉得自己大致懂spring是干什么的,除了
阅读更多

Netty源码学习系列④接收消息

有点开始怀疑人生。为什么我说不清楚netty的工作方式?博客基本上是自己一个字一个字敲出来的,也能在一定程度上说明,我当时确实是懂了,但为什么会说不出来呢?回顾了自己的博客,有些过程的细节确实忘了,但是可怕的是,我需要想半天才能想起来,有些还想不起来。我觉得方式有问题,单纯的文字记录,缺少指导性的图画,不利于理解整个流程。

接收客户端的消息,很明显是从Main Reactor所在的EventLoop的for循环中,通过select()获取到了OP_READ事件。


Update - 2020.3.23

Netty整个系列先暂停学习,我觉得目前应该学习的是Spring的一些更加深入的知识,不然有一种眼高手低的感觉,踏踏实实地把web的那一套先搞清楚。

Java中的线程池从精通到入门

说真的,我一直认为线程池很简单,也没去看过它的实现,大概了解过其中的原理,但是并未深入学习。一方面,了解过之后很长时间不去看,非常容易忘;另一方面,还是深入源码得到的信息才会比较深刻,还能避免背书式学习。继承结构说明在Executors中,有几个静态方法,预设了几个ThreadPoolExecuto
阅读更多

如何快速确认链表上是否存在环

这个问题遇到过很多次了,但是并不是说每次都很清楚。所以这次用golang的代码来实现一遍,加深理解与记忆。如果一个链表上不存在环,那么一定能够遍历完链表中所有的Node节点;如果存在环,那么可以想象成存在一个圆形操场。在一个圆里面,如果有两个人,行走的速度不一样,那么一定会有相遇的那一刻。最佳的解法
阅读更多

3 | SpringCloud:Gateway从入门到出坑

说句实话,我觉得Spring Cloud Gateway看起来很牛逼。首先是因为zuul的难产,颇有一种谁行谁上的感觉;再一个是WebFlux的加持,瞬间逼格就上去了。但是感觉苦逼的又回到了原点,因为WebFlux看简介是说基于Netty来实现的,绕来绕去又回到了Netty。言归正传,如果只是简单的
阅读更多

2 | SpringCloud:OpenFeign从入门到上天

在前篇的基础上,对整个demo项目进行了重新的规划,包括模块名、包名的修改,以及对接口进行了调整,并将模块调用改成了OpenFeign,这个用起来更加方便,连RestTemplate都不需要使用即可完成调用。修改之后的demo项目整体架构如下:.├── module01│   ├── module0
阅读更多