分类 杂记 下的文章

Git 学习笔记

之前的笔记简单整理一下,方便刚接触的同学们快速入门

基本概念

对于一个程序员来说,Git可以说是一个必须掌握的基本技能。那么Git是什么呢,为什么对我们有这么大的作用?
Git是当下最流行,最好用的版本控制系统。所谓版本控制系统主要就是为了控制,协调各个版本的一致性。它增大了开发的灵活性,当遇到开发问题时可以随时回溯到上一个版本。Git属于分布式版本控制系统,也就是说每一个你clone下来的Git仓库都是主仓库的一个分布式版本。
因为clone下的数据都在本地,所以不仅提高了开发效率,而且即使我们离开了网络也可以执行提交,创建分支,查看历史版本记录等操作。
最后再来了解一个概念,Git本地有3个主要的工作区域

  • 工作目录
  • 暂存区域
  • 本地仓库

具体作用我们在后面的基本操作中介绍

GitHub

GitHub是一个面向开源及私有软件项目的托管平台,也是一个全球最大的同性交友平台(???)你可以在上面学习到许多大佬的开源项目,同时也可以用于自己的项目开源与团队开发协作。

基本操作

首先注册GitHub 不多说了

初次配置

跟Github注册信息一致

$ git config --global user.name "yourname"
$ git config --global user.email "yours@example.com"

查看是否添加成功

git config --list 

SSH key配置
推送是需要登陆输入GitHub用户名密码的,使用SSH公钥省可以省去这个环节。
1.创建SSH Key
首先在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果有的话可以跳到下一步。
如果没有,在终端(Windows下打开Git Bash)执行

ssh-keygen -t rsa -C "yours@example.com"

然后一直回车就行
屏幕快照 2018-09-03 下午5.58.14
2.GitHub配置SSH Key
Account–>settings–>SSH and GPG keys–>[New SSH Key]
屏幕快照 2018-09-03 下午6.03.31
Title 可以不填,会自动生成
在下面的Key中填入新生成的文件id_rsa.pub内容
Add后就配置成功了

创建本地仓库

首先创建目录 进入目录

mkdir xxx
cd xxx

初始化

git init 

当前目录会生成一个.git文件夹用于管理Git仓库。它是 Git 用来保存元数据和对象数据库的地方。该文件夹非常重要,每次clone镜像仓库的时候,实际拷贝的就是这个文件夹里面的数据。具体细节有兴趣的可以深入了解下。

GitHub创建仓库

