微信小程序《日常》

引言

  1. 优秀的人之所以优秀,是因为他们的生活已经规范化,他们养成了一个又一个好习惯,到了某个时间,习惯会推动他们做事,不需要靠意志力。正如小老鼠走迷宫的实验,经过上百次不断重复走迷宫的经历,老鼠的习惯回路就形成在大脑里面,大脑将其编入习惯系统里面,然后就可以刻意地记住应该怎么走。为了要构建某个习惯,我们必须刻意的去做这件事情,如果把它存在脑子里面就会增加负担,所以必须把它可视化,这样就比较容易能够记得住,比较容易能够标准化的去进行刻意练习 。
  1. 我们大部分的拖延、迷茫、焦虑都是因为没有目标引起的。因为没有目标,做事没有方向感,注意力不集中,很容易被其他事情吸引,比如计划好学习,抖音却刷的停不下来。目标要定制的合理,可以是预期的,潜意识里对目标产生渴望,驱动你去努力实现它。

本小程序专注于用户的习惯培养,帮助用户构建习惯,懂得时间管理,合理利用零碎时间,培养兴趣,为生活创造价值。

开源地址:

https://gitee.com/yolin121/daily

阅读更多...

Mybatis核心知识整理

MyBatis

MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射,免除了几乎所有的jdbc代码以及设置参数和获取结果集的工作,它可以通过简单的xml或注解来配置java对象作为数据库中的记录。

MyBatis的编程步骤

  1. 创建SqlSessionFactory
  2. 通过SqlSessionFactory创建SqlSession
  3. 通过SqlSession执行数据库操作
  4. 调用session.commit()提交事务
  5. 调用session.close()关闭对话

MyBatis工作原理

  1. 读取MyBatis配置文件(mybatis-config.xml).它配置了MyBatis的运行环境等信息,例如数据库连接信息
  2. 加载映射文件,即SQL映射文件,改文件配置了操作数据库的sql语句
  3. 构造会话工厂SQLSessionFactory
  4. 根据会话工厂创建会话对象sqlSession,该对象包含了执行sql语句的所有方法
  5. Executor执行器,MyBatis底层定义了一个Executor接口来操作数据库,它根据sqlSession传递的参数动态地生成需要执行的sql语句
  6. MappedStatement对象,用于对映射信息的封装用于存储要映射的sql语句的id,参数等
  7. 输入参数映射,输入参数类型可以是Map、List等集合类型,也可以是基本数据类型
  8. 输出结果映射。
阅读更多...

Redis事务及实现乐观锁

事务

  • 事务是一个单独的隔离操作:事务中所有命令都会序列化并按照顺序执行,不会被其他客户端发送来的命令打断
  • 事务是一个原子操作:事务中的命令要么全被执行,要么全失败

① 原子性 ( Atomic )

  • 事务的操作作为整体执行,要么全部执行,要么全部失败

    ② 一致性 ( Consistency )

  • 数据在执行前和执行后处于一致状态

    ③ 隔离性 ( Isolation )

  • 多个事务之间是隔离的,互不影响

    ④ 持久性 ( Durability )

  • 一旦事务提交了,会持久化写到数据库,对数据库的修改是永久性的

Redis事务

Redis事务本质

一组命令的集合(multi、exec、watch等)!一个事务中的所有命令都会被序列化,在事务执行的过程中,会按照顺序执行。

因Redis是单进程的,所以也理解为事务总是带有隔离性的,但事务没有隔离级别的概念

阅读更多...

初识Redis

什么是Redis?

Redis 是一个使用 C 语言写成的高性能非关系型数据库。它支持存储的多种数据 类型,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和 hash(哈希类型)。Redis的数据都基于缓存的,所以很快,每秒可以处理超过 10万次读写操 作。为保证数据的安全不丢失,也可以实现数据写入磁盘中,而且Redis的操作是原子性(对数据的更改要么全部执行,要么全部不执行 )的。

优缺点

  • 优点:
    • 读写性能优异,Redis能读的速度是11万次/s,写的速度是81000次/s
    • 支持数据的持久化(AOF和RDB)
    • 支持事务,redis所有操作都是原子性的
    • 数据结构丰富
  • 缺点:
    • 数据库容量受到物理内存的限制
    • 不具备恢复功能,最怕主机宕机

