技术向

Java 学习记录-Java核心类-字符串和编码、StringBuilder、StringJoiner

核心类 字符串 StringBuilder StringJoiner 包装类型 JavaBean 枚举类 常用工具类 字符串 在Java中,String是一个引用类型,它本身也是一个class,在String内部是通过一个char[]数组表示。 Java字符串的一个重要特点就是字符串不可变。这种不可变性是通过内部的private final char[]字段,以及没有任何修改char[]的方法实现的。 字符串比较 当我们想要比较两个字符串是否相同时,要特别注意,我们实际上是想比较字符串的内容是否相同。必须使用equals()方法而不能用==,因为== 比较的是引用地址。 两个字符串比较,必须总是使用equals()方法。 要忽略大小写比较,使用equalsIgnoreCase()方法。 搜索子串 “Hello”.contains(“ll”); // true “Hello”.indexOf(“l”); // 2 “Hello”.lastIndexOf(“l”); // 3 “Hello”.startsWith(“He”); // true “Hello”.endsWith(“lo”); // true 提取子串 “Hello”.substring(2); // “llo” “Hello”.substring(2, 4); “ll” 去除首尾空白字符 使用trim()方法可以移除字符串首尾空白字符。空白字符包括空格,\t,\r,\n,注意:trim()并没有改变字符串的内容,而是返回了一个新字符串。 另一个strip()方法也可以移除字符串首尾空白字符。它和trim()不同的是,类似中文的空格字符\u3000也会被移除。 String还提供了isEmpty()和isBlank()来判断字符串是否为空和空白字符串: “”.isEmpty(); // true,因为字符串长度为0 ” “.isEmpty(); // false,因为字符串长度不为0 ” \n”.isBlank(); // true,因为只包含空白字符 …

Java 学习记录-Java核心类-字符串和编码、StringBuilder、StringJoiner Read More »

Java 学习记录-面对对象基础

方法 构造方法 方法重载 在一个类中,我们可以定义多个方法。如果有一系列方法,它们的功能都是类似的,只有参数有所不同,那么,可以把这一组方法名做成同名方法。 方法名相同,但各自的参数不同,称为方法重载(Overload)。 注意:方法重载的返回值类型通常都是相同的。 方法重载的目的是,功能类似的方法使用同一名字,更容易记住,因此,调用起来更简单。 继承 instanceof实际上判断一个变量所指向的实例是否是指定类型,或者这个类型的子类。如果一个引用变量为null,那么对任何instanceof的判断都为false。 区分继承和组合 继承是is关系,组合是has关系。 多态与@Override Java的实例方法调用是基于运行时的实际类型的动态调用,而非变量的声明类型。 这个非常重要的特性在面向对象编程中称之为多态。它的英文拼写非常复杂:Polymorphic。 定义:多态是指,针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法。 多态具有一个非常强大的功能,就是允许添加更多类型的子类实现功能扩展,却不需要修改基于父类的代码。 Final 1. 如果一个类不希望任何其他类继承自它,那么可以把这个类本身标记为final。用final修饰的类不能被继承。 2. 继承可以允许子类覆写父类的方法。如果一个父类不允许子类对它的某个方法进行覆写,可以把该方法标记为final。用final修饰的方法不能被Override。 3. 对于一个类的实例字段,同样可以用final修饰。用final修饰的字段在初始化后不能被修改。可以在构造方法中初始化final字段: class Person { public final String name; public Person(String name) { this.name = name; } } 这种方法更为常用,因为可以保证实例一旦创建,其final字段就不可修改。 4. 用final修饰局部变量可以阻止被重新赋值。 抽象类abstract class与接口 interface   静态字段和静态方法   包与作用域   内部类   classpath和jar   模块 …

Java 学习记录-面对对象基础 Read More »

Java 学习记录-入门内容

