JavaWeb
Alden He
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Spring IOC源码分析
参考1首先是ClassPathXmlApplicationContextClassPathXmlApplicationContext.javapublic class ClassPathXmlApplicationContext extends AbstractXmlApplicationContext {// 如果已经有 ApplicationContext 并需要配置成父子关系,那么调...转载 2019-04-16 22:25:01 · 181 阅读 · 0 评论 -
AbstractQueuedSynchronizer源码
参考文献1参考文献2参考文献3AbstractQueuedSynchronizer有以下几个熟悉// 头结点,当前持有锁的线程private transient volatile Node head;// 阻塞的尾节点,每个新的节点进来,都插入到最后,也就形成了一个链表private transient volatile Node tail;// 这个是最重要的,代表当前锁的状...转载 2019-04-15 14:09:30 · 144 阅读 · 0 评论 -
SpringBoot博客开发日常记录-文本编辑器选项
从今天开始记录每天写后端代码的记录今天主要解决了以下几个问题选择了editor.md作为文本编辑器完善了上传图片功能创建了Article表实现了将博客写入数据库的功能1. Article表我的想法是先设计简单的表,后面再加功能实现,表内容如下article | CREATE TABLE `article` ( `id` int(11) NOT NULL AUTO_INCRE...原创 2019-04-22 22:17:40 · 367 阅读 · 0 评论 -
Spring Boot博客开发日常记录-将写好的部分部署到云服务器
之前完成了写博客,展示博客两个功能,以及初步算是入门了,现在尝试将博客部署到云服务器部署的方式是采用的是 Nginx+Docker,相关步骤写在了shell中,直接调用shell可以完成自动化部署Nginx安装这部分不是主要内容,直接输入apt-get install nginx即可完成安装,很简单在来看看nginx的conf文件,/etc/nginx/nginx.confserv...原创 2019-04-27 20:43:16 · 213 阅读 · 0 评论 -
SpringBoot+SpringAOP的五种通知实现
首先增加Maven依赖<dependency> <groupId>com.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> ...原创 2019-04-19 11:11:08 · 2546 阅读 · 0 评论 -
Spring Boot博客开发日常记录-套用Spring Security进行用户登录认证
在之前的基础上,为了实现用户登录写文章的功能,加入了Spring Security进行用户认证登录,也就是SpringBoot+ Spring Security1. 创建用户表第一步就是删除上次创建的用户表,然后新建用户表DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCRE...原创 2019-04-28 22:30:27 · 382 阅读 · 1 评论 -
SpringBoot博客开发日常记录-博客浏览界面
之前是用markdown语法写博客,现在需要将博客展示这里引入了thymeleaf模板1. 编写ArticleController@Autowired ArticleService articleService; @GetMapping("/article/showArticle/{articleId}") public String showArticle(@Pat...原创 2019-04-24 15:57:36 · 321 阅读 · 0 评论 -
Spring Boot博客开发日常记录-使用邮箱注册登录
出于某些考虑,博客采用邮箱注册方式1. 编写登录界面去掉了Spring Security以后,自己编写登录登出接口,然后登录采用的方式是弹出框方式,也就是利用bootstrap中的modal<div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="examp...原创 2019-05-08 16:51:24 · 874 阅读 · 0 评论 -
Spring Boot博客开发日常记录-添加简单的评论功能
简单的评论功能是指能够在文章底下进行评论,而且能够对评论进行回复,目前实现的功能如下所示,很low,而且这个时候就遇到不会写前端的问题了我将设计评论功能分为一下几步:首先需要设计表结构然后设计html然后实现相应的功能1. 评论表的数据库设计我将评论定义为两个层级:第一个层级是对博客的评论第二个层级是对评论的回复因此设计了两个表第一个表叫ArticleComments...原创 2019-05-08 20:04:15 · 3200 阅读 · 11 评论 -
Spring Boot博客开发日常记录-加入Redis缓存
1. 引入相关依赖在pom.xml中添加以下依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency><!--sp...原创 2019-04-30 22:19:03 · 234 阅读 · 0 评论 -
io.lettuce.core.RedisCommandExecutionException: WRONGTYPE Operation against a key holding the wrong
SpringBoot 操作Redis出现如下错误io.lettuce.core.RedisCommandExecutionException: WRONGTYPE Operation against a key holding the wrong kind of value at io.lettuce.core.ExceptionFactory.createExecutionException...原创 2019-04-30 22:21:22 · 12520 阅读 · 1 评论 -
Editor.md Ctrl+V粘贴上传图片
在plugins创建文件夹image-handle-paste并在该文件夹下创建image-handle-paste.js(function() { var factory = function (exports) { var $ = jQuery; // if using module loader(Require.js/Se...转载 2019-04-30 22:30:15 · 1431 阅读 · 0 评论 -
SpringBoot博客开发日常记录-搜索功能以及搜索词汇云图显示
博客中需要包含一个简单的检索功能,我自己设定的目标是能够通过检索一定的关键词来获取带有这些关键词的标题的博客列表,并且能够通过云图展示搜索趋势。1. Service在ArticleService.java中添加三个方法//模糊查找 title的相关内容List<Article> getArticleListByTitle(String contents);//搜索记录相关L...原创 2019-05-23 21:36:06 · 2570 阅读 · 1 评论 -
Spring AOP源码分析
参考文献在IOC源码中,BenaPostProcessor有两个方法public interface BeanPostProcessor { Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException; Object postProcessAfterInit...转载 2019-04-19 10:04:31 · 216 阅读 · 0 评论 -
计算机网络一些知识点
OSI模型OSITCP/IP协议功能应用层应用层HTTP,SMTP,RTP,DNS为应用程序提供服务表示会话传输传输层TCP UDP建立,管理和维护会话网络网络层IP ICMPIP选址及路由选择数据链路数据链路层DSL SONET 802.11提供介质访问和链路管理物理物理层物理层IPv4...转载 2019-04-14 21:06:24 · 249 阅读 · 0 评论 -
JVM一些概念
JVM线程隔离区:虚拟机栈(生命周期和线程相同),本地方法栈(执行native方法),程序计数器(当前线程所执行的字节码的行号指示器,执行native方法时为空)共享区:栈(存放对象实例和数组),方法区(加载的类信息,静态变量,常量,即时编译后的代码)垃圾收集算法:标记清除:空间碎片过多,效率不高(G1,CMS)复制算法:可用内存缩小,对象存活率高时效率低(Serial,ParNe...转载 2019-04-14 21:07:57 · 237 阅读 · 0 评论 -
ThreadPoolExecutor源码
Executor->ExecutorService->AbstractExecutorService->ThreadPoolExecutorCallable 也是因为线程池的需要,所以才有了这个接口。它和 Runnable 的区别在于 run() 没有返回值,而 Callable 的 call() 方法有返回值,同时,如果运行出现异常,call() 方法会抛出异常。Fut...转载 2019-04-14 21:08:39 · 188 阅读 · 0 评论 -
ReentrantLock源码
ReentrantLock实现了Lock和Serializable接口Sync类继承了AbstractQueuedSynchronizer默认非公平锁支持可重入公平锁的tryAcquire和非公平锁的tryAcquire基本一致,只是再获取锁时先判断当前节点是否有前驱节点阻塞队列不包含head,延迟初始化head,也就是只有第二个线程有冲突,才会初始化head非公平锁在调用 lock...转载 2019-04-14 21:09:43 · 224 阅读 · 0 评论 -
HashMap源码
HashMap使用数组+链表+红黑树1.7版本在扩容的时候会出现环状链表解决Hash冲突的办法:链地址法(其他方法:在散列法,在哈希法,建立一个公共溢区)1.7版本在扩容的时候链表会出现环的问题,因为在transfer时会反转链表,但是1.8版本并没有反转链表,1.8扩容时不需要重新计算Hash,只需要判断新增的一位是0还是1HashMap.javapublic class Has...转载 2019-04-14 21:10:15 · 135 阅读 · 0 评论 -
ConcurrentHashMap源码
ConcurrentHashMap如果数组长度小于64,则会进行扩容不会转为红黑树在进行transfer时支持对线程,将整个transfer任务分解为多个任务单核直接为n,最小值为16Node数组+链表+红黑树线程安全LongAdder也是分段锁思想:LongAdder类与AtomicLong类的区别在于高并发时前者将对单一变量的CAS操作分散为对数组cells中多个元素的CAS操作,...转载 2019-04-14 21:10:44 · 126 阅读 · 0 评论 -
MySQL一些概念
数据库设计三大范式1NF:数据表每一列不可拆分(原子性)2NF:每一列都与主键相关(只描述一件事)3NF:每张表都只与主键直接相关Left join/Right join使用事务保持数据一致性和完整性Begin:Commit使用外键在频繁进行排序分组的列上建立索引事务原子性:事务包含的操作要么全部成功,要不全部失败回滚一致性:事务执行前后处于一致性状态隔离性:当多个...转载 2019-04-14 21:11:27 · 213 阅读 · 0 评论 -
Java一些基础知识
JAVA类加载器根类加载器:jre/lib扩展类加载器:jre/lib/ext扩展类库应用类加载器:用户自己定义的类双亲委派模型调用类加载器的LoadClass方法进行类加载时(需要加锁synchronized),该类加载器会首先请求父类加载器,依次递归,如果所有的父类加载器都加载失败,则当前类加载器自己进行加载操作(避免用户自定义的类覆盖核心类库),如果找不到抛出NoSuchC...转载 2019-04-14 21:11:55 · 130 阅读 · 0 评论 -
Spring Bean的生命周期和作用域
Bean实例的创建:默认是单例为Bean实例设置属性,执行Bean的属性的依赖注入依赖注入:构造方法注入,set方法注入,注解注入(@Autowired)调用Bean实例的初始化方法:initializeBean方法如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String)方法,此处传递的就是Spring配置文件中Bean的i...转载 2019-04-14 21:12:25 · 330 阅读 · 0 评论 -
ThreadLocal源码
ThreadLocal实际通过ThreadLocal创建的副本存储在每个线程自己的ThreadLocals中,ThreadLocal.ThreadLocalMap threadLocals = null;每个线程可以有多个threadLocals变量在get之前需要set,否则会有空指针异常Entry是弱引用:保证ThreadLocal的生命周期与线程相同,方便GC通...转载 2019-04-14 21:13:04 · 210 阅读 · 0 评论 -
SpringBoot拦截器
一般实现定义一个拦截器类MyInterceptor.java 实现HandlerInterceptor 接口import org.json.JSONObject;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Component;import ...原创 2019-04-15 09:42:42 · 147 阅读 · 0 评论 -
单例模式
饿汉模式public class Singleton1 { // 私有构造 private Singleton1() {} private static Singleton1 single = new Singleton1(); // 静态工厂方法 public static Singleton1 getInstance() { ret...转载 2019-04-15 09:42:03 · 128 阅读 · 0 评论 -
使用LinkedHashMap实现简单的LRU Cache
最久未使用淘汰算法(LRU)是淘汰最长时间未被使用的页面的缓存淘汰算法,需要实现一个简单的原型,可以使用LinkedHashMap,LinkedHashMap中有一个protected方法removeEldestEntry,该方法在执行完插入以后执行,返回的是一个boolean型变量,为true时remove eldest entryimport java.util.LinkedHashMap;...原创 2019-08-25 21:14:15 · 186 阅读 · 0 评论
分享