0%

刚去杭州面试的第二家公司,做笔试的时候的时候遇到的。最近几天在整理以前的笔记发现了。简单记录下。

互换两个变量的值

1
2
3
int a=10;
int b=12;
// 通过两个变量之间的运算输出结果 a = 12 b = 10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Test
public void swapTest1(){
int a=10;
int b=12;
a=a^b; //a=1010^b=1100;
b=a^b; //a=0110^b=1100;
a=a^b; //a=0110^b=1010;
//a=1100=12;b=1010;
System.out.println(a);
System.out.println(b);
}

@Test
public void swapTest2(){
int a = 10;
int b = 12;
a = a + b; // 22 = 10 + 12
b = a - b; // 10 = 22 - 12
a = a - b; // 12 = 22 - 10
System.out.println(a);
System.out.println(b);
}

2018年在公司负责了一段时间老项目改造升级工作。因此记录下折腾的过程。

  • Spring boot 最近挺火的,之前的工作并没有机会去实战。但是即使不使用Spring boot 也是可以做零配置的。

约定大于配置

  • servlet3.*的规范已经支持不使用web.xml了。
  • annotation的配置方式在Spring其实也存在很久了。
阅读全文 »

最近开始用mac来开发。记录下环境安装过程方便以后快速恢复熟悉的开发环境。

这里提前修改一下控制台前缀

1
2
3
4
5
[dev mc]$ sudo vim /etc/bashrc
#修改以下内容
PS1='\h:\W \u\$ '
#修改成
PS1='[dev \u]$ '

好用的工具

  • pages 同事推荐的软件暂时用来写周报。
  • brew 这是一个神器,和linux 上的yum 类似的工具。
  • sublime text 我之前在windows上都是使用notepad++。上App Store上没找到,该用这个了。

pages

  • 直接在app store安装就好了

brew

  • 安装过程使用终端安装。
1
2
#  这里并没有换行,复制的时候请注意。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • 基本操作方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 更新
brew update
# 安装软件
brew install xxx(软件名)

#常见命令整理如下,以下命令都可带上 cask 参数:

brew search name:联网搜索软件是否存在 brew 中
brew install name:安装软件
brew upgrade name:更新软件
brew uninstall name:卸载软件
brew reinstall name:重新安装软件
brew info name:查看软件安装地址
brew cleanup:清理缓存等
brew doctor:查看建议,例如升级等

mvnd

maven-mvnd,可以读作 Maven Daemon,译作 Maven 守护版,旨在为 Maven 提供更快的构建速度,灵感借鉴了 Gradle 和 Takari(Maven 生命周期优化器)。

1
2
3
4
5
6
# Windows
choco install mvndaemon
# Linux
sdk install mvnd
# macOS
brew install mvndaemon/homebrew-mvnd/mvnd

mycli

python编写的mysql客户单工具

1
brew install mycli
阅读全文 »

本章内容阐述个人理解,以及使用方法。若有不正确的内容欢迎斧正。睡觉之前赶快记录下来免得有忘记了。

什么是Log?

  • 日志记录的是什么?市面上流行的软件基本都有日志记录功能,作为开发人员的好帮手。日志可以有效的记录程序运行的状态以及运行的异常,比如说操作系统蓝屏了、手机死机了、软件卡死、程序崩溃、写了BUG等等都会有对应的日志留下。

如何利用log?

  • 笔者是一个Java开发人员,本章内容代码部分已Java代码用例。大家都知道日志非常重要,但是经验不足的开发人员往往忽视了这个重要的手段,比如在控制台输出日志,所有输出信息都集中在一起。排除问题非常困难,一旦出现了线上异常信息首先要看的就是日志信息。所以有必要就日志手段多了解下。

