我的心跳停止救援指南

最近因为经常要坐地铁,所以入手了一款 ,功能主要有 ,`支付宝付款 消息提醒 运动辅助 心率和睡眠监控`。 到手之后才发现,NFC地铁卡不支持我所在的地区,因为手机是荣耀的缘故,所以就直接考虑了荣耀的手环。 。 这NFC一事无成,像极了人生 | | | | | | | | | 当然也不能浪费,为了物 ... »

仿写一个简陋的 IOC/AOP 框架 mini-spring

Spring 中的控制反转(IOC)和面向切面编程(AOP)思想很重要,为了更好的使用 Spring 框架,有必要理解这两个点,为此,我使用 JDK API 实现了一个玩具级的简陋 IOC/AOP 框架 mini-spring。实现了 @Controller、@AutoWired、@Componen... ... »

zookeeper源码 — 四、session建立

目录 session建立的主要过程 客户端发起连接 服务端创建session session建立的主要过程 用一张图来说明session建立过程中client和server的交互 主要流程 服务端启动,客户端启动 客户端发起socket连接 服务端accept socket连接,socket连接建立 ... »

CopyOnWriteArrayList你都不知道,怎么拿offer?

前言 只有光头才能变强 前一阵子写过一篇COW(Copy On Write)文章,结果阅读量很低啊... "COW奶牛!Copy On Write机制了解一下" 可能大家对这个技术 比较陌生 吧,但这项技术是 挺多应用场景 的。除了上文所说的Linux、文件系统外,其实在 Java 也有其身影。 大 ... »

2018年如何快速学Java

前言 只有光头才能变强 提前预警:本文 适合Java新手阅读 (老手可在评论区给下建议),希望大家看完能有所收获。 一、为什么我要写下这篇文章 1.1直接缘由: 在今天(2018年11月4日)有个同学给我发微信找我 同学:能不能给他一个网页他改一下,他想参考一下,然后用于做毕业设计。 3y:可以啊, ... »

外行人都能看懂的SpringCloud,错过了血亏!

一、前言 只有光头才能变强 认识我的朋友可能都知道我这阵子去实习啦,去的公司说是用SpringCloud(但我觉得使用的力度并不大啊~~)... 所以,这篇主要来讲讲SpringCloud的一些基础的知识。(我就是现学现卖了,主要当做我学习SpringCloud的笔记吧!)当然了,我的水平是有限的, ... »

mybatis 学习笔记(二):mybatis SQL注入问题

mybatis 学习笔记(二):mybatis SQL注入问题 SQL 注入攻击 首先了解下概念,什么叫SQL 注入: SQL注入攻击,简称SQL攻击或注入攻击,是发生于应用程序之数据库层的安全漏洞。简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了检查,那么这些注入进去的指令 ... »

mybatis 学习笔记(一):mybatis 初认识

mybatis 学习笔记(一):mybatis 初认识 简介 MyBatis是一个Java持久层框架,它通过XML描述符或注解把对象与存储过程或SQL语句关联起来。mybatis 可以将 preparedStatement 中的输入参数自动进行映射,将查询结果集灵活映射成 java 对象。所以使用 ... »

来,了解一下Java内存模型(JMM)

网上有很多关于Java内存模型的文章,在《深入理解Java虚拟机》和《Java并发编程的艺术》等书中也都有关于这个知识点的介绍。但是,很多人读完之后还是搞不清楚,甚至有的人说自己更懵了。本文,就来整体的介绍一下Java内存模型,目的很简单,让你读完本文以后,就知道到底Java内存模型是什么,为什么要 ... »

spring 学习(五):spring 事务

spring 学习(五):spring 事务 事务概要 一个数据库事务通常包含了一个序列的对数据库的读/写操作。它的存在包含有以下两个目的: 为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。 当多个应用程序在并发访问数据库时,可以在这些应 ... »

spring 学习(四): spring 的 jdbcTemplate 操作

spring 学习(四): spring 的 jdbcTemplate 操作 spring 针对 javaee 的每一层,都提供了相应的解决技术,jdbcTemplate 的主要操作在 dao 层。 下面我们来使用 jdbcTemplate 对数据库进行 crud 操作。 准备工作 1 我们首先来导 ... »

spring 学习(三):aop 学习

spring 学习(三):aop 学习 aop 概念 1 aop:面向切面(方面)编程,扩展功能不修改源代码实现 2 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码 3 aop底层使用动态代理实现 (1)第一种情况,有接口情况,使用动态代理创建接口实现类代理对象 (2)第二种情况,没有接口 ... »

Netty源码—七、内存释放

Netty本身在内存分配上支持堆内存和直接内存,我们一般选用直接内存,这也是默认的配置。所以要理解Netty内存的释放我们得先看下直接内存的释放。 Java直接内存释放 我们先来看下直接内存是怎么使用的 申请的过程是其实就是创建一个DirectByteBuffer对象的过程,DirectByteBu ... »

Netty源码—六、tiny、small内存分配

tiny内存分配 tiny内存分配流程: 1. 如果申请的是tiny类型,会先从tiny缓存中尝试分配,如果缓存分配成功则返回 1. 否则从tinySubpagePools中尝试分配 2. 如果上面没有分配成功则使用allocateNormal进行分配 从缓存中分配 这里以启用了缓存为例来说明,使用 ... »

Netty源码—五、内存分配概述

Netty中的内存管理应该是借鉴了FreeBSD内存管理的思想—— "jemalloc" 。Netty内存分配过程中总体遵循以下规则: 优先从缓存中分配 如果缓存中没有的话,从内存池看看有没有剩余可用的 如果已申请的没有的话,再真正申请内存 分段管理,每个内存大小范围使用不同的分配策略 我们先总体上 ... »

Netty源码—四、事件处理

前面经过channel初始化、注册,所需要的数据结构(epoll_event)基本上准备好了,serverSocket也处于监听状态,可以接收来自客户端的请求了。NioServerSocketChannel注册在了NioEventLoop selector,在注册过程中启动了NioEventLoop ... »

Netty源码—三、select

NioEventLoop功能 前面channel已经准备好了,可以接收来自客户端的请求了,NioEventLoop作为一个线程池,只有一个线程,但是有一个queue存储了待执行的task,由于只有一个线程,所以run方法是死循环,除非线程池shutdown。 这个run方法的主要作用: 1. 执行s ... »

Netty源码—二、server启动(2)

我们在使用Netty的时候的初始化代码一般如下 前面已经说过线程池的启动过程,接下来就是通过builder模式构造启动参数,接下来看看bind的过程。channel的注册和ip:port的绑定都是在bind方法中进行的,bind方法的主要逻辑是 1. 初始化channel 2. channel注册到 ... »

Netty源码—一、server启动(1)

Netty作为一个Java生态中的网络组件有着举足轻重的位置,各种开源中间件都使用Netty进行网络通信,比如Dubbo、RocketMQ。可以说Netty是对Java NIO的封装,比如ByteBuf、channel等的封装让网络编程更简单。 在介绍Netty服务器启动之前需要简单了解两件事: 1 ... »