GitHub New Repository[https://github.com/new]
具体初始化步骤创建成功后会有显示 如下图 不多解释了
屏幕快照 2018-09-08 上午11.26.07

文件的三种状态

在了解常用命令之前,我们需要把之前简单提及了一下的概念再稍做深入。
我们要知道对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。
由此我们看到也就是最开始基本概念中提及到 Git 管理项目时,文件流转的三个工作区域:Git 的工作目录暂存区域,以及本地仓库
18333fig0106-tn
我们可以从文件所处的位置来判断状态:如果是 Git 文件夹中保存着的特定版本文件,就属于已提交状态;如果作了修改并已放入暂存区域,就属于已暂存状态;如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

常用命令

1.创建版本库

git clone <url>    #克隆远程版本库
git init          #初始化本地版本库

2.修改和提交

git status                    #查看状态
git diff                      #查看变更内容
git add .                     #添加所有改动过的文件
git add <file>                #添加指定文件
git mv <old> <new>            #文件改名
git rm <file>                 #删除文件
git rm --cached <file>        #停止添加文件但不删除
git commit -m "commit message"#提交所有更新过的文件
git commit --amend            #修改最后一次提交

3.查看提交历史

git log                       #查看提交历史
git log -p <file>             #查看指定文件的提交历史
git blame <file>              #以列表方式查看指定文件的提交历史

4.撤销

git reset --hard HEAD          #撤销工作目录中所有未提交文件的修改内容
git checkout HEAD <file>       #撤销指定的未提交文件的修改内容
git revert <commit>            #撤销指定的提交

5.分支

git branch                    #显示所有本地分支
git checkout <branch/tag>     #切换到指定分支或者标签
git branch <new-nbranch>      #创建新分支
git branch -d <branch>        #删除本分支

6.其他

git merge <branch>                 #合并指定分支到当前分支
git pull <remote> <branch>         #更新代码
git push <remote> <branch>         #上传代码

上面节选了常用的一部分网上Git速查表的内容,并不是全部。当然使用频率最高的是下面这几个,同时也是一般更新Git仓库的基本操作流程。

git clone <url>
git pull
(一系列修改代码/增加代码操作)   #在工作目录处理文件
git add .                   #将文件添加至暂存区域
git commit -m "xxx"         #将文件提交到本地仓库
git push

从项目中取出某个版本的所有文件和目录,用以开始后续工作的叫做工作目录。这些文件实际上都是从 Git 文件夹中的压缩对象数据库中提取出来的,接下来就可以在工作目录中对这些文件进行编辑。

所谓的暂存区域只不过是个简单的文件,一般都放在 Git 文件夹中。有时候人们会把这个文件叫做索引文件,不过标准说法还是叫暂存区域。

所以基本的操作如下:

  1. 在工作目录中修改某些文件。
  2. 对修改后的文件进行快照,然后保存到暂存区域。
  3. 提交更新,将保存在暂存区域的文件快照永久转储到 Git 文件夹中。

Git 工作流程

可以直接看这篇文章了,写的很好。Git 工作流程

使用建议:三个简单规则

git_rule

  • 规则一:为每个新项目创建一个Git存储库。
  • 规则二:为每个新功能创建一个新分支。
  • 规则三:用pull reqeust把代码合并到Master分支。

参考

https://medium.freecodecamp.org/follow-these-simple-rules-and-youll-become-a-git-and-github-master-e1045057468f
https://www.cnblogs.com/myqianlan/p/4195994.html
https://blog.csdn.net/xuda27/article/details/52617148
https://git-scm.com/book/zh/v2

Oracle通过Dblink实现与Mysql交互

dblink(Database Link)数据库链接顾名思义就是数据库的链接,就像电话线一样,是一个通道,当我们要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中就必须要创建远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。


实验环境:

win8 64位

oracle11g

mysql5.7

准备:

dg4odbc

MYSQL-ODBC-5.X

实验步骤:

一.MYSQL ODBC 配置

1.开始菜单-oracle-配置和移植工具-ODBC管理员

2.系统DSN 创建新数据源

名称mysqlodbc

 

二.配置ORACLE透明网关

位置:%ORACLE_HOME%/hs/admin/

创建:init(数据库名).ora

这里我们使用initmysqllink.ora

内容:

 

三.配置TNSNAMES&LISTENER

tnsname.ora,连接端配置文件,主要内容是要访问的数据库的连接串的解释。也就是@后面的字符传的解释文件。这个主要出现的访问端(客户端),当然并不是说服务器端没有,因为服务器端也可以是访问端,比如服务器互相访问的dblink,以及服务器自己访问自己。类似于unix 的hosts文件,提供的tnsname到主机名或者ip的对应。

listener.ora,监听配置文件,接受远程对数据库的接入申请并转交给oracle的服务器进程。这个文件里面是监听的主要(重要)配置内容,也是监听在服务器端的主文件。

位置:%ORACLE_HOME%\NETWORK\ADMIN

1.tnsnames.ora增加

2.listener.ora SID_LIST_LISTENER增加

3.重启监听服务并检查是否正常

四.Oracle中创建Dblink连通Mysql

五.Oracle与Mysql进行交互

查询

插入

注意要commit

Mysql查询

添加成功

Jinja2 笔记

大部分摘自网上,方便平时查阅【更新ing…】

介绍

Jinja2:Jinja是日本寺庙的意思,并且寺庙的英文是temple和模板的英文template的发音类似。Jinja2是默认的仿Django模板的一个模板引擎,由Flask的作者开发。它速度快,被广泛使用,并且提供了可选的沙箱模板来保证执行环境的安全,它有以下优点:

  • 让前端开发者和后端开发者工作分离。
  • 减少Flask项目代码的耦合性,页面逻辑放在模板中,业务逻辑放在视图函数中,将页面逻辑和业务逻辑解耦有利于代码的维护。
  • 提供了控制语句、继承等高级功能,减少开发的复杂度。

模版

  • {{ ... }}:装载一个变量,模板渲染的时候,会使用传进来的同名参数这个变量代表的值替换掉。
  • {% ... %}:装载一个控制语句。
  • {# ... #}:装载一个注释,模板渲染的时候会忽视这中间的值。

变量

在模板中添加变量,可以使用(set)语句。

with语句来创建一个内部的作用域,将set语句放在其中,这样创建的变量只在with代码块中才有效

if语句

for语句

遍历字典

Jinja2中for循环内置常量

loop.index 当前迭代的索引(从1开始)
loop.index0 当前迭代的索引(从0开始)
loop.first 是否是第一次迭代,返回True\/False
loop.last 是否是最后一次迭代,返回True\/False
loop.length 序列的长度

 注意:不可以使用continuebreak表达式来控制循环的执行

阅读剩余部分 –

echarts+ajax+java制作图表

整理了下学校男女身高体重数据,顺便当复习java了

charts在绘图前我们需要为其准备一个具备高宽的 DOM 容器。

阅读剩余部分 –

jsp写入中文到mysql乱码问题

记录一下写作业遇到的问题

纠结了很久,代码是用servlet来处理form

其中post传输用户信息时一直乱码,最后查了半天才找见解决方法

 

  1. 在jsp页面的<%@ page 位置加上 contentType=”text/html; charset=utf-8″ %>,<meta 的位置也是如此:content=”text/html;charset=utf-8″ />
  2. 建立一个mysql数据库,字符集采用utf-8,建表也是如此。
  3. 在getConnection的URL中加上:?useUnicode=true&characterEncoding=UTF-8″,如:url = “jdbc:mysql://localhost:3306/(此处为数据库名称)?useUnicode=true&characterEncoding=UTF-8″,也就是在(数据库名称)的后面  //其中问号不能丢
  4. 如果你不是在jsp页面里直接处理form,也是和我一样采用servlet来处理form的话,那么在还要增加一个过滤器,这主要是因为采用的是tomcat的web发布器,如果用resin的话,不会有这样的问题。

    然后在WEB-INF目录下的web.xml文件,配置下过虑器

     

 

参考:http://blog.sina.com.cn/s/blog_6c5ad3d10100ligv.html

 

大小端模式

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

下面以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况,我们可以用unsigned char buf[4]来表示value

Big-Endian: 低地址存放高位,如下:

高地址
—————
buf[3] (0x78) — 低位
buf[2] (0x56)
buf[1] (0x34)
buf[0] (0x12) — 高位
—————
低地址

Little-Endian: 低地址存放低位,如下:

高地址
—————
buf[3] (0x12) — 高位
buf[2] (0x34)
buf[1] (0x56)
buf[0] (0x78) — 低位
————–
低地址
内存地址 小端模式存放内容 大端模式存放内容
0x4000 0x78 0x12
0x4001 0x56 0x34
0x4002 0x34 0x56
0x4003 0x12 0x78

 


目前Intel的80×86系列芯片是唯一还在坚持使用小端的芯片,ARM芯片默认采用小端,但可以切换为大端;而MIPS等芯片要么采用全部大端的方式储存,要么提供选项支持大端——可以在大小端之间切换。另外,对于大小端的处理也和编译器的实现有关,在C语言中,默认是小端(但在一些对于单片机的实现中却是基于大端,比如Keil 51C),Java是平台无关的,默认是大端。在网络上传输数据普遍采用的都是大端。

巴什博奕

巴什博奕(Bash Game):

只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。

显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。

因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下(m+1)的倍数,就能最后获胜。所以说,当s=n%(m+1)中,s>0的时候,为先取者的必胜态。

这个游戏还可以有一种变相的玩法:两个人轮流报数,每次至少报一个,最多报十个,谁能报到100者胜。

阅读剩余部分 –

tac…

水一贴

做了个题才知道linux下不光有cat 还有个tac…就是相当于cat内容反向输出(..怪自己没好好看命令…..) ..如果有web题可以命令执行的时候可以用来绕过

比如

可以

里面空格也可以用tab的url编码替换–>%09

因为linux下好几个空格和一个空格效果一样

 

Mac下mysql忘记密码后如何重置

今天上课装mysql遇到点坑,老师是用win告的,所以还得自己解决。
坑就是mac上装mysql会自动给个密码,但我一激动没记下来..wtf
然后就是百度了
第一步:
停止mysql服务
然后
第二步:
终端输入cd /usr/local/mysql/bin/
管理权限 sudo su
禁止mysql验证功能 ./mysqld_safe --skip-grant-tables &
第三步:
./mysql
然后
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密码');
ok

贝叶斯公式原理

简单的记录下最近看的东西,以下内容复制为主:)        

P(A∩B) = P(A)*P(B|A)=P(B)*P(A|B) —>P(B|A) = P(A|B)*P(B) / P(A)


原理

通常,事件A在事件B(发生)的条件下的概率,与事件B在事件A的条件下的概率是不一样的;然而,这两者是有确定的关系,贝叶斯法则就是这种关系的陈述。
作为一个规范的原理,贝叶斯法则对于所有概率的解释是有效的;然而,频率主义者和贝叶斯主义者对于在应用中概率如何被赋值有着不同的看法:频率主义者根据随机事件发生的频率,或者总体样本里面的个数来赋值概率;贝叶斯主义者要根据未知的命题来赋值概率。一个结果就是,贝叶斯主义者有更多的机会使用贝叶斯法则。
贝叶斯法则是关于随机事件A和B的条件概率边缘概率的。
其中P(A|B)是在B发生的情况下A发生的可能性。
贝叶斯法则中,每个名词都有约定俗成的名称:
Pr(A)是A的先验概率或边缘概率。之所以称为”先验”是因为它不考虑任何B方面的因素。
Pr(A|B)是已知B发生后A的条件概率,也由于得自B的取值而被称作A的后验概率
Pr(B|A)是已知A发生后B的条件概率,也由于得自A的取值而被称作B的后验概率。
Pr(B)是B的先验概率或边缘概率,也作标准化常量(normalized constant)。
按这些术语,Bayes法则可表述为:
后验概率 = (似然度 * 先验概率)/标准化常量 也就是说,后验概率与先验概率和似然度的乘积成正比。
另外,比例Pr(B|A)/Pr(B)也有时被称作标准似然度(standardised likelihood),Bayes法则可表述为:
后验概率 = 标准似然度 * 先验概率

一般公式

其中

为完备事件组,即

例子

例如:一座别墅在过去的 20 年里一共发生过 2 次被盗,别墅的主人有一条狗,狗平均每周晚上叫 3 次,在盗贼入侵时狗叫的概率被估计为 0.9,问题是:在狗叫的时候发生入侵的概率是多少?

我们假设 A 事件为狗在晚上叫,B 为盗贼入侵,则以天为单位统计,P(A) = 3/7,P(B) = 2/(20*365) = 2/7300,P(A|B) = 0.9,按照公式很容易得出结果:P(B|A) = 0.9*(2/7300) / (3/7) = 0.00058


深入了解请转至度娘

http://baike.baidu.com/item/贝叶斯公式
http://baike.baidu.com/item/贝叶斯定理