我是如何操作的?

  • 最在开发一个客户端应用,并不是GUI那种程序。功能不多但是日志信息却很多,循环监控数据,所以运行期产生的日志也有点多,开发的时候毕竟简单调试还能接受,运行起来日志过于集中眼睛疼,为了方便调试以及排除问题,考虑先将日志经拆分。不同业务或者类型使用不同的log文件来记录。
阅读全文 »

本章是整理知识内容,为强化知识长期更新。

以下部分超链接需要科学上网。

ModBus

modbus是一种通讯协议,是Modicon公司1979年为使用可编程逻辑控制器(PLC)通讯而发表。Modbus是工业领域通讯协议的业界标准之一,目前也我国国家标准工业通讯协议中的重要成员之一。

介绍

  • Modbus采用主从(Master-Salve)通信模式,仅有主设备(Master)能对传输进行初始化,从设备(Slave)根据主设备的请求进行应答。 __在主从关系中,通信总是成对发生。一个设备必须发起请求,然后等待响应 - 并且发起设备(主设备)负责发起每次交互。 通常,主设备是人机界面(HMI)或监控和数据采集(SCADA)系统,从设备是传感器、可编程逻辑控制器(PLC)或可编程自动化控制器(PAC)。 这些请求和响应的内容以及发送这些消息的网络层由协议的不同层来定义__。

    • 在串行链路的主从通信中,Modbus主设备可以连接一个或N(最大为247)个从设备,主从设备之间的通信包括单播模式和广播模式。
    • 在广播模式中,Modbus主设备可同时向多个从设备发送请求(设备地址0用于广播模式),从设备对广播请求不进行响应。
    • 在单播模式中,主设备发送请求至某个特定的从设备(每个Modbus从设备具有唯一地址),请求的消息帧中会包含功能代码和数据,比如功能代码“01”用来读取离散量线圈的状态。从设备接到请求后,进行应答并把消息反馈主设备。
    • __主设备不发送数据,从数据是不会自己发出数据的;即必须是主设备发出查询请求才能建立通讯。 __
  • 消息帧校验方式

    • ASCII消息帧:LRC(纵向冗长检测)
    • CRCi消息帧:CRC(循环冗长检测)
  • ModBus是OSI模型第七层上即__应用层__报文传输协议。

  • ModBus支持多工业设备、包括PLCDSC变频器、智能仪表等都在应用。

  • ModBus支持多种电气接口,如RS-232RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线。

  • ModBus协议完全免费;帧格式简单,紧凑。

  • ModBus对线缆的要求、长度、波特率,终端电阻,接地,连接器,通信状态的LED指示,都有电气标准。

  • ModBus数据可以分为两大类,分别为Coil和Register,每一种数据,根据读写方式的不同,又可细分为两种(只读,读写)。

    • Coli是位(bit)变量。
    • Register是整型(word ,即 16 - bit )。
Primary tabels Object Type Type Of comments
Discretes Input 离线输入量 Single bit 只读 IO系统提供这种类型的数据
Coils 线圈 Single bit 只写 通用应用程序改变这种类型的数据
Input Registers 输入寄存器 16-bit word 只读 IO系统提供这种类型的数据
Holding Registers 保持寄存器 16-bit word 只写 通用应用程序改变这种类型的数据
阅读全文 »

本章是整理知识内容,为强化知识长期更新。

  • MySQL基础(一) 已经介绍了MYSQL最常用基础的操作,由于篇幅已经很大,所以分开记录。

MySql基础操作

子查询与连接

在MYSQL实际操作中,最大的操作就是查询,下面就关于子查询和链接做记录。

子查询

  • 子查询(SubQuery)是指出现在其它SQL语句中的SELECT子句。比如
