2021寒假学习记录

文章目录

1.10

Q1:VsCode使用

1.小知识

windows上常用快捷键

撤销ctrl+z

重做ctrl+y

Ctrl+Shift+P打开命令框

ctrl+`快捷键打开终端

2.C/C++程序编译过程详解

file

整个代码的编译过程分为编译(编译过程又可以分成两个阶段:编译和汇编)和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。

test.cpp main.cpp

一.编译

1.预处理, 展开头文件/宏替换/去掉注释/条件编译                      文件变为(test.i main .i)
2.编译,    检查语法,生成汇编                                                      文件变为( test.s  main .s)
3.汇编,   汇编代码转换机器码                                                        文件变为 (test.o main.o)
二.链接     链接到一起生成可执行程序                                              文件变为a.exe

一、1.编译预处理

(1)宏定义指令,如#define Name TokenString,#undef等。 对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,

但作为字符串常量的 Name则不被替换。对于后者,则将取消对某个宏的定义,使以后该串的出现不再被替换。

(2)条件编译指令,如#ifdef,#ifndef,#else,#elif,#endif等。 这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。

预编译程序将根据有关的文件,将那些不必要的代码过滤掉

(3) 头文件包含指令,如#include “FileName”或者#include <FileName>等。 在头文件中一般用伪指令#define定义了大量的宏(最常见的是字符常量),

同时包含有各种外部符号的声明。 包含到c源程序中的头文件可以是系统提供的,这些头文件一般被放在/usr/include目录下。

在程序中#include它们要使用尖括号(< >)。

另外开发人员也可以定义自己的头文件,这些文件一般与c源程序放在同一目录下,此时在#include中要用双引号(””)。

(4)特殊符号,预编译程序可以识别一些特殊的符号。 例如在源程序中出现的#line标识将被解释为当前行号(十进制数), 
上面程序实现了对宏line的运用

(5)预处理模块 预处理工作由#pragma命令完成,#Pragma命令将设定编译器的状态或者是指示编译器完成一些特定的动作。

#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。

以下为更多关于预处理的知识

转载自https://blog.csdn.net/weixin_41143631/article/details/81221777

宏函数很好用,是直接展开。

宏优点1代码复用性2提高性能

宏缺点1 不可调试(预编译阶段进行了替换),2无类型安全检查3可读性差,容易出错。

预处理宏还有 __LINE__ 表示正在编译的文件的行号
__FILE__表示正在编译的文件的名字__DATE__表示编译时刻的日期字符串,例如: “25 Dec 2007”
__TIME__ 表示编译时刻的时间字符串,例如: “12:30:55”
__STDC__ 判断该文件是不是定义成标准 C 程序

在c++中,一般用const/枚举/内联去替代宏
但是,define宏在某些方面真的是非常好用,我很推荐。
1.替代路径
#define ENG_PATH_1 C:\Program Files (x86)
2.针对编译器版本不兼容报错
#define _CRT_SECURE_NO_WARNINGS 1
3.条件编译
#ifdef 标识符
程序段 1
#else
程序段 2
#endif
4.使用库中的宏

#error 预处理指令的作用是,编译程序时,只要遇到 #error 就会生成一个编译错误提示消息,并停止编译。

这个我没写过,但碰到过很多次,在编写mfc代码中,拉入控件时我加入密码框控件,OS编译时会自动弹出#error 提示我该编辑框为密码,注意明文问题

#line 的作用是改变当前行数和文件名称,如#line 28  liu 目前我没使其派上用场,但了解为好。

#pragma 是比较重要且困难的预处理指令。

#pragma once 

这个的做用就是防止头文件多次包含

这个似乎不起效果,用下面的

当然,还有另外一种风格,防止被包含,我同时给出来

是巧妙地利用了define宏

#ifndef _SOME_H#define _SOME_H  ...//(some.h头文件内容)  #endif

变量的防止重复定义则利用extern,在头文件中不初始化只声明。引用该头文件即可,在链接过程中。就可以使用到这个变量。

(附:extern在c++中经常用于  extern “C”  告诉编译器下面是c语言风格)

#pragma warning

#pragma warning( disable : 4507 34; once : 4385; error : 164 )
等价于:
#pragma warning(disable:4507 34) // 不显示 4507 和 34 号警告信息
#pragma warning(once:4385) // 4385 号警告信息仅报告一次
#pragma warning(error:164) // 把 164 号警告信息作为一个错误。

#pragma pack

使用指令#pragma pack (n),编译器将按照 n 个字节对齐。
使用指令#pragma pack (),编译器将取消自定义字节对齐方式。
在#pragma pack (n)和#pragma pack ()之间的代码按 n 个字节对齐。

#运算符和##预算符

#define SQR(x) printf(“The square of “#x” is %d.\n”, ((x)*(x)));

这段代码中#就是帮助x作为一个变量,表现出来,而不是一个简单的字母

如果有#,SQR(3)运算出来就是The square of 3  is 9

如果没有# SQL(3)运算出来就是The square of x  is 9

2.编译、优化阶段 
经过预编译得到的输出文件中,只有常量;如数字、字符串、变量的定义,以及C语言的关键字,如main,if,else,for,while,{,}, +,-,*,\等等。 
在《编译原理》中我们可以了解到一个编译器对程序代码的编译主要分为下面几个过程: 
a) 词法分析 
b) 语法分析 
c) 语义分析 
d) 中间代码生成 
e) 代码优化 
f) 代码生成 
g) 符号表管理 
h) 将多个步骤组合成趟 
i) 编译器构造工具 

经过优化得到的汇编代码必须经过汇编程序的汇编转换成相应的机器指令,方可能被机器执行。

3.汇编过程

汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程。对于被翻译系统处理的每一个C语言源程序,

都将最终经过这一处理而得到相应的目标文件。目标文件中所存放的也就是与源程序等效的目标的机器语言代码。

目标文件由段组成。通常一个目标文件中至少有两个段: 代码段:该段中所包含的主要是程序的指令。

该段一般是可读和可执行的,但一般却不可写。 数据段:主要存放程序中要用到的各种全局变量或静态的数据。一般数据段都是可读,可写,可执行的。

二、链接程序

由汇编程序生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题。

例如,某个源文件中的函数可能引用了另一个源文件中定义的某个符号(如变量或者函数调用等);在程序中可能调用了某个库文件中的函数,等等。所有的这些问题,都需要经链接程序的处理方能得以解决。链接程序的主要工作就是将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够诶操作系统装入执行的统一整体。

根据开发人员指定的同库函数的链接方式的不同,链接处理可分为两种:(1)静态链接 在这种链接方式下,函数的代码将从其所在地静态链接库中被拷贝到最终的可执行程序中。这样该程序在被执行时这些代码将被装入到该进程的虚拟地址空间中。静态链接库实际上是一个目标文件的集合,其中的每个文件含有库中的一个或者一组相关函数的代码。(2) 动态链接 
在此种方式下,函数的代码被放到称作是动态链接库或共享对象的某个目标文件中。链接程序此时所作的只是在最终的可执行程序中记录下共享对象的名字以及其它少量的登记信息。在此可执行文件被执行时,动态链接库的全部内容将被映射到运行时相应进程的虚地址空间。动态链接程序将根据可执行程序中记录的信息找到相应的函数代码。C/C++编译过程对于可执行文件中的函数调用,可分别采用动态链接或静态链接的方法。使用动态链接能够使最终的可执行文件比较短小,并且当共享对象被多个进程使用时能节约一些内存,因为在内存中只需要保存一份此共享对象的代码。但并不是使用动态链接就一定比使用静态链接要优越。在某些情况下动态链接可能带来一些性能上损害。

3. GCC的编译链接

我们在linux使用的gcc编译器便是把以上(编译,链接)的几个过程进行捆绑,使用户只使用一次命令就把编译工作完成,这的确方便了编译工作,但对于初学者了解编译过程就很不利了,下图便是gcc代理的编译过程:

从上图可以看到:

1) 预编译

将.c 文件转化成 .i文件

使用的gcc命令是:gcc –E

对应于预处理命令cpp

2) 编译

将.c/.h文件转换成.s文件

使用的gcc命令是:gcc –S

对应于编译命令 cc –S

3) 汇编

将.s 文件转化成 .o文件

使用的gcc 命令是:gcc –c

对应于汇编命令是 as

4) 链接

将.o文件转化成可执行程序

使用的gcc 命令是: gcc

对应于链接命令是 ld

总结起来编译过程就上面的四个过程:预编译处理(.c) --> 编译、优化程序(.s、.asm)--> 汇编程序(.obj、.o、.a、.ko) --> 链接程序(.exe、.elf、.axf等)。

4.常见c++编译器介绍

1、MSVC系列 与Visual Studio集成发布,微软自己的编译器,VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和Microsoft Silverlight 及Windows Phone。

2、Borland C++:这是由Borland公司出品。该公司的编译器以速度快、占用空间少著称。Borland C++ Builder和Borland C++ Builder X这两种开发工具用的就是这个编译器。

3、GNU编译器套件GCC(GNU Compiler Collection)

包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统(GNU操作系统是一种由自由软件构成的类 Unix 操作系统,该系统基于 Linux 内核)专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。

GCC有Windows移植版本,比较出名的就是MinGW和TDM-GCC

GNU (C++、ADA及Fortran):这是GNU项目里面的著名开源编译器,是类UNIX系统下编写C++首先的编译器。其特点是可移植性好,可以在广泛的平台上使用它,是跨平台嵌入式系统开发的首选。在兼容性方面,GCC3.3达到了96.15%。

http://files.1f0.de/mingw/【推荐这个下载,解压后添加环境变量即可用】

windows下安装MinGW的配置 – 郭文瑞的文章 – 知乎 【介绍各包作用】https://zhuanlan.zhihu.com/p/66197013

MinGW安装和使用https://www.cnblogs.com/lidabo/p/8990348.html【此文使用官网下载】

4、Intel C++:从名字就可以知道此编译器的主人了。它是针对Intel x86体系结构的CPU特别优化定制的,换句话说就是,它是基于Intel的处理器内核而开发的。此编译器对于高性能数值运算这种环境下的优势很明显,可以不优化代码的情况下就能提升程序的性能。

5.llvm+Clang

LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。

Low Level Virtual Machine (LLVM) 是一个开源的编译器架构,它已经被成功应用到多个应用领域。Clang ( 发音为 /klæŋ/) 是 LLVM 的一个编译器前端,它目前支持 C, C++, Objective-C 以及 Objective-C++ 等编程语言。Clang 对源程序进行词法分析和语义分析,并将分析结果转换为 Abstract Syntax Tree ( 抽象语法树 ) ,最后使用 LLVM 作为后端代码的生成器。
Clang 的开发目标是提供一个可以替代 GCC 的前端编译器。与 GCC 相比,Clang 是一个重新设计的编译器前端,具有一系列优点,例如模块化,代码简单易懂,占用内存小以及容易扩展和重用等。由于 Clang 在设计上的优异性,使得 Clang 非常适合用于设计源代码级别的分析和转化工具。Clang 也已经被应用到一些重要的开发领域,如 Static Analysis 是一个基于 Clang 的静态代码分析工具。

6.TCC(Tiny C Compiler)

Tiny C Compiler(缩写为TCC, tCc或TinyCC)用于x86(16/32位)或是x86-64(64位)系统的C compiler,而开发者为Fabrice Bellard。软件是设计用于低级电脑环境,或是于磁盘容量有限的空间中(1.44磁片或是硬盘)。软件可以适用于Windows、Linux、Unix操作系统。

5.常见操作系统

嵌入式

嵌入式系统使用非常广泛的系统(如VxWorkseCosSymbian OSPalm OS)以及某些功能缩减版本的Linux或者其他操作系统。某些情况下,OS指称的是一个内置了固定应用软件的巨大泛用程序。在许多最简单的嵌入式系统中,所谓的OS就是指其上唯一的应用程序。iOS是由苹果公司开发的手持设备操作系统。苹果公司于2007年1月9日的Macworld 大会上公布这个系统,以Darwin为基础,属于类Unix 的商业操作系统。最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch 、iPad 以及 Apple TV 等产品上。iOS与苹果的 Mac OS X 操作系统一样,属于类Unix的商业操作系统。原本这个系统名为 iPhone OS,因为 iPad,iPhone,iPod touch 都使用 iPhone OS,所以 2010 年 WWDC 大会上宣布改名为 iOS(iOS 为美国 Cisco 公司网络设备操作系统注册商标,苹果改名已获得 Cisco 公司授权)。Android是一种基于Linux的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机、智能手表等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。

类 Unix

所谓的类Unix家族指的是一族种类繁多的OS,此族包含了System VBSDLinux。由于Unix是The Open Group的注册商标,特指遵守此公司定义的行为的操作系统。而类Unix通常指的是比原先的Unix包含更多特征的OS。类Unix系统可在非常多的处理器架构下运行,在服务器系统上有很高的使用率,例如大专院校或工程应用的工作站。1991年,芬兰学生林纳斯·托瓦兹根据类Unix系统Minix编写并发布了Linux操作系统内核,其后在理查德·斯托曼的建议下以GNU通用公共许可证发布,成为自由软件Unix变种. Linux近来越来越受欢迎,它们也在个人桌面计算机市场上大有斩获,例如Ubuntu系统。某些Unix变种,例如惠普HP-UX以及IBM的AIX仅设计用于自家的硬件产品上,而SUNSolaris可安装于自家的硬件或x86计算机上。苹果计算机的Mac OS X是一个从NeXTSTEPMach以及FreeBSD共同派生出来的微内核BSD系统,此OS取代了苹果计算机早期非Unix家族的Mac OS。经历数年的披荆斩棘,自由开源的Linux系统逐渐蚕食以往专利软件的专业领域,当前,计算机按照计算能力排名世界500强中472台使用Linux,6台使用Windows,其余为各类BSD等Unix。

Microsoft Windows

MacOS X

macOS,前称“MacOS X”或“OS X”,是一套运行于苹果Macintosh系列计算机上的操作系统。Mac OS是首个在商用领域成功的图形用户界面系统。

Google Chrome OS

Google Chrome OS是一项Google的轻型的、基于网络的计算机操作系统计划,其基于Google的浏览器Google Chrome的Linux内核。

http://c.biancheng.net/view/707.htmlLinux和UNIX的关系及区别(详解版)。UNIX 诞生于 20 世纪 60 年代末,Windows 诞生于 20 世纪 80 年代中期,Linux 诞生于 20 世纪 90 年代初,可以说 UNIX 是操作系统中的”老大哥”,后来的 Windows 和 Linux 都参考了 UNIX。现代的 Windows 系统已经朝着“图形界面”的方向发展了,和 UNIX 系统有了巨大的差异,从表面上甚至看不出两者的关联。Linux 是一个类似 Unix 的操作系统,Unix 要早于 Linux,Linux 的初衷就是要替代 UNIX,并在功能和用户体验上进行优化,所以 Linux 模仿了 UNIX(但并没有抄袭 UNIX 的源码),使得 Linux 在外观和交互上与 UNIX 非常类似。

6.windows 10上使用vscode编译运行和调试C/C++

windows 10上使用vscode编译运行和调试C/C++

https://zhuanlan.zhihu.com/p/77645306

VS Code运行C和C++程序http://c.biancheng.net/view/8114.html

史上最全vscode配置使用教程https://zhuanlan.zhihu.com/p/113222681

Q2:JAVA相关

7.java和javascript之间有什么区别

我们说,Web前端三剑客:HTML、CSS、JavaScript,它们看上去是三种不同的技术,但在实际中却是相互搭配使用的。

HTML是用来标记内容的(重在内容组织上)

HTML是超文本标记语言的简称,它是一种不严谨的、简单的标识性语言。它用各种标签将页面中的元素组织起来,告诉浏览器该如何显示其中的内容。

为什么说HTML是不严谨的呢?因为HTML标签即使不闭合,也并不会影响页面内容的组织。

CSS是用来修饰内容样式的(重在内容样式美化展示上)

CSS是层叠样式表的简称,它用来表现HTML文件样式的,简单说就是负责HTML页面中元素的展现及排版。

JavaScript是用来做交互的

JavaScript是一种脚本语言,即可以运行在客户端也能运行在服务器端。JavaScript的解释器就是JS引擎,JS引擎是浏览器的一部分。而JavaScript主要是用来扩展文档交互能力的,使静态的HTML具有一定的交互行为(比如表单提交、动画特效、弹窗等)。

HTML与CSS及JS的关系

这三者99%的情况下都是搭配使用的,但也不是绝对的,具体关系是:

HTML与CSS、JS是不同的技术,可以独立存在;

HTML一般需要CSS和JS来配合使用,否则单一HTML文档无论是功能还是展示上效果都不理想;

CSS一般是不能脱离HTML或XML的,如果CSS脱离了HTML和XML,那就没有存在的必要的;

JS可以脱离HTML和CSS而独立存在;

JS可以操作HTML和CSS。

总结:如果把HTML比做身体,那CSS就好比是衣服,而JavaScript则意味着人能做的一些高级动作。

java和javascript之间有什么区别

https://www.php.cn/js-tutorial-413102.html

三分钟读懂Java与JavaScript的区别,让小白摘帽

https://zhuanlan.zhihu.com/p/30327269

1.11

Q1.小知识

1.分区

进行分区时有一个公式n*1028-4
n为硬盘分区大小
要分200G,就是200*1028-4=205596MB

notice:C盘下中文用户名修改,凡是直接改文件名,并修改注册表的方法都不要使用。

2.Java SDK和Java JDK的区别

https://blog.csdn.net/java_2017_csdn/article/details/84333532

SDK是Software Development Kit的缩写,中文意思是“软件开发工具包”

JDK是Java Development Kit的缩写,中文意思是“Java开发工具包”。

可以认为jdk只是sdk的一种(子集)

1.14

1.SATA3.0、M.2、PCI-E硬盘接口有什么区别

https://product.pconline.com.cn/itbk/diy/harddisk/1802/10846354.html

2.什么是超极本?

https://jingyan.baidu.com/article/ab69b27088b4052ca7189f26.html

3.接口

https://baike.baidu.com/item/%E6%8E%A5%E5%8F%A3/15422203#1

4.ANSI C

美国国家标准学会( American National Standards Institute)

ANSI C是由美国国家标准协会(ANSI)及国际标准化组织(ISO)推出的关于C语言标准。ANSI C 主要标准化了现存的实现, 同时增加了一些来自 C++ 的内容 (主要是函数原型) 并支持多国字符集 (包括备受争议的三字符序列)。 ANSI C 标准同时规定了 C 运行期库例程的标准。

5.编译型语言和解释型语言的区别

http://c.biancheng.net/view/4136.html

java编译器和java解释器、JVM

6.如何在cmd中,使用cd进入指定文件目录

https://blog.csdn.net/weixin_44108468/article/details/102309471

cd .\aim仍在当前目录下进入与cd aim相同

cd ..\则先返回上层目录再进入

7.gdb

UNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。所谓“尺有所短,寸有所长”就是这个道理。

8.cmake

c是cross platform make中的cross缩写,

一般使用 CMake 生成 Makefile 并编译的流程如下:

  1. 编写 CMake 配置文件 CMakeLists.txt
  2. 执行命令 cmake PATH 或者 ccmake PATH 生成 Makefile(ccmake 和 cmake 的区别在于前者提供了一个交互式的界面),其中, PATH 是 CMakeLists.txt 所在的目录
  3. 使用 make 命令进行编译

而不是c语言的c缩写

9.vscode路径中不识别括号!

10.VS Code如何移除资源管理器中的项目?

文件>>关闭文件夹

11.把软件加入到右键菜单

https://blog.csdn.net/z1324402468/article/details/97410827

注意:最后不要有空格

12.VS Code中的文件夹(Folder)与工作区(Workspace)

https://www.jianshu.com/p/cf45d95ada26

13.VSCode 的四个配置文件 在 C++ 编程中的作用

当然也可以手动写

注意:事实上使用cmake编译多文件的工程项目也不需要配置.vscode/tasks.json.vscode/launch.json.vscode/c_cpp_properties.json这三个文件

c_cpp_properrties.json配置项目性质

c_cpp_properties.json配置文件默认是不会产生的,快捷键ctrl+shift+p 再输入configuration便会出现

最有用的几行就是包含 include 中的 .h 文件和 lib 中的 .o 文件

tasks.json:编译指令。

launch.json:调试相关选项。选择调试器与需要调试的文件进行调试。

“preLaunchTask”: “g++.exe build active file” 是编译完成后, 执行在 tasks.json 后
tasks.json 文件 “label”: “g++.exe build active file”, 与之对应,

{
"configurations": [
{
"name": "MGw64", 
       "compilerPath": "E:/MGw64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/ld.exe"

    }
],
"version": 4
}

settings.json 文件是为了配置编辑器 ,显示字体
和编码习惯.

自动生成部分内容https://blog.csdn.net/fightfightfight/article/details/82857397

c_cpp_properties.json文件的某种配置https://blog.csdn.net/fdfdsds/article/details/102248876

VSCode运行多文件C++教程:使用CMake【荐】配置了.json文件

https://blog.csdn.net/frostime/article/details/86756983

在VsCode中使用cmake编译c++多文件工程文件【荐】也可不配.json文件

https://blog.csdn.net/qq_41603726/article/details/108805420

14.VS code 中的各种变量 

${<variable>} 指的就是取变量的值

${workspaceRoot} 当前打开的文件夹的绝对路径+文件夹的名字

${workspaceRootFolderName}   当前打开的文件夹的名字

${file} 当前打开正在编辑的文件名,包括绝对路径,文件名,文件后缀名

${relativeFile} 从当前打开的文件夹到当前打开的文件的路径 

如 当前打开的是test文件夹,当前的打开的是main.c,并有test / first / second / main.c

那么此变量代表的是  first / second / main.c

${fileBasename}  当前打开的文件名+后缀名,不包括路径

${fileBasenameNoExtension} 当前打开的文件的文件名,不包括路径和后缀名

${fileDirname} 当前打开的文件所在的绝对路径,不包括文件名

${fileExtname} 当前打开的文件的后缀名

${cwd} the task runner’s current working directory on startup当前工作目录

${lineNumber}  当前打开的文件,光标所在的行数

15.OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉机器学习软件库,可以运行在LinuxWindowsAndroidMac OS操作系统上。 [1] 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

1.15

1.第一次使用VS Code时你应该知道的一切配置

2.Qt自带mingw使用

添加环境变量E:\QT\Tools\mingw730_32\bin

3.编译java时 错误: 编码 GBK 的不可映射字符 (0xB2)

增加-encoding UTF-8

javac -encoding UTF-8 first.java

1.17

1.vscode如何缩放?

文件-首选项-设置 搜索 editor.mouse

2.模,补码

1.“模”是指一个计量系统的计数范围

时钟的计量范围是0~11,模=12。表示n位的计算机计量范围是

模=

“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法为加法运算

2.补码

就是按位取反后加1。

计算机中的有符号数有三种表示方法,即原码反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同 [1] 。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理 [2] 。

2.1正整数的原码,反码,补码均相同是其二进制表示

例:+9的补码是00001001。

2.2求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1

例:求-5的补码。-5对应带符号位负数5(10000101)→除符号位外所有位取反(11111010)→加00000001(11111011)

2.3

-128没有原码与反码,只有补码,就是在计算机中保存的形式 10000000也就是-0

3.dos cmd及其联系

1.dos:磁盘操作系统(Disk Operating System),是早期个人计算机上的一类操作系统

微软图形界面操作系统Windows NT问世以来,DOS是一个后台程序的形式出现的。名为Windows命令提示符。

2.cmd:是command的缩写.即命令提示符(CMD),是在OS / 2 , Win为基础的操作系统(包括Windows 2000和XP中, Vista中,和Server 2003 )下的“MS-DOS 方式”(MS为微软缩写,即微软-磁盘操作系统)。

区别:需要区分Windows中的命令提示符cmd并非DOS

你在windows操作系统里进的DOS(即输入 CMD 进命令提示符)不是纯DOS,只是为方便某些需求而建立的,
而纯DOS本身就是一种操作系统.(两者的区别:比如你可以在纯DOS下删除你的 windows系统,
但在你所说的”命令提示符”里却不能,因为你不可能”在房子里面拆房子吧?”)

dos是磁盘操作系统;命令提示符是dos系统的界面中输入dos命令的提示位置;cmd是xp系统运行其自带dos的命令。

3.CMD和MS-DOS的区别
概念部分:
(1)2000、XP下的CMD与98的MS-DOS的不同之处:
cmd.exe叫命令提示符他与98下的MS-DOS是不一样的,所以我们不能将他混为一谈,但是我们却可以用CMD.exe来执行很多DOS命令,例如:dir、cd、del等等!
(2)CMD下的内部命令与外部命令的不同:
CMD下的内部命令就是指:我们可以直接在CMD下就可以执行的命令,例如:telnet、ftp、dir、cd、等等,
你可以在CMD下输入help进行查看,外部命令呢,就是cmd下不能直接运行的命令,(例如大家常用的nc)
他需要在CMD下切换到他(NC)做在的目录你才能运行NC及NC的命令,运行命令与 CMD 也不一样

4.Windows系统发展历程概述

1、NT 3.1 Windows NT 3.1是微软的Windows NT产品线的第一代产品,用于服务器和商业桌面操作系统,于1993年7月27日发表。版本号的选择是为了匹配Windows 3.1,微软当时最新版的图形用户界面,以表明它们拥有非常类似的用户界面方面的视觉效果。有两个版本的NT3.1可供选择,Windows NT 3.1和Windows NT Advanced Server。它可以运行在Intelx86,DEC Alpha和MIPS R4000的CPU上。

2、NT 3.5X 1994年微软发布了Windows NT 3.5,此后陆续推出了Windows NT 3.5x系列,该系列有两个版本,Windows3.5x Workstation和Windows 3.5x Server。Windows 3.5x Workstation限制了可同时运行的网络任务的数量并省略了一些服务器软件,而Windows NT 3.51可以用来构建一个完整的网络服务器。 Windows NT 3.5x的界面仍然和Windows 3.1保持一致。Windows NT Workstation 3.5 支持OpenGL显卡标准,同时进一步改善了安全性和稳定性,使得Windows的应用领域得以大大扩展。微软在1995年又发布了Windows NT 3.51,从这个版本开始,Windows NT系列也有了中文版

3、NT 4.0 1996年4月发布的Windows NT 4.0是NT系列的一个里程碑,该系统面向工作站、网络服务器和大型计算机,它与通信服务紧密集成,提供文件和打印服务,能运行客户机/服务器应用程序,内置了Internet/Intranet功能。具有以下特点:32位操作系统,多重引导功能,可与其它操作系统共存。

4、NT 5.X WindowsNT5.0(后名为Windows 2000)桌面NT5.X系列指的是微软从2000年开始推出的一系列内核版本为NT5.X的桌面及服务器操作系统,包括Windows 2000、Windows XP和Windows Server 2003。

5、NT 6.X NT6.X系列指的是微软从2006年后推出的一系列内核版本号为NT6.X的桌面及服务器操作系统,包括Windows Vista、Windows Server 2008、Windows 7、Windows Server 2008 R2、Windows 8、Windows8.1和Windows Server 2012。

6、NT 10.X Windows 10 预览版初期内核为NT 6.4,从 Build 9888 开始,Windows 10 将系统内核由 NT 6.4 直接升级为了 NT 10.0。 

实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;?

包?

内部类,外部类?

1.19

1.快照与备份有什么区别?快照是备份的其中一种么?还是两种不同的概念?

快照是数据存储的某一时刻的状态记录;备份则是数据存储的某一个时刻的副本。这是两种完全不同的概念。

https://www.zhihu.com/question/20374919/answer/499376887

系统还原点仅记录系统设置,不备份用户数据

2.使用什么创建系统镜像(备份)?

Dism++,备份c盘

https://www.chuyu.me/zh-Hans/index.html

3.docker是什么?

什么是Docker?看这一篇干货文章就够了! – 小灰的文章 – 知乎 https://zhuanlan.zhihu.com/p/187505981

10分钟看懂Docker和K8S – 小枣君的文章 – 知乎 https://zhuanlan.zhihu.com/p/53260098

1.20

1.如何使用搜索引擎查询资料

SEO英文全称 Search Engine Optimization,简写SEO ,中文译为查找引擎优化,即使用查找引擎的规矩进步在有关查找引擎的天然排名。

1.site指令,在指定网页上查找

关键词1 关键词2 site:zhihu.com

site:zhihu.com 关键词1 关键词2

2.完全匹配

让百度显示的结果和你的关键词完全匹配,你可以在输入关键词的时候加上英文引号。这样出来的结果,就是完全匹配你关键词的结果。比如我们搜索关键词:”过年”。

3.排除搜索

方法是:第一个关键词 空格 减号后面接需要排除的词语,比如我们搜索关键词:过年 -吃什么;百度给你的搜索结果会自动排除吃什么

4.filetype命令

这个这个命令适用于搜索一些文件,就是一些带格式的文件,比如PPT文件word文件。比如在百度搜索filetype:ppt,显示的结果全是和PPT文档有关的结果。

5.intitle:标题关键词 intext

intitle这个命领,可以让你搜索文章包含的标题关键词。就是说只要这篇文章标题中含有你搜索的关键词,这篇文章就会被检测出来,比如我们搜索intitle:支付宝,显示的全是和支付宝有关的标题页面。

6.inurl命令

这个命令是限定在网页链接中的关键词,用法就是命令加上网页链接关键词。比如我们搜索:inurl:123。

7.*

星号,通配符,模糊搜索。我们如果忘记了名称的某部分,就可以用 * 代替。比如 “资治*鉴”。

8.index命令
在关键词输入框中输入index of 皮带,选择回车搜索,得到了一些网页,不要以为这是一些普通的页面,其实它们是一些皮带网站的资源列表,点击打开它来看看,怎么样?是不是所有资源一收眼底了?

9.() and |

利用() 可以把多个关键词划分为一组,并进行优先查询。 例如:键入”(seo+网络)”来搜索包含”seo”与”网络”的信息。
利用and 表示前后两个关键词是”与”的逻辑关系。 例如输入关键词:广州 and 腰带厂 会找出将包含广州和腰带厂有关的网站。
利用or(|) 表示前后两个词是“或”的逻辑关系。 例如输入关键词:广州 or 腰带,会找出将包含广州或者腰带的网页。

2.多引擎搜索

https://search.chongbuluo.com/【最全】

https://www.itmm.wang/search快速切换

http://www.duoci.com/快速切换

https://www.elubiao.com/并列显示

Google的Custom Search,可以创建一个搜索引擎并把搜索结果限定于某几个网站中,适合打造专业搜索引擎。https://www.google.com/cse/all?hl=zh-cn

http://code.giffox.com/程序员用

3.系统重装

1.制作pe系统

1.在安装PE系统的时候,先在电脑插上一个8G以上的U盘

http://www.wepe.com.cn/

BIOS、MBR、PBR等基础知识

https://blog.csdn.net/xys_777/article/details/84085002

BIOS、EFI与UEFI详细了解

https://www.lmdouble.com/1510001173.html

体验最好的 PE 系统是什么?https://www.zhihu.com/question/40137216?sort=created

2.鼠标右击插入的U盘,选择【格式化】,在“文件系统”处选择【NTFS/exFAT】,点击【开始】(格式化时,文件系统处选择“NTFS”是为了U盘能够存储单个内存大于4G的文件)。可直接进行第3步,自带格式化选项

FAT32
大多数用户使用的U盘格式都是FAT32格式,因为它的兼容性相对好一些,几乎可以完美应对所有操作系统,并且快速的进行读写工作。
缺点:不能设置权限,安全等级较低,只能支持4G以下的单个文件传输NTFS
可设置权限。并且在支持文件上最大可以拓展为256T,NTFS分区是采用“日志式”的文件系统,需要记录详细的读写操作,会比较伤闪盘芯片。
exFAT
FAT64,FAT32的升级版。主要目的就是为了解决FAT32不能存储单个文件高于4G的问题。最大支持256GB拓展。并且在WIN和MAC均可使用,跨平台能力十分出众,也是微软为了闪存设备特地设计的文件系统。
总结
主要是用的就是NTFS和FAT64两种。机械硬盘和固态硬盘使用NTFS较为合适,存储能力强和通用性好。而作为移动端,U盘或者移动硬盘等设备使用FAT64较为合适,读写速度相对较快。 

制作U盘启动时的写入模式HDD-FAT32、ZIP-FAT32、HDD-FAT16、ZIP-FAT16有什么区别?

FAT32、FAT16指的是分区格式,而FAT16单个文件大小最大只能2G,FAT32单个文件可以最大4G,所以这里优先选FAT32
HDD是硬盘启动模式,而ZIP是软盘启动模式,因此U盘选HDD模式。
至于智能,兼容,增强,主要就是根据U盘的情况,以及电脑的支持,来选择合适的启动模式,一般选智能即可所以最终就是选择HDD-FAT32、智能模式(大部分默认即可)
 
快速格式化与格式化区别
一般来说,可以选择快速格式化,速度快一点。如果你怀疑硬盘有坏道,可以试用普通格式化。低级格式化Low level Format过多是会损坏硬盘的,一般不需要,也不建议使用。 
快速格式化与格式化都是高级格式化即High level Format,两者的区别在于快速格式化仅仅是清掉FAT表(文件分配表),使系统认为盘上没有文件了,并不真正格式化全部硬盘,快速格式化后可以通过工具恢复硬盘数据,快速格式化的速度要快的多就是这个原因。不选快速格式化,普通格式化程序会将硬盘上的所有磁道扫描一遍,如果有坏道会提示,清除硬盘上的所有内容,不可恢复,普通格式化可以检测出硬盘上的坏道,速度会慢一些

3.请打开解压后的文件夹,鼠标右击【PE系统】,选择【以管理员身份运行】。

4.请点击【安装PE到U盘】。

2.存入win10镜像

注意安装pe微系统后,u盘变为两个分区,存入较大的分区即可

3.重启

1.开机时,按F12快捷键

2.选择EFI USB

3.使用winodw安装工具安装

使用winpe安装Windows系统,上面的EFI PART灯显示红色,BOOTMGR PBR显示黄色解决方法

https://blog.csdn.net/ifreewolf_csdn/article/details/88907520

如果发现已有,直接无视安装

4.用户名记得英文

4.升级Win10系统后每次开机都要选择Windwos10才能进系统的原因及两种解决方法

1、按下“Win+R”呼出运行,在框中输入msconfig 点击确定打开“系统配置”;

2、切换到“引导”选卡 在下面选中“Windwos 10”,点击【设为默认值】,点击应用并确定保存设置即可。

如果有多的dism++可以删除

5.查看启动时间

查看Windows10系统开机时间的方法。
一、系统自带功能
  电脑接通电源到进入Windows界面用时,实际上包括两个方面,一是BIOS所用时间,一是系统启动时间。所以Win10系统开机所用时间正确的算法是:BIOS启动用时+系统启动用时。
  1、查看BIOS启动时间
  如下图所示。打开Win10任务管理器,点击转至“启动”选项卡,我们就会看到“上次BIOS所用时间了”,如笔者计算机BIOS启动时间为7.9秒。
  2、查看系统启动时间
  这里重点介绍,因为很多朋友认为系统没有这项功能。
  第一步、对着Win10桌面此电脑单击鼠标右键,菜单中选择“管理”。
  第二步、在计算机管理窗口,依次展开系统工具->事件查看器->Windows日志->系统,点击选中后,找到并点击最右侧窗口重的“查找”。
  第三步、在查找窗口,输入查找条件:6013后点击“查找下一个”按钮,在中间窗口,就会显示出系统启动时间了,如笔者计算机为27秒。
  温馨提示: Win10系统开机所用时间=BIOS启动用时+系统启动用时=7.9+27=35秒

6.注意先将windows升级为最新(累积更新,需要多次更新完再点更新)再装驱动

1.21

1.常用软件下载镜像或仓库(git,Notepad2,vscode,mingw,msys2,gvim)

https://www.cnblogs.com/spfanlost/p/13764188.html

2.Gradle简介与在as中的存放路径

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。

Android——.gradle文件夹的路径C:\Users\qianqiu.gradle

3.重启大法有时还是有用的。。

1.22

1.office 2019 我们遇到一个错误,尝试重新启动应用 http:404

错误消息:不适用

可能由于破解的原因,以及使用了加速器的原因。

右键office,选择应用设置,然后重置,关闭加速器,就好了。

2.win10无法登录微软账号

可能过一天就好了,可将dns服务器设微软的。注意登录成功后切换会自动,否则会出现打开网页慢的现象(域名解析缓慢导致)

1.23

1.单元测试覆盖率是?

单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确,通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。

似乎不同文章的分类不同

https://www.cnblogs.com/zhangfengshi/p/11396771.html

https://www.cnblogs.com/sueyyyy/p/12571446.html

https://www.zhihu.com/question/29528349

2.第几个参数 什么意思?

 // 初始化 Date 对象
       Date date = new Date();

 // 使用toString()显示日期和时间
       System.out.printf("%1$s %2$tB %2$td, %2$tY", 
                         "Due date:", date);

3.static修饰符c++与java不同

java中,静态变量也被称为类变量,不能声明局部变量

4.正则表达式

非终端替换?

5.可变参数用法?

Redundant array creation for calling varargs method

6.垃圾回收机制?

this.id = id;?

throws java.lang.Throwable?

public class FinalizationDemo {  
  public static void main(String[] args) {  
    Cake c1 = new Cake(1);  
    Cake c2 = new Cake(2);  
    Cake c3 = new Cake(3);  

    c2 = c3 = null;  
    System.gc(); //调用Java垃圾收集器
  }  
}  

class Cake extends Object {  
  private int id;  
  public Cake(int id) {  
    this.id = id; 
    System.out.println("Cake Object " + id + "is created");  
  }  

  protected void finalize() throws java.lang.Throwable {  
    super.finalize();  
    System.out.println("Cake Object " + id + "is disposed");  
  }  
}

7.Error occurred during initialization of boot layer
java.lang.module.FindException: Module java.instrument not found

JDK9及以上版本引入了模块。

故改用jdk8即可暂时解决问题

1.25

1.java与c++的区别

1.Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。

2.子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。

如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器

3.static

2.重点

1.实例变量也可以被定义为 final,被定义为 final 的变量不能被修改。被声明为 final 类的方法自动地声明为 final,但是实例变量并不是 final

2.构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。

3.接口没有构造方法。接口中所有的方法必须是抽象方法。接口不能包含成员变量,除了 static 和 final 变量。

4. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法?静态代码块是什么

5.类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常。强制性异常?

1.26

1.重点

1.集合框架的类和接口均在java.util包中。

2.任何对象加入集合类后,自动转变为Object类型,所以在取出的时候,需要进行强制类型转换。

1.27

1.问题

1.主活动与启动活动区别?

2.【Android】‘activity supporting action_view is not set as browsable‘的解决方法

https://blog.csdn.net/wu9caiji/article/details/108061734

在@Override上添加一行注释

@SuppressLint("MissingSuperCall")

加了此行后在模拟器上可能会导致无法弹出选项直接启动浏览器,而手机上正常

3.android studio快捷键

ctrl+o 重写方法

撤销(Ctrl + Z)
重做(Ctrl + shift + z)

VS中初始是(Ctrl + Y)

1.29

1.问题

1.Java Applet与javascript

只要有了Java虚拟机,Java applet就可以运行了,所以我们说具有平台无关性。(此处的平台是指操作系统这个平台)
运行Javascript编写的程序需要能支持Javascript语言的浏览器,如果所有浏览器都支持Javascript,那么Javascript岂不是也相当于平台无关性了。(此处的平台是指浏览器这个平台

applet是运行在浏览器JVM中的小程序,是用java(或者Jython、Groove等)写的,不需要js引擎支持,可以直接与服务器通信,有自己的原生界面,javascript是运行在浏览器js引擎上的,无论与用户的交互还是与服务器的交互都需要通过浏览器来操作

2.JavaScript 与 Java 有什么不同?

JavaScript 编程语言是由 Netscape,Inc. 开发的,它并不是 Java 平台的一部分。

JavaScript 不会创建小应用程序或独立应用程序。在最常见的形式中,JavaScript 驻留在 HTML 文档中,可提供使用简单的 HTML 无法实现的各种网页交互功能。Java 与 JavaScript 之间的主要区别:

  • Java 是一种 OOP 编程语言,而 Java Script 是一种 OOP 脚本语言。
  • Java 创建在虚拟机或浏览器中运行的应用程序,而 JavaScript 代码仅在浏览器中运行。
  • Java 代码需要进行编译,而 JavaScript 代码都在文本中。
  • 它们需要不同的插件。

3.java内存回收机制

4.android listView

如果使用convertview,则相当于过河有固定数量的木板(可见数向上取整 再加1),向前走则将后面的木板扔到前面,向后走则将前面的木板扔到后面。注意使用edittext及时保存内容。

不使用convertview,前进时每次新建一个木板,旧的木板不会自动抛弃,但是也不会再使用,返回时是新建木板。

5.android关于Listview中定义了子控件,子控件和item同时获取焦点的问题

当我们自定义了listview的布局后,布局中如果有可以获取到Focusable的控件,就会将每个item的setOnItemClickListener的事件拦截。解决办法

在listview的item的布局中的根元素加属性android:descendantFocusability=”blocksDescendants”即可将布局中的控件和item的监听获取。

布局中控件的监听,要在adapter中监听;而item的监听要在定义listview的activity中监听

1.30

1.回调函数

https://www.zhihu.com/question/19801131

1.31

1.git和github区别

git可以认为是一个软件,能够帮你更好的写程序,是一个版本管理的工具(可以本地使用),github则是一个网站,这个网站可以帮助程序员之间互相交流和学习。

https://www.cnblogs.com/lukelook/p/11220807.html

2.git add.时提示 warning: LF will be replaced by CRLF in gradlew.

原因是存在符号转义问题

windows中的换行符为 CRLF, 而在linux下的换行符为LF,所以在执行add . 时出现提示,解决办法:

git config –global core.autocrlf false

3.Android Studio的Android Device Monitor在哪儿?

https://blog.csdn.net/qq_42023080/article/details/105842271

2.1

1.ACID

事务具有4个特征,分别是原子性、一致性、隔离性和持久性,简称事务的ACID特性;

一、原子性(atomicity)

一个事务要么全部提交成功,要么全部失败回滚,不能只执行其中的一部分操作,这就是事务的原子性

二、一致性(consistency)

事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态。

如果数据库系统在运行过程中发生故障,有些事务尚未完成就被迫中断,这些未完成的事务对数据库所作的修改有一部分已写入物理数据库,这是数据库就处于一种不正确的状态,也就是不一致的状态

三、隔离性(isolation)

事务的隔离性是指在并发环境中,并发的事务时相互隔离的,一个事务的执行不能不被其他事务干扰。不同的事务并发操作相同的数据时,每个事务都有各自完成的数据空间,即一个事务内部的操作及使用的数据对其他并发事务时隔离的,并发执行的各个事务之间不能相互干扰。

在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同,分别是:未授权读取,授权读取,可重复读取和串行化

1、读未提交(Read Uncommited),该隔离级别允许脏读取,其隔离级别最低;比如事务A和事务B同时进行,事务A在整个执行阶段,会将某数据的值从1开始一直加到10,然后进行事务提交,此时,事务B能够看到这个数据项在事务A操作过程中的所有中间值(如1变成2,2变成3等),而对这一系列的中间值的读取就是未授权读取

2、授权读取也称为已提交读(Read Commited),授权读取只允许获取已经提交的数据。比如事务A和事务B同时进行,事务A进行+1操作,此时,事务B无法看到这个数据项在事务A操作过程中的所有中间值,只能看到最终的10。另外,如果说有一个事务C,和事务A进行非常类似的操作,只是事务C是将数据项从10加到20,此时事务B也同样可以读取到20,即授权读取允许不可重复读取。

3、可重复读(Repeatable Read)

就是保证在事务处理过程中,多次读取同一个数据时,其值都和事务开始时刻是一致的,因此该事务级别禁止不可重复读取和脏读取,但是有可能出现幻影数据。所谓幻影数据,就是指同样的事务操作,在前后两个时间段内执行对同一个数据项的读取,可能出现不一致的结果。在上面的例子中,可重复读取隔离级别能够保证事务B在第一次事务操作过程中,始终对数据项读取到1,但是在下一次事务操作中,即使事务B(注意,事务名字虽然相同,但是指的是另一个事务操作)采用同样的查询方式,就可能读取到10或20;

4、串行化

是最严格的事务隔离级别,它要求所有事务被串行执行,即事务只能一个接一个的进行处理,不能并发执行。

四、持久性(durability)

一旦事务提交,那么它对数据库中的对应数据的状态的变更就会永久保存到数据库中。–即使发生系统崩溃或机器宕机等故障,只要数据库能够重新启动,那么一定能够将其恢复到事务成功结束的状态

作者:老城底
链接:https://www.jianshu.com/p/fc8a654f2205
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2.多态的理解

当子类未重新实现父类的A方法时,声明一个父类对象,而赋给他一个子类对象时,如果调用方法A,则调用父类的。当子类重新实现了方法A,则根据多态调用子类的方法。

3.遗留问题(未解决!)

1.如何获取指定窗口的句柄(通过进程名-PID-句柄?或者枚举所有窗口句柄?),并对其进行各种操作(模拟点击,控制窗口内含的其他控件等)以及如何对指定窗口位置截图?窗口与窗口的关系

https://blog.csdn.net/dazhong159/article/details/7909964

2.使用airtest,会自动调用写好的脚本

普通测试如何用Airtest编写UI自动化脚本

https://www.cnblogs.com/badluckforyou/p/12446094.html

命令行运行写好的脚本https://blog.csdn.net/a914397365/article/details/103082282/

4.位图

位图图像(bitmap),亦称为点阵图像栅格图像,是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成图样。当放大位图时,可以看见赖以构成整个图像的无数单个方块。扩大位图尺寸的效果是增大单个像素,从而使线条和形状显得参差不齐。然而,如果从稍远的位置观看它,位图图像的颜色和形状又显得是连续的。用数码相机拍摄的照片、扫描仪扫描的图片以及计算机截屏图等都属于位图。位图的特点是可以表现色彩的变化和颜色的细微过渡,产生逼真的效果,缺点是在保存时需要记录每一个像素的位置和颜色值,占用较大的存储空间。常用的位图处理软件有Photoshop(同时也包含矢量功能)、Painter和Windows系统自带的画图工具等,Adobe Illustrator则是矢量图软件。

5.窗口句柄

在Windows中,句柄是一个系统内部数据结构的引用。例如当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口的句柄,系统会通知你:你正在操作142号窗口,就此你的应用程序就能要求系统对142号窗口进行操作——移动窗口、改变窗口大小、把窗口最小化等等。实际上许多Windows API函数把句柄作为它的第一个参数,如GDI(图形设备接口)句柄、菜单句柄、实例句柄、位图句柄等,不仅仅局限于窗口函数。换句话说,句柄是一种内部代码,通过它能引用受系统控制的特殊元素,如窗口、位图图标、内存块、光标、字体、菜单等。

6.android support库相关

https://www.cnblogs.com/yidijimao/p/14077920.html

https://blog.csdn.net/yin_ol/article/details/89421390

https://cloud.tencent.com/developer/article/1601448

androidx库与support库的 类映射https://developer.android.google.cn/jetpack/androidx/migrate/class-mappings?hl=zh_cn#androidsupportv4

7.android通知小图标只能使用纯alpha图层的图片进行设置?

8.AndroidManifest.xml中android:name功能介绍

https://blog.csdn.net/zeng622peng/article/details/78343443

9.使用库兼容所有安卓版本?

2.2

1.Android err_cleartext_not_permitted

https://blog.csdn.net/wangluoyang/article/details/89182698

2.Android Studio3.X中dependencies依赖用api和implementation替换了compile

https://blog.csdn.net/u010358168/article/details/80942801

3.JSON

(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

4.XML

  • XML 指可扩展标记语言(EXtensible Markup Language
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而非显示数据
  • XML 标签没有被预定义。您需要自行定义标签
  • XML 被设计为具有自我描述性
  • XML 是 W3C 的推荐标准

与HTML的区别

XML 被设计用来传输和存储数据

HTML 被设计用来显示数据

5.W3C

W3C(英语:World Wide Web Consortium,万维网联盟),又称 W3C 理事会,是万维网的主要国际标准组织。

6.android

子线程无法通过return返回数据

子线程无法进行ui操作,除非借助runonuithread()方法来进行线程转换、

p335面?

2.3

1.CLEARTEXT communication to “ “ not permitted by network security policy明文通信到“”不允许网络安全策略

在AndroidManifest.xml的application中添加android:usesCleartextTraffic=”true”

https://blog.csdn.net/java558/article/details/111357872

https://blog.csdn.net/weixin_34358092/article/details/92276055?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

3.Android Bitmap

https://blog.csdn.net/a_a_ping/article/details/52449405

4.解决GitHub的raw.githubusercontent.com无法连接问题

https://blog.csdn.net/laoxuan2011/article/details/106177126/

5.Permission Denial: startForeground from pid=27589, uid=10168 requires android.permission.FOREGROUND_

https://blog.csdn.net/csbn123456789/article/details/103104347

6.WordPress 抱歉,由于安全原因,这个文件类型不受支持

https://blog.csdn.net/alvincasper/article/details/112387223

7.AndroidX 将原始支持库 API 替换为 androidx 命名空间中的软件包

https://developer.android.google.cn/jetpack/androidx/migrate

8.Not allowed to start service Intent  xxxx    app is in background uid UidRecord

不允许后台App启动后台Service

https://blog.csdn.net/gxlgxjhll/article/details/88684993

9.Android 8.0 的Notification不显示问题

Notification在android 8.0以上设置时,需要设置渠道信息才能够正常显示通知

https://blog.csdn.net/u010231682/article/details/80732879?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

9.responsebody.contentLength()获取到的值为-1

在Header中加入:Request.Builder().addHeader(“Accept-Encoding”, “identity”)

https://blog.csdn.net/qq_32545583/article/details/107411344

10.添加读取文件权限后仍出现java.io.FileNotFoundException:/storage/emulated/0/formats/(路径)

https://blog.csdn.net/qq_37014804/article/details/108336685【解决方案】

https://blog.csdn.net/woai110120130/article/details/109153724【原因,android10限制】

11.int转string

String.valueOf(num)

12.android服务中的代码默认运行在主线程中,故需在服务每个具体的方法里开启一个子线程,去处理费时的逻辑。

13.Failed to create image decoder with message ‘unimplemented’

2.4

1.Android AndroidManifest.xml文件权限出现“Permission is only granted to system apps”

<uses-permission android:name=”android.permission.MOUNT_UNMOUNT_FILESYSTEMS” tools:ignore=”ProtectedPermissions”></uses-permission>

2.百度地图SDK

http://lbsyun.baidu.com/apiconsole/key#/home

3.JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore -srckeystore E:\xxxxxx- pkcs12” 迁移到行业标准格式PKCS12

采用下述方法仍很奇怪

https://blog.csdn.net/qq_36771588/article/details/103186626

4.Android 返回按钮的自定义设置

webview返回设置,以及返回两次才退出程序

https://blog.csdn.net/u011033906/article/details/88400644

5.【Android】如何使用ADB进行调试

https://zhidao.baidu.com/question/489961569.html

6.Android APK打包流程

https://www.cnblogs.com/xunbu7/p/7345912.html

2.5

1.as你的主机中的软件中止了一个已建立的连接。

关闭电脑上的移动热点

2.Android App Bundle和APK

第一个选择是Google 推出的模式,APK容量将大大缩小,“.aab”格式,仅支持Android9.0及以上版本可安装

如果是9.0以下则还是要选择:APK

https://blog.csdn.net/YuEOrange/article/details/86018718

3.key store

该处设置的密码与2.7-1对应

4.JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore -srckeystore F:\mySourse\android\qianqiu.jks -destkeystore F:\mySourse\android\qianqiu.jks -deststoretype pkcs12” 迁移到行业标准格式 PKCS12。

直接使用上述指令即可

5.keytool -genkey -alias key0 -keypass 密码 -keyalg RSA -keysize 2048 -validity 36500 -keystore F:\mySourse\android\WebViewTest\qianqiu.keystore -storepass 密码

注意1024将来会被弃用,故采用2048

6.java常见证书类型和密钥库类型https://blog.csdn.net/liaomin416100569/article/details/76020675?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161248952616780261971619%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161248952616780261971619&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-7-76020675.pc_search_result_cache&utm_term=%E5%8F%8C%E5%AD%97%E6%AF%8D%E5%9B%BD%E5%AE%B6%E4%BB%A3%E7%A0%81&spm=1018.2226.3001.4187

7.jks与keystore区别

keystore 是Eclipse 打包生成的签名。
jks是Android studio 生成的签名。
都是用来打包的,并保证应用的唯一性,这就是他们的最大的区别!
备注:很多第三方市场,我们上传apk的时候,他们只支持keystore,需要我们把.jks签名转化为.keystore!

https://blog.csdn.net/qq_15509421/article/details/91870944

8.signature versions

打包一个文件的签名版本,

选V1打包出来的app是jar的(一般这种就是当做第三方导入项目来用的),

选v2打包出来的APP是apk版本的(也就是可以直接在手机上安装的,可是上线的);

https://blog.csdn.net/jiangjingxuan/article/details/66970552

9.AirTest

官网http://airtest.netease.com/tutorial/Tutorial.html

air教程https://my.oschina.net/u/4531265/blog/4325488

poco教程https://blog.csdn.net/laoxi_liu/article/details/104628765

python3教程https://www.runoob.com/python3/python3-intro.html

AirTest与模拟器连接(二)

逍遥adb connect 127.0.0.1:21503

https://www.cnblogs.com/zhu520/p/11390847.html

10.python知识点

1.默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。

2.标识符对大小写敏感。在 Python 3 中,可以用中文作为变量名,非 ASCII 标识符也是允许的了。

2.Python中单行注释以 # 开头。多行注释可以用多个 # 号,还有 ”’ 和 “””

3.python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。

4.反斜杠可以用来转义,使用r可以让反斜杠不发生转义。 如 r”this is a line with \n” 则\n会显示,并不是换行。

5.python中单引号和双引号使用完全相同。Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。

6.Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

在 Python 中,变量就是变量,它没有类型,我们所说的”类型”是变量所指的内存中对象的类型。

7.Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠(\)来实现多行语句,例如:

total = item_one + \
        item_two + \
        item_three

在 [], {}, 或 () 中的多行语句,不需要使用反斜杠(\),例如:

total = ['item_one', 'item_two', 'item_three',
        'item_four', 'item_five']

8.数值的除法包含两个运算符:/ 返回一个浮点数,// 返回一个整数

9.使用del语句删除单个或多个对象。例如:

del var
del var_a, var_b

10.isinstance 和 type 的区别在于:

  • type()不会认为子类是一种父类类型。
  • isinstance()会认为子类是一种父类类型。

用法:

a = 111

isinstance(a, int)

 print(type(a))

11.

字符串的截取的语法格式如下:

变量[头下标:尾下标]

str = ‘Runoob’

print (str)          # 输出字符串
print (str[0:-1])    # 输出第一个到倒数第二个的所有字符
print (str[0])       # 输出字符串第一个字符
print (str[2:5])     # 输出从第三个开始到第五个的字符
print (str[2:])      # 输出从第三个开始的后的所有字符
print (str * 2)      # 输出字符串两次,也可以写成 print (2 * str)
print (str + “TEST”) # 连接字符串

12.列表 List写在方括号之间,元素用逗号隔开,列表中的元素类型可以不相同

列表截取可以接收第三个参数,参数作用是截取的步长。如果第三个参数为负数表示逆向读取

list = [ ‘abcd’, 786 , 2.23, ‘runoob’, 70.2 ]
tinylist = [123, ‘runoob’]

print (list)            # 输出完整列表
print (list[0])         # 输出列表第一个元素
print (list[1:3])       # 从第二个开始输出到第三个元素
print (list[2:])        # 输出从第三个元素开始的所有元素
print (tinylist * 2)    # 输出两次列表
print (list + tinylist) # 连接列表

13.元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。

元组中的元素类型也可以不相同

2.7

1.红圈是为了打开2.6-3设置的jks,验明身份。

用来打开已经创建好的jks文件(key store path选定的那个)

2.手机存储解析

preference存放的 data/data/路径无法直接查看

https://www.jianshu.com/p/07c9f17ef578【精简版,实用版】

https://www.it610.com/article/1296536549315387392.htm【简略版】

https://blog.csdn.net/u010937230/article/details/73303034【详解】

https://www.jianshu.com/p/44813316f377【详解】

3.git相关warning之LF/CRCL【未完全解决】

https://www.jianshu.com/p/450cd21b36a4【解答】

拓展

1.CRLF是Carriage-Return Line-Feed的缩写,意思是回车换行,就是回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)。换行在有的ASCII码表也用newline(简nl)来进行表示,这里的lf是line feed的概念,意思是一样的

2.gradle与gradlew

gradle命令一顿敲,万一机器上没有gradle呢?
gradle wrapper就起大作用了

在你普通的gradle项目中,执行gradle wrapper生成gradle wrapper相关的信息【gralew、gradlew.bat、gradle目录】,
这些信息需要同src等信息一同传递给另外的人,比如git传递,在另外的机器上,即使没有安装gradle,可以使用gradlew命令
完全代替gradle命令,在第一次的时候会根据刚刚生成的信息下载gradle。

https://www.jianshu.com/p/db94d39478d6【详细版】

3.gradle加入环境变量https://www.jb51.net/article/140691.htm

4. .git文件分析

在这里插入图片描述

hook:存放一些sheel的地方。
info:存放仓库的信息
object:存放所有git对象的地方
refs:存放提交hash的地方
config:github的配置信息
description:仓库的描述信息,主要给gitweb等git托管系统使用
HEAD:映射到ref引用,能够找到下一次commit的前一次哈希值

https://my.oschina.net/wangyuzhan/blog/1619654【具体版】

5.git stash与git commit的区别

https://blog.csdn.net/u010629610/article/details/87335894

4.Android Device Monitor中File Explorer标签中Data文件夹不能打开

读写权限问题,非root一般无法打开

https://blog.csdn.net/weixin_38319113/article/details/79821329

2.8

1.玩转本地git与github相连

https://www.cnblogs.com/zhangyaolan/p/11106091.html

拓展-SSH协议

SSH 为Secure Shell 的缩写,为建立在应用层基础上的安全协议

从客户端来看,SSH提供两种级别的安全验证。
第一种级别(基于口令的安全验证)
只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
第二种级别(基于密匙的安全验证)
需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒 [2] 。

私钥与公钥一样?不一样

https://www.cnblogs.com/shenkebky/p/8461841.html

能够防止DNS欺骗和IP欺骗?

2.PPP

点对点协议(Point to Point Protocol,PPP)

数据链路层协议

3.FTPS(基于 SSL 的FTP)与 SFTP(SSH 文件传输协议)对比

https://blog.csdn.net/weixin_34082695/article/details/90555404

https://www.cnblogs.com/zhjh256/p/9695297.html

4.局域网传输软件飞信

局域网分发文件 镭速传输

5.Permission is only granted to system apps

将uses-permission改为permission即可

在这里插入图片描述

6.Android Q(10)版本

这种本地图片地址:

/storage/emulated/0/DCIM/Camera/IMG_20200316_091727.jpg

写和读的权限配置好后 也动态获取了权限 但使用BitmapFactory的时候还有提示权限拒绝 在anroid9.0及以下的都可以 但android10.0出现了问题这个时候我们在 清单文件里面加入这个配置就可以了。

法一:清单文件application节点下加上

<android:requestLegacyExternalStorage="true">

参考AndroidQ的兼容性适配

法二:也可以不添加上面的属性 但你需要把你的targetSdkVersion 设置在29以下
targetSdkVersion 28

https://blog.csdn.net/irizhao/article/details/94121551【android10更多兼容】

7.android存储详解

/data/data,可以理解为指向/data/user/0,Context.getFilesDir.getAbsolutePath()会返回 /data/user/0/package/files

具体讲解

Android内、外存储 易混淆点剖析(/mnt/sdcard、/storage/sdcard0、/storage/emulated/0等区别)https://blog.csdn.net/itermeng/article/details/79423035

Android目录差异性调查(/storage/sdcard0, /sdcard, /mnt/sdcard ,/data/data,/data/user/0)https://blog.csdn.net/iblue007/article/details/109046280

8.Android 百度地图SDK 自动定位、标记定位

sdk中的jar包需加到libs目录下,同时在build.gradle中添加

implementation fileTree(dir:’libs’,include:[‘*.jar’])//libs目录下所有以.jar结尾的文件添加到当前项目的引用中

https://blog.csdn.net/qq_38436214/article/details/107604267【具体用法】

9.git reset使用

回滚或者恢复至某一版本

先用git log查看提交记录,选择要切换至的id,使用下述指令

git reset –hard id //加–hard会重置已 commit和工作区 的内容

https://blog.csdn.net/longintchar/article/details/81843048【git reset详解】

拓展:

git push -f origin master//强制推送到远程分支, 会抹去远程库的提交信息?【待尝试】

git revert id //回退到指定版本, 需要解决冲突

  1. git reset 和 git revert 的区别?【待尝试】
  2. 1. git revert 后会多出一条commit,这里可进行回撤操作
  3. 2. git reset 直接把之前 commit 删掉,非 git reset --hard 的操作是不会删掉修改代码,如果远程已经有之前代码,需要强推 git push -f

git远程代码库回滚(webstorm下),注意仅供学习,不建议使用此方法,当出现需要远程代码库回滚时,采用直接修改后再重新push的方法,不要采用下面链接所描述的方法。

https://www.cnblogs.com/ningkyolei/p/5026011.html【待尝试】

2.9

1.idea中引入sqlite失败

https://blog.csdn.net/yuzhongqingsi/article/details/110095206

http://www.bubuko.com/infodetail-3611026.html

找不到jar包【未解决】

2.™、®、©这几种标志分别是什么意思?

圈R表示注册成功商标的标记,字母R是英文register的缩写,其作为名词的英文原意是“记录; 登记簿; 登记,注册;”,用在商标上也是指注册商标的意思。商标已在国家商标局进行注册申请并已经商标局审查通过属于注册商标所有人所独占,受法律保护,任何企业或个人未经注册商标所有权人许可或授权,均不可自行使用,否则将承担侵权责任。 

TM是TRADEMARK的缩写,在我国,TM标志并非对商标起到保护作用,不同于国外的标注TM的,即为商标注册成功,TM表示的是该商标已经向国家商标局提出申请,并且国家商标局也已经下发了《受理通知书》,进入了异议期,这样就可以防止其他人提出重复申请,也表示现有商标持有人有优先使用权。

而圈C是英文copyright的缩写,其作为名词的英文原意是“版权、著作权”,根据《世界版权公约》规定,版权标记由版权符号c即英文copyright(版权)一词的首字母外加一个圆圈组成,表示是取得版权的相关作品

3.遇到签名后的release版闪退,而debug版没有问题,而且通过as直接安装relese也没问题。后重新打包后又正常了。【怪事】

4.msi后缀

MSI文件是Windows Installer的数据包,它实际上是一个数据库,包含安装一种产品所需要的信息和在很多安装情形下安装(和卸载)程序所需的指令和数据。

5.关于java中的jdbc、数据库驱动、数据库连接池的学习与理解

https://blog.csdn.net/chenmingxu438521/article/details/89393058

6.在mysql官网上下载连接的jar包

https://blog.csdn.net/qq_40453972/article/details/88027891

  1. 进入官网下载地址 https://dev.mysql.com/downloads/connector/j/
  2. 选择 (注:select Operating System这里一定要修改!!!

7.jar包是什么
jar包就是别人已经写好的一些类,然后将这些类进行打包,你可以将这些jar包引入你的项目中,然后就可以直接使用这些jar包中的类和属性以及方法。
JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。为 J2EE 应用程序创建的 JAR 文件是 EAR 文件(企业 JAR 文件)。
一个 JAR 文件可以用于
□ 用于发布和使用类库
□ 作为应用程序和扩展的构建单元
□ 作为组件、applet 或者插件程序的部署单位
□ 用于打包与组件相关联的辅助资源
8.tar.gz与zip的区别
“tar.gz压缩格式用于unix的操作系统,而zip用于windows的操作系统,但在windows系统中用WinRar工具同样可以解压缩tar.gz格式的

zip流行于windows系统上的压缩文件(其他系统也可以打开)。zip格式开放而且免费。zip支持分卷压缩,128/256-bit AES加密算法等功能。zip的含义是速度,其目标就是为顶替ARC而诞生的“职业”压缩软件。

tar是“tape archive”(磁带存档)的简称,它出现在还没有软盘驱动器、硬盘和
光盘驱动器的计算机早期阶段,随着时间的推移, tar命令逐渐变为一个将很多文件进行存档的工具,目前许多用于Linux操作系统的程序就是打包为tar档案文件的形式。 在Linux里面,tar一般和其他没有文件管理的压缩算法文件结合使用,用tar打包整个文件目录结构成一个文件,再用gz,bzip等压缩算法压缩成一次。也是Linux常见的压缩归档的处理方法。

9.IDEA本地仓库有jar包,还报错找不到jar包。

10.IDEA载入JDBC驱动

1.首先,你必须去官网下载一个驱动包jar

2.关键一步:!!!

        打开IDEA软件–>按快捷键ctrl+alt+shift+s(进入Project Structure)–>在左边导航栏上找到Project setting下的Modules–>将Module SDK改为你的jdk–>在scope右边找到“+”–>选第一个jars of directories–>选中你解压的驱动包–>ok即可

3.查看你的Extermal libraries

2.11

1.JAVA中int转String类型

  1. String.valueOf(i)
  2. Integer.toString(i)
  3. i+””

2.JAVA中String转Int类型

  1. int i=Integer.parseInt(string);
  2. int i=Integer.valueOf(s);

3.MySQL查询语句示例

/*websites  为表名   NAME alexa url country  为字段*/
SELECT * FROM websites;                      /* 查询表所有数据 */

SELECT NAME FROM websites;                   /* 查询表字段数据 */

SELECT * FROM websites where name = "广西";   /* 查询表字段下条件数据 */

SELECT * from websites where name like "_o%"; /* 模糊查询表下数据 */

SELECT * FROM websites where id BETWEEN "1" AND "5";    /* 查询表下字段范围数据 */
SELECT * FROM Websites WHERE country = "CN" AND alexa > 50;  /*查询表下范围条件数据*/

SELECT * FROM Websites WHERE country = "USA" OR country="sh"; /* 查询表下条件不同值 */

SELECT * FROM Websites ORDER BY alexa;                      /* 查询表下值排序结果 */

SELECT * FROM Websites ORDER BY alexa DESC;                 /* 查询表下排序结果降序 */

SELECT * FROM Websites LIMIT 2;      /* 查询表下最多2条数据 */

4.MySQL Workbench使用教程

http://c.biancheng.net/view/2625.html

5.使用PreparedStatement的execute方法执行sql插入语句,执行成功,但是返回结果却为false

boolean execute()throws SQLException

在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。一些特别处理过的语句返回多个结果,execute 方法处理这些复杂的语句;executeQuery 和 executeUpdate 处理形式更简单的语句。 
execute 方法返回一个 boolean 值指示第一个结果的形式。必须调用 getResultSet 或 getUpdateCount 方法来检索结果,并且必须调用 getMoreResults 移动到任何后面的结果。 
返回:
如果第一个结果是 ResultSet 对象,则返回 true;如果第一个结果是更新计数或者没有结果,则返回 false

意思就是如果是查询的话返回true,如果是更新或插入的话就返回false

6.利用message对象进行参数的传递

灵活运用bundle

https://www.xuebuyuan.com/1346294.html

7.MySQL重置ID起始值

【原因】删除数据会导致id空缺

执行如下SQL: (假定表名是test)
delete from test;
alter table test auto_increment=1;

这种方法好处是可以从任何值开始,缺点是如果数据量大的话delete from test;非常耗时

当你重置ID的同时数据库表内容会被清空,请谨慎操作。

2.12

1.androidstudio自动排版

Ctrl + Alt + L

2.通过subString()方法来进行字符串截取。

3.Java中Synchronized的用法

https://www.cnblogs.com/weibanggang/p/9470718.html

4.线程休眠

Thread.sleep(100);

5.Java Thread之start和run方法的区别

https://www.cnblogs.com/agilestyle/p/11421515.html

2.20

1.IDEA sql语句中select 后面字段报红(代码能正常执行)

https://blog.csdn.net/qq_28297815/article/details/110134324

2.26

1.github协作常用指令全流程总结(纯命令行)

思路来源

https://zhuanlan.zhihu.com/p/28019975

https://zhuanlan.zhihu.com/p/23478654

1.git 环境搭建

https://www.cnblogs.com/zhangyaolan/p/11105330.html

2.本地git与github相连

https://www.cnblogs.com/zhangyaolan/p/11106091.html

对ssh的更详细解释见

https://blog.csdn.net/liuxiaodong400/article/details/81221834?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=aae23098-4b68-41b8-85b1-52611bf1ea20&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

3.成为某个项目(你要加入的)的协作者

项目所有者将你设置为协作者
项目所有者将你设置为协作者

4.使用SSH克隆远程仓库到本地(如之前已经克隆过,则需将develop分支的内容重新拉一下,防止本地不是最新的

先切换至本地develop分支git checkout develop

拉取远程仓库develop分支最新内容git pull origin develop)

右键打开Gitbash(打开的位置即为要项目将要保存的位置)执行

git clone git@github.com:qianqiu-2020/FlexibleNetworks.git

克隆完毕后切换至develop分支

git checkout develop

创建自己的开发分支

git branch dev(自己随意起名)

切换至自己的分支

git checkout dev

5.在自己新建的分支里进行开发

开发时需要经常使用

git add . 添加所有文件(除了.gitignore文件中指定的不需要添加的文件)

git commit -m “注释,写明新做的功能或内容”

【拓展】管理分支总结

git branch 查看本地分支

git branch -r 查看远程分支

git branch -a 查看所有分支

6.完成了较大的更新时,需要提交到远程仓库时

先commit自己的分支到本地仓库 后 切换至develop

git checkout develop

然后拉取远程仓库的develop分支到本地(防止其他人已经进行过更新)

git pull origin develop

之后将自己的分支合并(合并不会影响合并者,即dev)到develop中,在develop中执行如下命令

git merge dev

7.此时有可能需要解决冲突

如果merge之后后悔了,则可进行以下操作

第一步:git checkout到你要恢复的那个分支上

11.git checkout develop

第二步:git reflog查出要回退到merge前的版本号

11. git reflog

第三步:git reset –hard [版本号]就回退到merge前的代码状态了

11.git reset --hard f82cfd2

8.成功合并后,将develop分支提交到远程仓库

git push origin develop

9.如果需要继续开发,则先删除自己的分支dev,重新从develop分支中新建一个自己的分支

删除分支git branch -d dev

新建分支git branch newdev

切换至新的分支git checkout newdev

之后再次跳转到第五步,如此循环。

git存储全览图

【拓展】gitkraken(git的一种可视化工具)的使用

https://www.cnblogs.com/fzuljz/p/7889098.html

【另一种类似思路】组织->团队

【另一种思路】代码拥有者添加其他人的ssh,可以使得其他人直接访问代码拥有者的仓库

多个ssh密钥相关问题https://www.cnblogs.com/SUNSHINEC/p/8617029.html

【另一种思路】参与者fork+pull

https://blog.csdn.net/qq_41401062/article/details/89304072

【拓展】克隆时http与ssh的区别
1.clone项目:使用ssh方式时,首先你必须是该项目的管理者(协作者)或拥有者,并且需要配置个人的ssh key。而对于使用https方式来讲,就没有这些要求。

2.push:在使用ssh方式时,是不需要验证用户名和密码,如果你在配置ssh key时设置了密码,则仅需要验证配对密码。而对于使用https方式来讲,每次push都需要验证用户名和密码。

2.java JSON创建与解析

1.json生成

https://blog.csdn.net/qq_39559604/article/details/80259063

2.JSON解析

1、JSON官方
2、GSON
3、FastJSON
4、jackson

https://blog.csdn.net/xingfei_work/article/details/76572550?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=16351e02-4efd-4f01-b04c-b507588e5785&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

3.Android – 网络请求之OKHttp3

https://www.jianshu.com/p/16c2cc230a8c

4.虚拟桌面(一台电脑开多个桌面)

http://www.win7999.com/news/392092145.html

win+tab可新建删除切换桌面

ctrl+win+左右键切换

5.图灵机器人官网

http://www.tuling123.com/member/robot/index.jhtml

2.27

安卓开发的一些问题

1.Connect to dl.google.com failed:Connection timed out

一种情况如下,纯属找不到,可能是包名错误.

说明不存在这个依赖
删除掉这个

另一种则是网络问题,可参看设置hosts

https://juejin.cn/post/6844903919911436295

2.卡在Gradle:Build Running

需要点开build的内容,看报错,原因有多种,一种参见上面的问题

https://blog.csdn.net/a549742320/article/details/52525257

3.安卓 后台杀死进程,OnDestroy会执行吗?【未解决】

实测不会

网上主流说法,但是实测发现均不会执行

尝试了registerActivityLifecycleCallbacks 监听应用Activity的生命周期,但仍不行

onTerminate也不行,仅仅在模拟器上可行

onlowmemory也不行

暂时未找到解决方法!

4.套接字开始时间长后无法接收数据

大概率是因为自动关闭,所以虽然有数据传过来。但是无法接收

解决方法(每超过一定时间不用即关闭重开):

一种是当接收到数据后,就让一个label的值改变成当前的时间,格式:HHmmss,每一秒钟进行判断,当当前时间(HHmmss)-label的文本如果大于200,也就是2分钟,我就重新先关闭socket,在重新打开,这样就可以了。当socket自动关闭后,就在两分钟后自动重新打开。

另一种则是设置超时时间

serverSocket.setSoTimeout(1000000);

5.android support库迁移至androidx库,对应类名映射

也可引入部分,如要使用

androidx.recyclerview.widget.RecyclerView

implementation 'androidx.recyclerview:recyclerview:1.0.0'

域名部分:组部分:版本号

https://developer.android.google.cn/jetpack/androidx/migrate/class-mappings?hl=zh_cn#androidsupportv4

6.应用内更新功能的实现

Android 7.0 FileProvider 使用说明

https://blog.csdn.net/qq_32534441/article/details/103511852?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&dist_request_id=bb7d7b7e-8bf5-4e34-9963-8a89de1e65a4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control

 exposed beyond app through Intent.getData()

https://blog.csdn.net/u010356768/article/details/89212742

找不到具有授权者的元数据(Couldn&#39;t find meta-data for provider with authority)

https://www.it1352.com/1835904.html

android 8.0以上无法唤起apk安装界面问题

https://blog.csdn.net/vulgar_rabbit/article/details/90669620

https://www.ventoy.net/cn/index.html