把MIT-scheme当作计算器使用 1.每个表达式d都由()圈住,当跳出最外层()时,会在前端输出值。 2.表达式之间可以嵌套,表达式形如(操作符 参数 参数 ...),而这种表达式也被称为S-表达式 3.每个操作符实际是个函数,既然MIT-scheme可以当作计算器使用,那么它也支持基本四大运算符,加、减、乘、除,分别对应+、-、*、/ 4.练习 练习 1 使用Scheme解释...
Stream API 设计原理浅析
Stream API 基本执行流程 如何理解stage 首先我们们看看抽象类ReferencePipeline的继承链 ReferencePipeline 实现Stream接口,实现了各个Stream API 操作,同时继承了PipelineHelper,根据JDK的描述,PipelineHelper是一个执行 Stream pipelines的helper,它能够捕获所以Str...
场景化二叉树遍历
前言 对于一道抽象的题目,将它放入实际的场景可以说是一个非常好的帮助理解的方式,对于二叉树的遍历方式,有前序遍历,中序遍历,后序遍历;用递归的方式求解这很容易,但是如果使用迭代的方式就有点抽象了,所以下面以中序遍历为例,讲讲如何设计它的迭代求解; 场景再现 现在有个迷宫,这个迷宫的结构其实就是一个二叉树,入口从根节点开始,迷宫的鸟瞰图如下: 现在由我们自主设计的机器人,它每次选择二叉...
Spring和SpringBoot常用注解
SpringBoot自动配置相关注解 @Import 使用@Value(“${property}”)读取简单的配置信息 @Value("${name}") String name; JPA相关注解 使用@Table标注表名 @Entity @Table("name = person") public class Person{ private String name; ...
我学二分查找遇到的坑与解决的办法
前言 本文聚焦最简单的二分查找,集中讨论那些我们不曾注意的问题,解开二分查找不简单的一面,在本文中笔者将带你重新认识二分查找 引子 有数量为n的硬币,和一个天平,已知其中有一个假币,且假币比真币轻,请找出这枚假币 我记得这种题目是在我小学遇到过的,那时候虽然不知道什么二分查找法,但脑袋一偏自然也能想到:把硬币两半分,假币就在轻的一堆,然后不断的分成均匀的两堆,最后总能找出...
Java集合
List接口 ArrayList 1.ArrayList扩容机制 以无参构造器创建的是一个空的数组,当添加第一个元素时,才会分配容量,并且容量为10 扩容机制源码没什么好深究的,因为肯定需要重新new一个容量更大的数组,然后将源数据复制进去
JPA的小demo
目标 模拟JPA的实现方式,封装底层的jdbc操作,让开发者专心于Java程序的编写而不是SQL语句 搞情况JPA与jdbc的关系,摸清Java程序与数据库交互的具体流程 练习注解与反射的配合使用 方法 1.抛入需要的jar包 <!-- JdbcTemplate依赖的jar包,使用JdbcTemplate简化jdbc操作 --> <dependency&g...
Junit的小demo
目标 模拟Junit中@Test、@Before、@After的实现方式 练习自定注解实现 探索注解的底层实现 方法 1.定义自定义注解@MyTest、@MyBefore、@MyAfter @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyTest { } ...
建造者模式
为什么需要建造者模式 已知建造者模式是用来创建对象的,工厂模式也能创建对象,或者直接使用构造函数或者配合set方法也能创建对象,那么为什么还需要建造者模式呢?建造者模式适合什么样的应用场景呢? 事实上静态工厂和构造函数都有一个局限:它们不能对大量可选参数做很好的扩展。 举个例子:一个类表示包装食品上的营养标签。这些标签上有一些字段是必需的,如:净含量、毛重和每单位份量的卡路里,另...
工厂模式
工厂模式的定义 程序设计中的工厂类往往是对象创建、初始化过程的封装,而工厂方法 (Factory Method) 则可以升华为一种设计模式,它对工厂制造方法进行接口规范化,以允许子类工厂决定具体制造哪类产品的实例,最终降低系统耦合,使系统的可维护性、可扩展性等得到提升。 一般情况下,工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂 应用工厂模式 下面以一个实际案例:空战游...