1
2
SELECT * FROM table_1 AS t1 WHERE columns_1 = (SELECT columns_2 FROM table_2 AS t2);
# 这里的SELECT * FROM table_1 AS t1 称之为 Outer Query/Outer Statement;SELECT columns_2 FROM table_2 AS t2 成为 SubQuery。
  • 子查询严格以上是指嵌套在查询内部,且必须始终出现在圆括号内
  • 子查询可以包含多个关键字:DISTINCTGROUP BYORDER BYLIMIT等函数。
  • 子查询的外层可以是:INSERTUPDATESELECT DELETESETDO等操作。
  • 子查询可以返回结果,这个结果可以是标量一行一列,或者子查询。
  • 子查询的引发条件:这里需要特别注意,并不是显示的才是子查询。
    • 使用比较运算符的子查询:= , > , < , >= , <= , <> , != , <=>
    • 使用结构语法:operand comparison_operator subquery ,可以使用一下修饰符来配合比较运算符。
      • operand comparison_operator ANY(subquery)
      • operand comparison_operator SOME(subquery)
      • operand comparison_operator ALL(subquery)
运算符\关键字 ANY SOME ALL
>>= 最大值 最小值 最大
<<= 最大值 最大值 最小值
= 任意值 任意值
<>!= 任意值
阅读全文 »

本章是整理知识内容,为强化知识长期更新。

Mysql介绍

  • Mysql数据库是一种C\S结构,就是客户端和服务端。
  • 关键字
    1. DB : DataBase 数据库
    2. DBMS:Database Management System数据库管理系统
    3. DBS:Database System = DBMS + DB数据库系统
    4. DBA:Database Administrator 数据库管理员
    5. 行\列:二维表中存储的数据。
      1. row\record (一条记录)。
      2. column\field(一个字段)。
  • SQL

SQL:Structured Query Language,结构化查询语言(数据以查询为主,99% 都是在进行查询操作),SQL是关系型数据库的操作指令,是一种约束,但不强制,类似与W3C,所以不同的关系型数据SQL语句可能会有一定的差异性。

  • DDL:Data Definition Language数据定义语言,用来维护存储数据的结构(数据库、表),代表指令为createdropalter等。
  • DML:Data Manipulation Language,数据操作语言,用来对数据进行操作(表中的内容)代表指令为insertdeleteupdate等,不过在 DML 内部又单独进行了一个分类,即 DQL(Data Query Language),数据查询语言,代表指令为select
  • DCL:Data Control Language,数据控制语言,主要是负责(用户)权限管理,代表指令为grantrevoke等。
  • TPL:``,事物控制语言

Mysql基本操作

本章部分内容在Centos中实现,Centos7-MySql部署记录

交互方式

阅读全文 »

本章是整理知识内容,为强化知识长期更新。

Stack

  • 栈是元素的集合,其包含了两个基本操作:push 操作可以用于将元素压入栈,pop 操作可以将栈顶元素移除。
  • 遵循后入先出(LIFO)原则。
  • 时间复杂度:
  • 索引: O(n)
  • 搜索: O(n)
  • 插入: O(1)
  • 移除: O(1)

Stack

Collection成员之一,继承了Vector,通过重写Vector来实现LIFO(Last-in-First-out 后进先出)特性。

概述

  • Java Stack是LIFO对象。它扩展了Vector类。

源码分析Stack

阅读全文 »

本章是整理知识内容,为强化知识长期更新。

Vector

概述

  • Vector是Java Collection Franmework成员。
  • 列队允许添加重复元素
  • 列队允许null的存在
  • 列队从0开始,也就是列队头部的下标是0。
  • 列队支持泛型,这样可以避免ClassCastException异常。

与ArrayList的区别

阅读全文 »

参考文献

RabbitMQ介绍

RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。
AMQP :Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。

背景

RabbitMQ 是流行的开源消息队列系统,是 AMQP(Advanced Message Queuing Protocol 高级消息队列协议)的标准实现,用 erlang 语言开发。RabbitMQ 具有良好的性能和时效性,同时还能够非常好的支持集群和负载部署,非常适合在较大规模的分布式系统中使用。

安装

RabbitMQ 基于erlang。需要先安装erlang环境。

阅读全文 »