JDBC、Hibernate、MyBatis

JDBC 简介

JDBC:Java Data Base Connectivity(Java数据库连接)

它是用于 Java 和数据库之间的数据库无关连接的标准 Java API。
即:JDBC 是用于在 Java 中与数据库连接的 API。

JDBC 库包括通常与数据库使用相关,如:

  • 连接到数据库
  • 创建 SQL 语句
  • 在数据库中执行 SQL 查询
  • 查看和修改结果记录

从根本上说,JDBC 是一个规范,它提供了一整套接口,允许以一种可移植的访问底层数据库 API。

Read more

Spring 和 SpringBoot

Spring

Spring 框架简介

简介

Spring 是一个为了解决企业应用程序开发复杂性而创建的开源框架。它的主要优势之一就是分层架构,允许你选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。

Spring 框架是一个分层架构,由 7 个定义良好的模块组成。
Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式:

Spring

Read more

事务注解

什么是事务

在使用应用软件过程中,用户的一个操作实际是对数据读写的多步操作的结合。

由于数据操作在顺序执行的过程中,任何一步操作都有可能发生异常,异常会导致后续操作无法完成,此时由于业务逻辑并未正确的完成,之前成功操作数据的并不可靠,需要在这种情况下进行回退。

事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异常就回退到事务开始未进行操作的状态。

Read more

二叉搜索树

二叉搜索树/二叉排序树(Binary Search Tree):

二叉搜索树

  1. 根的左子树不空,则左子树上所有结点的值均小于它的根结点的值。
  2. 根的右子树不空,则右子树上所有结点的值均大于它的根结点的值。
  3. 根的左、右子树也分别为二叉搜索树。
Read more

线段树

线段树/区间树(Segment tree)是一种二叉搜索树:

线段树

特点:

  • 每个结点表示的是一个线段,或者说是一个区间。
  • 当父节点的区间为$[x, y]$时,左孩子的区间就为$[x, \frac{ (x + y) }{ 2 }]$,右孩子的区间就为$[\frac{ (x + y) }{ 2 } + 1, y]$。
  • 对于每一棵线段树上的节点,都有三个值:左区间、右区间以及权值。
    (在某些情况下只有左右区间,这个时候线段树只是作为维护某个值而使用的数据结构,如扫描线)

线段树主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为 O(logN)。而未优化的空间复杂度为 2N,因此有时需要离散化来压缩空间。

Read more

字典树

字典树/前缀树/单词查找树/键树(Trie):

字典树

上图表示了关键字集合 {“a”, “to”, “tea”, “ted”, “ten”, “i”, “in”, “inn”} 。

基本性质:

  1. 根节点不包含字符,除根节点外的每一个子节点都包含一个字符。
  2. 从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。
  3. 每个节点的所有子节点包含的字符互不相同。
  4. 从第一字符开始有连续重复的字符只占用一个节点,比如上面的to,和ten,中重复的单词t只占用了一个节点。

应用:

  1. 前缀匹配
  2. 字符串检索
  3. 词频统计
  4. 字符串排序
Read more

Bash游戏

Bash游戏

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1066

有一堆石子共有N个。A B两个人轮流拿,A先拿。每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜。
假设A B都非常聪明,拿石子的过程中不会出现失误。给出N和K,问最后谁能赢得比赛。

例如N = 3,K = 2。无论A如何拿,B都可以拿到最后1颗石子。

Read more