OnJava8笔记
本文主要整理了 OnJava8 的阅读笔记。
第三章 万物皆对象对象操纵:在 Java 中程序员实际操作的是对象的引用,方法参数中传递的也只是对象的引用。
对象创建:new。
数据存储:
寄存器:Java 中不存在该方式。
栈内存:存放一些 Java 数据,比如对象的引用。
堆内存:Java 对象都存于其中。
常量内存:程序代码中,不会改变。
非 RAM 存储:序列化对象(用于传送)和持久化对象(用于恢复)。
基本类型的存储:不是通过 new 创建,变量直接存储值。有 boolean,byte,short,char,int,float,long,double,void。boolean 类型的大小没有明确规定。
高精度数值:BigInteger 和 BigDecimal。
数组的存储:当创建对象数组的时候,实际上是对象引用的数组,初始化为 null。
代码注释:/* ... */ 和 //。
对象清理:
作用域:{} 决定,不允许父作用域和子作用域声明相同的变量。
对象作用域:使用 new 关键字创建的 Java 对象生命周期超出作用域。
类的 ...
hexo和typora搭配写博客
本文介绍使用Typora写博客,使用Hexo发布文章的技巧。主要涉及图片的路径问题。
解决Hexo图片路径问题在使用Typora的时候,首先进入到Typora的设置里面,将图片插入格式改为如下设置:
这样的话,在写作的时候,我们就可以实时预览到自己插入的图片了。
接着,在博客仓库的_config.yml中设置post_asset_folder: true。
但是这样设置的话会产生一个问题,就是在执行hexo g的时候,得到的博客文章路径会多一个{{title}},导致图片在发布的时候渲染不出来。为了解决这个问题,可以使用hexo-typora-img,
1npm i hexo-typora-img
这个插件会将原来的路径在渲染前将其改为Hexo可以识别的图片路径,从而在预览发布的时候也可以看到图片。
Redis 设计与实现笔记
本文章是对《Redis 设计与实现》书籍的一个整理笔记,记录了其中个人认为比较重要的部分。
第二章 简单动态字符串
SDS 定义:
SDS 与 C 字符串的区别:
常数复杂度获取字符串的长度
杜绝缓冲区溢出
减少修改字符串时带来的内存分配的次数,包括空间预分配和惰性空间释放
二进制安全
兼容部分 C 字符串函数
第二章 链表
Redis 的链表实现的特性可以总结如下:
双端
无环
带表头指针和表尾指针
带链表长度计数器
多态:链表节点使用 void*指针来保存节点值,并且可以通过 list 结构的 dup,free,match 三个属性为节点值设置类型特定函数,所以链表可以用于保存各种不同类型的值
第三章 字典
Redis 普通状态下的字典:
哈希算法:首先计算哈希值,然后计算出索引值
Redis 使用的 MurmurHash 算法计算建的哈希值,该算法的优点在于即使输入的键时有规律的,算法仍然能给出一个很好的随机分布性。
解决键冲突:使用链地址法解决键冲突,使用头插法进行插入。
rehash:当负载因子过大的时候,就会开始进行相应的扩展或者收缩 ...
使用 Travis CI持续部署博客
本文主要介绍使用 Travis 来自动将我们的博客内容 push 到 Github Page 上,也就是所谓的持续集成/持续部署。
持续集成Travis CI 提供的是持续集成服务(Continuous Integration,简称 CI)。它绑定 Github 上面的项目,只要有新的代码,就会自动抓取。然后,提供一个运行环境,执行测试,完成构建,还能部署到服务器。
持续集成指的是只要代码有变更,就自动运行构建和测试,反馈运行结果。确保符合预期以后,再将新代码”集成”到主干。
持续集成的好处在于,每次代码的小幅变更,就能看到运行结果,从而不断累积小的变更,而不是在开发周期结束时,一下子合并一大块代码。
使用 Travis 持续部署博客我们的博客使用 Hexo 生成,博客的仓库是名是<username>.github.io。有两个分支,其中 master 分支用于放置我们的内容,而 hexo-project 分支用于存储我们的 hexo 工程文件。
首先登录到官网:travis-ci.org,接着点击右上角个人头像,选择博客的仓库,并且打开开关。一旦我们激活了这 ...
Nodejs 用户注册登录和授权处理
本文介绍 Nodejs 搭配 Express 框架实现服务器中常见的功能:用户注册登录和授权的处理。
用户注册逻辑首先我们新建一个 Express 服务器:
12345678// server.jsconst express = require('express')const app = express()// 处理 POST 中的 Body 数据app.use(express.json())app.listen(3000)
接着使用 MongoDB 来新建一个 Collection 的 Model 对象:
12345678910111213141516171819202122232425// models.jsconst mongoose = require('mongoose')mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true, useUnifiedTopology: true, useCreateIn ...
Vim常用命令
本文介绍Vim中常用的命令,帮助我们快速使用Vim处理文本文档。
基本操作在Vim中一共有三种模式:命令模式,插入模式和编辑模式(Visual mode)。
在命令模式下可以使用h,j,k,l来移动,分别表示左下上右四个移动方向。
命令模式下使用x来删除单个字符。
命令模式下使用u来撤销,使用CTRL-R来取消撤销。
使用:wq保存文件并且退出,使用:q!强制退出。
使用i在光标前插入字符,使用a在光标后插入字符。
删除一整行使用dd命令。
在光标下插入新行使用o命令,在光标上插入新行使用O命令。
有些命令可以先输入Count值,再输入命令,表示的意思就是执行命令Count次。9k表示上移9行,3x表示删除三个字符。
快速操作
单词间移动:w表示后移到单词的开头,b表示前移到单词的开头。
行首和行末移动:$表示移动到本行行尾,^表示移动到本行开头。
行内单个字符查找:fx表示查找从光标向右查找字符x,Fx表示从光标向左查找字符x。
移动到特定行:<num>G表示移动到num行,gg表示移动到第一行,G表示移动到最后一行。
显示行号::set nu。
滑动窗口:CTR ...
MySQL基本操作
本文介绍MySQL数据库的简单使用方法,包括数据库的启动和连接,以及数据的增删改查等。操作环境在CentOS 7中。
数据库连接和断开连接在进行数据库的连接之前,我们需要先启动数据库服务:
1shell> systemctl start mysqld.service
数据库连接命令:
12shell> mysql [-h host] -u root -pEnter password: *****
缺省host就表示连接本地的mysql数据库。
数据库断开连接:
12mysql> quitBye
查询连接到mysql后,可以查询版本信息,当前日期和时间和当前用户:
1234567mysql> SELECT VERSION(), CURDATE(), NOW(), USER();+-----------+--------------+---------------------+----------------+| VERSION() | CURDATE() | NOW() | USER() |+------ ...
CentOS 7安装常用软件方法
本文将会在CentOS 7的情况下安装一下常用的开发软件,主要记录在软件安装中遇到的问题和解决问题的方法。
概述由于国内的网络等原因,国外的一些资源或者被墙,或者是网络连接的速度慢,这个时候就需要我们使用镜像等网络资源来提高自己获取资源的速度。
实例MySQL 8.0安装CentOS 7中可能已经预安装了Mariadb,我们首先可以查询一下是否安装了Mariadb,如果安装了就直接卸载这个数据库:
12rpm -qa | grep mariadb*rpm -e --nodeps mariadb*
接下来下载MySQL官方的Yum Repository并且进行安装,注意具体的版本可以自己选择:
123wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm #根据版本选择rpm -ivh mysql-community-release-el7-5.noarch.rpmyum install mysql-server # 安装
但是由于网络原因,资源下载速率很慢,这个时候我们可以根据输出信息来决定下载的包 ...
Nginx 使用教程
本章学习如何在 CentOS 7下使用 Nginx 来搭建反向代理和配置动静分离以及负载均衡过程的步骤。
Nginx 基本概念Nginx简介Nginx是以一个高性能的HTTP和反向代理服务器,特点是内存占用小,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现良好。Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能够经受高负载的考验,有报告表明它能支持高达50000个并发连接数。
反向代理在介绍反向代理之前,我们先介绍一下正向代理。正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从原始服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转交并且将获得的内容返回给客户端。正向代理的情况下客户端必须要进行一些特别的设置才能使用。正向代理实际上代理的是用户。
反向代理正好相反。对于客户端来说,反向代理就好像目标服务器。并且客户端不需要进行任何设置。客户端向反向代理发送请求,接着反向代理判断请求走向何处,并将请求转交给客户端,使得这些内容就好似他自己一样,一次客户端并不会感知到反向代理后 ...
训练和评估
本节主要从两方面学习模型的训练和评估:使用内建的API进行训练和评估或者是自定义函数实现训练和评估。不管使用哪种方法,不同方式构建的模型的训练和评估方式是一样的。
使用内建API 当我们使用内建的API来进行训练和评估时,我们传入的数据必须是Numpy arrays或者是tf.data.Dataset对象,在接下来的几个小节里,我们将会使用MNIST数据集作为示例。
内建API总览首先创建一个模型,如下:
123456789from tensorflow import kerasfrom tensorflow.keras import layersinputs = keras.Input(shape=(784,), name='digits')x = layers.Dense(64, activation='relu', name='dense_1')(inputs)x = layers.Dense(64, activation='relu', name='dense_2')(x)o ...