入口程序规定 Java入口程序规定的方法必须是静态方法,方法名必须为main,括号内的参数必须是String数组。 public class Hello { public static void main(String[] args) { // 方法名是main // 方法代码… } // 方法定义结束 } 注释 // 这是注释… /* 这是注释 blablabla… 这也是注释 */ /** * 可以用来自动创建文档的注释 * * @auther liaoxuefeng */ 数据类型 基本数据类型 整数类型:byte, short, int, long 浮点数类型:float, double 字符类型:char 布尔类型:boolean 计算机内存的最小存储单元是字节(byte),一个字节就是一个8位二进制数,即8个bit。 注意char类型使用单引号’,且仅有一个字符,要和双引号”的字符串类型区分开。 引用数据类型 除了上述基本类型的变量,剩下的都是引用类型。 字符串 … 引用类型的变量类似于C语言的指针,它内部存储一个“地址”,指向某个对象在内存的位置。 常量 常量在定义时进行初始化后就不可再次赋值,再次赋值会导致编译错误。 …

Java 学习记录-入门内容 Read More »

《数据结构与算法》第一章 绪论

程序开发过程 程序开发就是根据面对的问题,最终得到一个可以解决问题的程序的工作过程。 分析阶段:弄清问题 设计阶段:设计解决问题的计算过程模型 计算中处理的「数据」 求解问题的计算方法「算法」 编码阶段 检查编译即阶段 测试/调试阶段 算法 三个基本概念 问题:一个问题W是需要解决的一个具体需求,描述的是一些列类似问题的集合,例如判断任一个正整数N是否为素数。问题W显示其所有实例的共性。 问题实例:问题W的一个实例w是该问题的一个具体例子,通常通过一组具体的参数设定。例如断定1013是否为素数。 算法:解决问题W的一个算法A,是对一种计算过程的严格描述。对W的任何一个实例w,实施算法A描述的计算过程,就能得到w的解。例如,一个判断素数的算法应该能给出1013是否为素数的判断,也能判断其他正整数是否为素数。 算法的性质 有穷性 能行性 确定性 终止性 输入/输出 算法设计模式 枚举法 贪心法 回溯发(搜索法) 动态规划法 分支界限法    典型数据结构 集合结构 序列结构 层次结构 树形结构 图结构 Python对象与数据结构 Python语言的变量存储是引用语义的,并且其实现过程是基于一套精心设计的的链接结构。 C语言是值语义,链接结构的另一种结构叫连续结构。 想要高效使用Python,需要关注两个方面的问题: 人们经常需要自己设计一些数据结构,这是需要考虑实现的效率问题,需要对构造的数据结构的基本技术有所了解。 使用语言本身踢狗的各种高级结构「list、dict等」,也需要对这些结构的基本性质,以及实现它们的基本原理有准确理解,才能正确有效地使用它们。 Pyhton 的几个标准数据类型 List 表 tuple 元组 dict 字典

全栈工程师职业技术图谱

图 概念 方向 设计: 视觉「SketchBook,Copic库」 Responsive web design 互动 测试 Linters and Formatters – Prettier, ESLint Vue.js TypeScript in a real projet Progressive Web Apps GraphQL Desktop Applications – Electron 设计: 数据库 接口 RESTful APIs 认证 / 授权「Authentication/Authorization」 缓存 redis Web Socket「服务器推送消息给前端,前后端长时间交流」 内容搜索 上传文件 图片原始像素保护技术 邮件 支付 功能: 分析「输入数据->返回图片或数据」 测试 缓存 – Redis 消息队列 – …

全栈工程师职业技术图谱 Read More »

Docker 技术学习

Docker 命令 list of container existed docker container ls list of running containers docker ps list of all containers docker ps -a enter container docker exec -it d27bd3008ad9 /bin/bash stop all running containers docker stop $(docker ps -q) remove all containers docker rm $(docker ps -aq) stop and remove containers docker stop $(docker ps -q) …

Docker 技术学习 Read More »

Rxjs 技术学习

两个基本问题: Rxjs 是干什么的? Rxjs 是使用 Observables 的响应式编程的库,它使编写异步或基于回调的代码更容易。 它解决了什么问题? 同步和异步的统一写法 数据变更过程的组合拆分 数据和视图的精确绑定 条件变更后,对应数据自动重新计算 理解rxjs的前置知识点 同步与异步 同步(Synchronous)就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果。是一种线性执行的方式,执行的流程不能跨越。一般用于流程性比较强的程序,比如用户登录,需要对用户验证完成后才能登录系统。 异步(Asynchronous)则是只是发送了调用的指令,调用者无需等待被调用的方法完全执行完毕;而是继续执行下面的流程。是一种并行处理的方式,不必等待一个程序执行完,可以执行其它的任务,比如页面数据加载过程,不需要等所有数据获取后再显示页面。 同步与异步的区别 传统的同步编程是一种请求响应模型,调用一个方法,等待其响应返回.。而异步编程就是,发出一个任务,不等待结果,就继续发出下一个任务。至于上一个任务的执行结果,我们可以通过两种方式获得,一个是主动轮询,另一个是单独开一个线程去等待结果接收并回调执行。 响应式编程 响应式编程是使用异步数据流进行编程 Stream/流 作为响应式编程的核心,流的本质是一个按时间顺序排列的进行中事件的序列集合。 它可以发送三种不同的事情: 某种类型的值 错误(Error) 已完成信号(”Completed” Signal) 对于一个点击事件,返回多次点击事件 观察者模式 观察者模式又叫发布订阅模式(Publish/Subscribe),它是一种一对多的关系,让多个观察者(Obesver)同时监听一个主题(Subject),这个主题也就是被观察者(Observable),被观察者的状态发生变化时就会通知所有的观察者,使得它们能够接收到更新的内容。观察者模式主题和观察者是分离的,不是主动触发而是被动监听。 迭代器模式 迭代器(Iterator)模式又叫游标(Sursor)模式,迭代器具有 next 方法,可以顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表现。迭代器模式可以把迭代的过程从从业务逻辑中分离出来,迭代器将使用者和目标对象隔离开来,即使不了解对象的内部构造,也可以通过迭代器提供的方法顺序访问其每个元素。 例如在 JavaScript 中,可以通过 iterator 方法来获取一个迭代对象,然后调用迭代对象的 next 方法去迭代得到一个个的元素: var iterable = [1, 2]; var iterator = iterable[Symbol.iterator](); iterator.next(); // => { value: …

Rxjs 技术学习 Read More »

React native 与 React 的区别

Styles not .scss // 前端js文件 const styles = { // 这里不需要像RN一样,使用StyleSheet.create someContainer: { fontSize:16, fontWeight: ‘bold’, }, … }<div style={styles.container} /> { flex: 1 1 auto } -> { flexGrow: 1, flexShrink: 1, flexBasis: “auto” } { background: “#DADADA” } -> { backgroundColor: “#DADADA” } image <img style={{ width: 98, height: 82 }} src={nullImg} alt=”nullImg” …

React native 与 React 的区别 Read More »