Redis为什么这么快

  1. 完全基于内存,速度非常快
  2. 采用单线程,避免了上下文切换所耗费的时间,也不会有各种锁问题的性能消耗
  3. 使用多路I/O复用模型,非阻塞IO
  4. 底层模型是Redis自己构建了VM机制
阅读更多...

注解实现原理

一、前言

关于注解这一块内容,我个人觉得比较模糊的一个原因就是,我知道如何去定义一个注解,如何使用它,至于为什么要这样用?底层原理的话就不太晓得了,更是在学了Spring框架后越发觉得原理很重要,为什么一个配置就可以自动将类进行装载,随用随取呢?

特此记录学习日志,以便查漏补缺。

二、注解回顾

注解的理解

其实注解和注释是很像的,注释是给人看的,注解是给程序看的

来看一段代码

1
2
3
4
5
6
7
8
@Repository
public class Admin extends Entity {
private Integer id;
private String account;
private String password;
private String name;
private String remark;
}
阅读更多...

Java知识汇总(日常更新)

Java基础

面向对象

1. 面向对象的优缺点

  • 优点:容易维护、复用、扩展。由于面向对象有封装、继承和多态三大特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
  • 缺点:性能比面向过程低

构造函数

是一种特殊的方法,主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。

2. 封装

把一个对象的属性私有化,同时提供一些可以被外界访问的属性和方法,便于使用,提高复用性和安全性。

3. 继承

使用已存在的类作为基础并建立新的类,新的类可以定义自己的属性和方法,也可以使用父类非private修饰的属性和方法。

4. 多态

多态分为编译时多态和运行时多态,其中编译时多态主要指方法的重载,运行时多态指的是方法的重写。

多态的实现

Java实现多态有三个必要条件:

  • 继承:多态中必须存在继承关系
  • 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法
  • 向上转型(父类引用指向子类对象):多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。
阅读更多...

HashMap探究

HashMap实现原理

HashMap是基于Hash算法实现的,是通过put(key,value)存储,get(key)来获取,当传入key时,会根据key 的HashCode方法计算Hash值,根据Hash值将value保存在bucket里,当计算的Hash值相同时称为Hash冲突,HashMap的做法是用链表和红黑树来存储Hash值相同的value,是当数组大于等于64,链表长度达到8时会转换为红黑树(泊松分布)

用String作为key有什么好处?

HashMap是通过key的HashCode来确定value的存储位置,因为字符串是不可变的,所以在创建的时候,它的Hashcode被缓存下来,不需要计算,所以相比其它对象更快。

Hash的概念

Hash的基本概念就是把任意长度的输入通过一个hash算法之后,映射成固定长度的输出

阅读更多...

JVM探究

JVM内存结构

JDK1.8为何用元空间取代永久代?

类及方法的信息等比较难确定其大小,因此对于永久代大小指定比较困难,太小容易出现永久代溢出,太大容易出现老年代溢出。

而且永久代为GC带来不必要的复杂度,且回收效率低。

字符串常量、类文件常量池所在区域

字符串常量在堆中分配,类文件常量池位于方法区,即元空间。

阅读更多...

多线程内容梳理

前言

本文针对多线程的内容进行梳理和总结,对之前的文章做以扩充,且持续更新

什么是进程和线程?区别是什么?

  • 进程是系统进行资源分配和调用的基本单位,通俗的讲就是内存中运行的程序,每个进程都有自己独立的一块内存空间,一个进程可以有多个线程
  • 线程是进程中的一个控制单元,负责当前进程中程序的执行,一个进程至少有一个线程,多个线程可以共享数据。
  • 区别:
    • (内存分配) 同一进程的线程共享地址空间和资源,而进程之间的地址空间和资源是相互独立的。
    • (影响关系) 一个进程崩溃后,在保护模式下不会对其他进程产生影响,但一个线程崩溃整个程序会死掉,所以多进程比多进程健壮。
阅读更多...

请我喝杯咖啡吧~

支付宝
微信