快速排序 核心:二分法,递归; 推荐一个把复杂烧脑的算法计算过程转为可视化动画的网站,里面还有数据结构等等好多的好东西!!! https://visualgo.net/en
1 //快排 2 function Quicksort(arr){ 3 //递归的边界,计算到中间值只有它自己就排序成功了; 4 if(arr.length <= 1){ 5 return arr 6 } 7 //计算数组的相对中间下标,然后取出中间下标对应的值; 8 let index = Math.round(arr.length/2); 9 let centerNumber = arr.splice(index,1); 10 //两个空数组,准备存储; 11 let Leftarr = []; 12 let Rightarr = []; 13 //循环对比,跟中间值比;比它小的放左边,大的放右边; 14 for(let i=0; i<arr.length; i++){ 15 if(arr[i]<centerNumber){ 16 Leftarr.push(arr[i]) 17 }else{ 18 Rightarr.push(arr[i]) 19 } 20 } 21 //递归,数组合并,中间值,自然放中间; 22 return Quicksort(Leftarr).concat(centerNumber,Quicksort(Rightarr)) 23 }
网络编程(四) 昨日内容 UDP协议 import socket # 服务端 server = socket.socket(type=socket.SOCK_DGRAM) # 自己指定UDP协议(默认是TCP协议) server.bind(('127.0.0.1', 8080)) # 和TCP几乎一样,写入地址和端口号 msg, addr = server.recvfrom(1024) # 待接收 print('msg:', msg.decode('utf8')) print('addr:', addr) # 额外打印出端口号,为了确定是哪个客户端 server.sendto(b'hello baby', addr) import socket # 客户端 client = socket.socket(type=socket.SOCK_DGRAM) # 自己指定UDP协议(默认是TCP协议) server_addr = ('127.0.0.1', 8080) # 查找通讯录 client.sendto(b'hello server baby', server_addr) msg, addr = client.recvfrom(1024) print('msg:', msg.decode('utf8')) print('addr:', addr) 不同处 UDP TCP socket.socket(type=socket.SOCK_DGRAM) socket.socket() recvfrom() recv() sendto() send() 操作系统发展史 graph TB 无操作系统-->联机批处理-->脱机批处理 一句话概括操作系统发展史:为了最大的提升CPU的利用率
迭代器 map<string,int>::iterator it; for(it=mp.begin();it!=mp.end();it++) { cout<<it->first<< <<it->second<<endl; }
auto for(auto l:mp) { cout<<l.first<< <<l.second<<endl;}
HTML代码
<!DOCTYPE html> <html> <head> <meta http-equiv=content-type content=text/html; charset=utf-8> <meta name=viewport content=width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no> <title>泡泡</title> <link rel=stylesheet href=pp.css> </head> <body> <div class=container> <div class=pp></div> <div class=shadow></div> </div> </body> </html> CSS代码(可根据想要的效果改动相应的数值)
*{ margin: 0; padding: 0; } body{ height: 100vh; /* 弹性布局 居中显示 */ display: flex; justify-content: center; align-items: center; /* 渐变背景 */ background: linear-gradient(150deg,#ffd9e5,#fff0b2,#affffc); /* 溢出隐藏 */ overflow: hidden; } .container{ width: 200px; height: 200px; /* 相对定位 */ position: relative; } /* 泡泡 */ .
1. 下载并安装PCL 1.12.1
到https://github.com/PointCloudLibrary/pcl/releases下载下面两个文件:
安装PCL时,选择添加路径到Path.解压pcl-1.12.1-pdb-msvc2019-win64.zip,复制.pdb文件到C:\Program Files\PCL 1.12.1\bin路径下面.
2. 设置PCL 1.12.1环境
(1) 新建一个C++控制台程序,进入属性管理器,选择适当的属性:Debug/Release,X64/X86;
(2) 选择VC++目录-->包含目录-->编辑,添加下面的文件;
(3) 添加库目录;
(4) 链接器-->输入-->附加依赖项,需要添加很多依赖项,Debug的文件列表如下;
pcl_commond.lib pcl_featuresd.lib pcl_filtersd.lib pcl_iod.lib pcl_io_plyd.lib pcl_kdtreed.lib pcl_keypointsd.lib pcl_mld.lib pcl_octreed.lib pcl_outofcored.lib pcl_peopled.lib pcl_recognitiond.lib pcl_registrationd.lib pcl_sample_consensusd.lib pcl_searchd.lib pcl_segmentationd.lib pcl_stereod.lib pcl_surfaced.lib pcl_trackingd.lib pcl_visualizationd.lib libboost_atomic-vc142-mt-gd-x64-1_78.lib libboost_bzip2-vc142-mt-gd-x64-1_78.lib libboost_chrono-vc142-mt-gd-x64-1_78.lib libboost_container-vc142-mt-gd-x64-1_78.lib libboost_context-vc142-mt-gd-x64-1_78.lib libboost_contract-vc142-mt-gd-x64-1_78.lib libboost_coroutine-vc142-mt-gd-x64-1_78.lib libboost_date_time-vc142-mt-gd-x64-1_78.lib libboost_exception-vc142-mt-gd-x64-1_78.lib libboost_filesystem-vc142-mt-gd-x64-1_78.lib libboost_graph-vc142-mt-gd-x64-1_78.lib libboost_graph_parallel-vc142-mt-gd-x64-1_78.lib libboost_iostreams-vc142-mt-gd-x64-1_78.lib libboost_json-vc142-mt-gd-x64-1_78.lib libboost_locale-vc142-mt-gd-x64-1_78.lib libboost_log-vc142-mt-gd-x64-1_78.lib libboost_log_setup-vc142-mt-gd-x64-1_78.lib libboost_math_c99-vc142-mt-gd-x64-1_78.lib libboost_math_c99f-vc142-mt-gd-x64-1_78.lib libboost_math_c99l-vc142-mt-gd-x64-1_78.lib libboost_math_tr1-vc142-mt-gd-x64-1_78.lib libboost_math_tr1f-vc142-mt-gd-x64-1_78.lib libboost_math_tr1l-vc142-mt-gd-x64-1_78.lib libboost_mpi-vc142-mt-gd-x64-1_78.lib libboost_nowide-vc142-mt-gd-x64-1_78.lib libboost_numpy38-vc142-mt-gd-x64-1_78.lib libboost_prg_exec_monitor-vc142-mt-gd-x64-1_78.lib libboost_program_options-vc142-mt-gd-x64-1_78.lib libboost_python38-vc142-mt-gd-x64-1_78.lib libboost_random-vc142-mt-gd-x64-1_78.lib libboost_regex-vc142-mt-gd-x64-1_78.lib libboost_serialization-vc142-mt-gd-x64-1_78.lib libboost_system-vc142-mt-gd-x64-1_78.
介绍Angular 工程化,构建对象,编译器 这篇文章从宏观的角度认识Angular 的工程(project),构建对象(build target),编译器(compiler)。包括如下内容
工程文件的主要构成 构建对象的配置 编译器的步骤与职责 Angular的工程(project) 一般而言,Angular的工作目录结构如下:
my-app |---- tsconfig.json angular.json package.json projects |----- project1 project2 src |----- xxxx 特指angular.json文件。下面看看这个工程文件的主要几个部分。先列出其中使用的github 链接。
工程文件Schema 也就是$schema字段指定的值。用来描述Angular 工作空间的多项目的结构。其实就是当前angular.json 的约束。 configSchema这个Schema就是控制当我们工程里面的组件的风格,样式的类型scss/css 等,同时也会控制ng new 自动产生的组件的风格。 简单样例如下。
{ $schema: ./node_modules/@angular/cli/lib/config/schema.json,//schema version: 1, // 你的程序的版本 newProjectRoot: projects, // 表示如果使用ng new 创建一个新的project,它的根目录在projects下面,可以任意指定 projects:{ project1:{}, // 第一个project project2:{} // 第二个project }, defaultProject:project1, // 默认是那个project schematics:{}, // configSchema, 链接如上,控制组件风格的。 cli:{analytics: false} // 这个可以忽略,例如这个选项就是决定是否跟Angular Team 分析你项目的使用分析。 } 我们再次深入看看某个project 的配置信息。 还是看下面的这个简单的例子,下面的配置是上面配置中project1的值。 先列出其中用到的一些链接
docker 如何处理网络访问 docker容器里项目访问项目 测试 docker run -d -P --name tomcat01 tomcat 拉一个tomcat7.0有net-tools docker run -d -P --name tomcat01 tomcat:7.0 docker exec -it tomcat01 ip addr linux可以ping通容器
每启动一个docker容器 docker就会给容器分配ip 只要安装docker 就会有网卡 docker为桥接模式,使用的技术是evh-pair技术
启动容器后,linux有了新网卡,两边网卡差不多相似
再次启动容器 docker run -d -P --name tomcat02 tomcat:7.0 evth-pair 容器带来的网卡都为一对 evth-pair 充当桥梁 连接虚拟网络设备 openstack docer ovs 都是evth-pair技术 tomcat01 能ping通 tomcat02 容器与容器间可以互相ping通 通过linux作为路由器,转发到tomcat02 docker使用linux的桥接 docker所有网络接口都是虚拟的 虚拟的转发效率高 容器删除后,对应网桥的一对直接无了
如果docker,ip发生变化怎么访问呢? 则使用服务名与docker绑定 --link
[root@docker ~]# docker exec -it tomcat02 ping tomcat01 无法ping通
(1)使用 load data 导入数据,首先要准备一个文件,本例是test.txt
mysql> load data local infile '/root/test.txt' ignore into table login character set utf8 fields terminated by ',' lines terminated by ';';
test.txt里有对应数据库表login的所有列,以下是这条命令的一些说明(详细解释传送文末参考链接)
ignore -> 代表已有该记录则跳过(比如插库的时候程序写了一条操作记录)
character set utf8 -> 为了解决中文字符问题(具体应该和数据库表设置的一致)
fields terminated by ',' -> 每条记录中以逗号分隔列
lines terminated by ';' -> 记录以分号分隔记录
# tail -3 test.txt11145,test1,登录,2019-06-03 14:53:30,FAIL,密码错误,188.188.188.188;11146,test1,登录,2019-06-03 14:53:30,FAIL,密码错误,188.188.188.188;11147,test1,登录,2019-06-03 14:53:30,FAIL,密码错误,188.188.188.188注意:最后一条记录结尾不能带分号,否则会多插入一条记录,仅有主键(该例是id自增)其它列值为NULL
但是这样处理,插入数据后,最后条记录的最后一列的边线会往前错位(不影响功能……但是强迫症看着很不舒服……)
解决:各种试,发现导入的文件最后一行结尾加个逗号(列分隔符)就好啦,如下
# tail -3 test.txt11145,test1,登录,2019-06-03 14:53:30,FAIL,密码错误,188.188.188.188;11146,test1,登录,2019-06-03 14:53:30,FAIL,密码错误,188.188.188.188;11147,test1,登录,2019-06-03 14:53:30,FAIL,密码错误,188.188.188.188,(2)生成导入的文件
因为不要求内容,只需要一定的数据量,写了以下shell脚本生成重复数据到需要导入的文件test.txt
#!/bin/bashMYSQL_PATH=/opt/mysqlUSERNAME=somenamePASSWORD=somepasswdDBNAME=somedb result=`${MYSQL_PATH}/bin/mysql -u${USERNAME} -p${PASSWORD} ${DBNAME} -eselect id from login order by id DESC limit 1;`#echo $result #eg: id 1122 pri_id=`echo ${result} | awk '{print $2}'`#echo $pri_id #看现在到哪个id了 eg: 1122 id=$(($pri_id+1))#echo $id #eg: 1123 rm -rf /root/test.
安装mysql
1、在命令行(LX终端)中输入如下命令进行安装过程
$cd /opt# 更新apt-get $sudo apt-get update
2、安装
sudo apt-get install mysql-server mysql-client libmysqlclient-dev 输入后 需要用户输入密码,
安装中出现Y/N选项,需要输入Y(大小写y都行),回车继续运行,界面如下:
继续安装将遇到如下界面,此时需要设置一个数据库密码(如:123456),后续在登录mysql时会需要使用(自己可以记住的密码)
再次确认密码(如:123456):
输入完成后,回车,安装继续,运行完成状态如下图所示:
3、安装完成,启动mysql服务
sudo service mysql start 4、查看mysql进程
ps -ef | grep mysql 若启动成功,则可以看到如下图所示的进程信息
5、配置mysql
安装成功后,使用用户密码登录并查看版本:
输入代码,提示需要输入数据库密码(刚安装过程中自己设置的密码,如123456)
mysql -uroot -p 创建用户,并设置用户密码
create user 'test'@'%' identified by '123456'; 注意结尾必须要以;符号结束,在操作mysql数据库时,看到;符号才算一条完整指令
注意:
如果忘记登录密码,可以查看/etc/mysql/debian.cnf文件,进行密码查看,然后修改
sudo vim /etc/mysql/debian.cnf 创建database数据库
create database t1 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 对自己创建的用户授权
xxxTemplate :springboot已经配置好的模板bean,拿来即用
(1)导入start
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> (2)配置数据库
spring: datasource: username: root password: 159263487qwe driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&useSSL=false 注意username不是name
(3)测试增删改查
@RestController public class JDBCController { @Autowired JdbcTemplate jdbcTemplate = new JdbcTemplate(); // 查 @GetMapping(/list) public List<Map<String,Object>> list(){ String sql = select * from test.user; List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql); return maps; } // 增 @GetMapping(/insert) public String add(){ String sql = insert into test.