技术之路,无限延展

代码是思维的轨迹,记录每一次灵感的闪现;代码是工具的语言,解决每一个复杂的问题;代码是探索的足迹,延展每一段未知的边界;技术源于实践,成长来自积累,创新始于思考。

JavaWeb前端

第一章 html以及css的用法 1.1 HTML语法 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>grammar</title> </head> <body> <!-- 1.标签的分类 HTML标签分为两类,一类叫有开始有结束的标签,另一类叫自结束标签。 --> <div></div><div></div><span></span><p></p><br> <!-- 2.标签不区分大小写 --> <div>i am div</div> <DIV>I AM DIV</DIV> <!-- 3.标签可以嵌套但不能交叉嵌套 --> <div>div<span>span</div></span> <!-- 4.标签必须正确关闭 --> <div>div</div> <!-- 5.属性必须有值,且属性值必须加引号 --> <div id="one">id=one</div> <!-- 6.注释不能嵌套 --> <!-- html注释 <!-- --> --> </body> </html> 1.2 常用标签 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>tag</title> </head> <body> <!--需求1:div、span、p标签的演示 div标签 默认独占一行 span标签 它的长度是封装数据的长度 p段落标签 默认会在段落的上方或下方各空出一行来(如果已有就不再空) --> 2. 文本标签:和文本有关的标签 * 注释:<!-- 注释内容 --> * <h1> to <h6>:标题标签 * h1~h6:字体大小逐渐递减 * <p>:段落标签 * <br>:换行标签 * <hr>:展示一条水平线 * 属性: * color:颜色 * width:宽度 * size:高度 * align:对其方式 * center:居中 * left:左对齐 * right:右对齐 * <b>:字体加粗 * <i>:字体斜体 * <font>:字体标签 * <center>:文本居中 * 属性: * color:颜色 * size:大小 * face:字体 <!-- 1.标题标签 语法:h1-h6,字体大小,粗细递减。 --> <h1>h1</h1> <h2>h2</h2> <h3>h3</h3> <h6>h6</h6> <h7>h7</h7><br><!-- br标签简单的换行符--> h8 <!-- 2.div标签 语法:<div></div> 作用:无实际意义,布局,可以让页面变好看 --> <div> <div>上</div> <div>中</div> <div>下</div> </div> <!-- 3.段落标签 语法:<p></p> --> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;段落1</p> <p>&emsp;&emsp;段落2</p> <p>段落3</p> <!-- 4.转义字符 语法: &开头,;结尾 常用: 空格:&nbsp; 普通空格 &emsp; 中文空格 大于号:&gt; 小于号:&lt; 版权号:&copy; --> 问:下列哪些选项是标题标签?<br> a:&lt;span&gt;&lt;/span&gt;<br> b:&lt;div&gt;&lt;/div&gt;<br> c:&lt;h1&gt;&lt;/h1&gt;<br> d:&lt;h7&gt;&lt;/h7&gt;<br> &copy; <!-- 5.列表 无序列表 语法:<ul> <li></li> </ul> ul li * type disc:实心圆 circle:空心圆 square:实心方 有序列表 语法: <ol> <li></li> </ol> --> <h1>无序列表</h1> <ul type="square"> <li>list1</li> <li>list2</li> <li>list3</li> </ul> <h1>有序列表</h1> <ol type="i"> <li>list1</li> <li>list2</li> <li>list3</li> <li>list1</li> <li>list2</li> <li>list3</li> <li>list1</li> <li>list2</li> <li>list3</li> <li>list1</li> <li>list2</li> <li>list3</li> </ol> </body> </html> 1.3 插入图片 <!--需求1:使用img标签显示一张美女的照片。并修改宽高,和边框属性 img标签是图片标签,用来显示图片 src属性可以设置图片的路径 width属性设置图片的宽度 height属性设置图片的高度 border属性设置图片边框大小 alt属性设置当指定路径找不到图片时,用来代替显示的文本内容 在JavaSE中路径也分为相对路径和绝对路径. 相对路径:从工程名开始算 绝对路径:盘符:/目录/文件名 在web中路径分为相对路径和绝对路径两种 相对路径: . 表示当前文件所在的目录 .. 表示当前文件所在的上一级目录 文件名 表示当前文件所在目录的文件,相当于 ./文件名 ./ 可以省略 绝对路径: 正确格式是: http://ip:port/工程名/资源路径 错误格式是: 盘符:/目录/文件名 --> <img src="1.jpg" width="200" height="260" border="1" alt="美女找不到"/> <img src="../../2.jpg" width="200" height="260" /> <img src="../imgs/3.jpg" width="200" height="260" /> <img src="../imgs/4.jpg" width="200" height="260" /> <img src="../imgs/5.jpg" width="200" height="260" /> <img src="../imgs/6.jpg" width="200" height="260" /> </body> </html> 1.4 超链接 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>hyperlink</title> </head> <body> <!-- 使用a标签制作超链接 href:链接路径 target: _self:以当前选项卡(页面)打开 _blank:以新的选项卡(页面)打开 --> <a href="pages/target.html" target="_blank">跳转到目标页面,目标页面有美女!</a> </body> </html> 1.5 表格 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>table</title> </head> <body> <!-- * 使用table制作表格 tr行 th表头 td单元格 * 语法 <table> <tr> <th>|<td> </tr> </table> * 跨行跨列 * 跨行:rowspan * 跨列:colspan cellspacing 设置单元格间距 <table align="center" border="1" width="300" height="300" cellspacing="0"> --> <table border="1"> <tr> <th>姓名</th> <th>阵营</th> <th>职业</th> <th>武器</th> </tr> <tr> <td>刘备</td> <td>蜀</td> <td>蜀汉集团董事长</td> <td>双股剑</td> </tr> <tr> <td>诸葛亮</td> <td>蜀</td> <td>蜀汉集团CEO</td> <td>羽扇</td> </tr> <tr> <td>关羽</td> <td>蜀</td> <td>荆襄总裁</td> <td>青龙偃月刀</td> </tr> <tr> <td>张飞</td> <td>蜀</td> <td>阆中销售经理</td> <td>丈八蛇矛</td> </tr> </table> </body> </html> 1.5.1 跨行跨列的用法 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>table_blank</title> </head> <body> <h1>三行三列</h1> <table border="1" width="500px" height="300px" align="center"> <tr align="center"> <td>11</td> <td>12</td> <td>13</td> </tr> <tr align="center"> <td colspan="2">2122</td> <!-- <td>22</td> --> <td rowspan="2">2333</td> </tr> <tr align="center"> <td>31</td> <td>32</td> <!-- <td>33</td> --> </tr> </table> </body> </html> 1.6 表单 <!--需求1:创建一个个人信息注册的表单界面。包含用户名,密码,确认密码。性别(单选),兴趣爱好(多选),国籍(下拉列表)。 隐藏域,自我评价(多行文本域)。重置,提交。--> <!-- form标签就是表单 input type=text 是文件输入框 value设置默认显示内容 input type=password 是密码输入框 value设置默认显示内容 input type=radio 是单选框 name属性可以对其进行分组 checked="checked"表示默认选中 input type=checkbox 是复选框 checked="checked"表示默认选中 input type=reset 是重置按钮 value属性修改按钮上的文本 input type=submit 是提交按钮 value属性修改按钮上的文本 input type=button 是按钮 value属性修改按钮上的文本 input type=file 是文件上传域 input type=hidden 是隐藏域 当我们要发送某些信息,而这些信息,不需要用户参与,就可以使用隐藏域(提交的时候同时发送给服务器) select 标签是下拉列表框 option 标签是下拉列表框中的选项 selected="selected"设置默认选中 textarea 表示多行文本输入框 (起始标签和结束标签中的内容是默认值) rows 属性设置可以显示几行的高度 cols 属性设置每行可以显示几个字符宽度 <!-- form标签是表单标签 action属性设置提交的服务器地址 method属性设置提交的方式GET(默认值)或POST 表单提交的时候,数据没有发送给服务器的三种情况: 1、表单项没有name属性值 2、单选、复选(下拉列表中的option标签)都需要添加value属性,以便发送给服务器 3、表单项不在提交的form标签中 GET请求的特点是: 1、浏览器地址栏中的地址是:action属性[+?+请求参数] 请求参数的格式是:name=value&name=value 2、不安全 3、它有数据长度的限制 POST请求的特点是: 1、浏览器地址栏中只有action属性值 2、相对于GET请求要安全 3、理论上没有数据长度的限制 --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>表单的显示</title> </head> <body> <form action="http://localhost:8080" method="post"> <input type="hidden" name="action" value="login" /> <h1 align="center">用户注册</h1> <table align="center"> <tr> <td> 用户名称:</td> <td> <input type="text" name="username" value="默认值"/> </td> </tr> <tr> <td> 用户密码:</td> <td><input type="password" name="password" value="abc"/></td> </tr> <tr> <td>性别:</td> <td> <input type="radio" name="sex" value="boy"/>男 <input type="radio" name="sex" checked="checked" value="girl" />女 </td> </tr> <tr> <td> 兴趣爱好:</td> <td> <input name="hobby" type="checkbox" checked="checked" value="java"/>Java <input name="hobby" type="checkbox" value="js"/>JavaScript <input name="hobby" type="checkbox" value="cpp"/>C++ </td> </tr> <tr> <td>国籍:</td> <td> <select name="country"> <option value="none">--请选择国籍--</option> <option value="cn" selected="selected">中国</option> <option value="usa">美国</option> <option value="jp">小日本</option> </select> </td> </tr> <tr> <td>自我评价:</td> <td><textarea name="desc" rows="10" cols="20">我才是默认值</textarea></td> </tr> <tr> <td><input type="reset" /></td> <td align="center"><input type="submit"/></td> </tr> </table> </form> </body> </html> 1.7 iframe的用法 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>8.iframe标签.html</title> </head> <body> 我是一个单独的完整的页面<br/><br/> <!--ifarme标签可以在页面上开辟一个小区域显示一个单独的页面 ifarme和a标签组合使用的步骤: 1 在iframe标签中使用name属性定义一个名称 2 在a标签的target属性上设置iframe的name的属性值 target(目标)指向iframe的name的属性值,实现在一个单独的页面上超链接切换不同的html --> <iframe src="3.标题标签.html" width="500" height="400" name="abc"></iframe> <br/> <ul> <li><a href="0-标签语法.html" target="abc">0-标签语法.html</a></li> <li><a href="1.font标签.html" target="abc">1.font标签.html</a></li> <li><a href="2.特殊字符.html" target="abc">2.特殊字符.html</a></li> </ul> </body> </html> 1.8 css的用法 第一种用法 这种方式的缺点? ...

71 分钟 · Insane庆

Java基础笔记

IDEA常用配置 第一步设置窗体及菜单的字体及字体大小 第二步设置鼠标滚轮修改字体大小 第三步 设置自动导包功能 第四步 设置显示行号和方法间的分隔符  如上图红圈所示, 可以 勾选 Show line numbers :显示行数。 我建议一般这个 要勾选上。  如上图红圈所示, 可以 勾选 Show method separators 显示方法 分隔 线 。这 种线有助于我们区分开方法,所以建议勾选上 。 第五步 忽略大小写的提醒 把第一个勾去掉 第六步设置取消单行显示tabs的操作 第七步修改代码中注释的字体颜色 第八步 设置项目文件编码 第九步 设置自动编译 IDEA创建模板 1 setting找到live Templates 2 通过File and Code Templates设置文件模板 IDEA中Debug调试的使用 Debug调试代码,首先需要两个元素:断电+Debug启动服务器 测试工具栏 变量窗口 方法调用栈窗口 ...

102 分钟 · Insane庆

Java总结一些技巧

java语句的技巧 1 取反的快捷方式 this.checked = !this.checked; 2 判断语句合并 $("#checkedAllBox").prop("checked",length === length1); if (this.checked){ $(":checkbox:not(#checkedAllBox)").prop("checked", true); } else { $(":checkbox:not(#checkedAllBox)").prop("checked", false); } 变为 $(":checkbox:not(#checkedAllBox)").prop("checked", this.checked); 3 空字符串的ascll码最小 在学习一门新的技术的时候,需要在网上先找一个例子,然后通过文档对照着进行学习 4 isAssignableForm 假设有两个类Class1和Class2。Class1.isAssignableFrom(Class2)表示: 类Class1和Class2是否相同。 Class1是否是Class2的父类或接口 调用者和参数都是java.lang.Class类型。 5 循环结束外层 public class TestLoop { @Test public void loop(){ xiaodidi: for (int i = 0; i < 100; i++) { for (int j = 0; j < 5; j++) { if (j == 3) { continue xiaodidi; } System.out.println(i+""+j); } } } } 6 随机带时间的id 使用mybatis-plus的idworker工具类 ...

6 分钟 · Insane庆

Java框架

Mybatis 1、框架概述 1.1 什么是框架 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。 简而言之,框架其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。 1.2 框架要解决的问题 框架要解决的最重要的一个问题是技术整合的问题,在J2EE的 框架中,有着各种各样的技术,不同的软件企业需要从J2EE中选择不同的技术,这就使得软件企业最终的应用依赖于这些技术,技术自身的复杂性和技术的风险性将会直接对应用造成冲击。而应用是软件企业的核心,是竞争力的关键所在,因此应该将应用自身的设计和具体的实现技术解耦。这样,软件企业的研发将集中在应用的设计上,而不是具体的技术实现,技术实现是应用的底层支撑,它不应该直接对应用产生影响。 框架一般处在低层应用平台(如J2EE)和高层业务逻辑之间的中间层。 1.3 软件开发分层的重要性 框架的重要性在于它实现了部分功能,并且能够很好的将低层应用平台和高层业务逻辑进行了缓和。为了实现软件工程中的“高内聚、低耦合”。把问题划分开来各个解决,易于控制,易于延展,易于分配资源。我们常见的MVC软件设计思想就是很好的分层思想。 1.4 分层开发下的常见框架 MyBatis spring MVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring框架提供了构建Web应用程序的全功能MVC模块,使用Spring可插入的MVC架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集合其他MVC开发框架,如Struts1(现在一般不用),Strutys2等 Spring框架 MyBatis框架的概述 ​ mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。 mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。 采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbc api底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作。 为了我们能够更好掌握框架运行的内部过程,并且有更好的体验,下面我们将从自定义Mybatis框架开始来学习框架。此时我们将会体验框架从无到有的过程体验,也能够很好的综合前面阶段所学的基础。 2、 JDBC编程的分析 2.1 jdbc程序的回顾 public class TestSelect { public static void main(String[] args) throws Exception{ // 1、注册驱动 Class.forName("com.mysql.jdbc.Driver"); // 2、连接数据库 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456"); // 3、执行sql String sql = "SELECT * FROM t_department"; Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(sql);//ResultSet看成InputStream while(rs.next()){//next()表示是否还有下一行 Object did = rs.getObject(1);//获取第n列的值 Object dname = rs.getObject(2); Object desc = rs.getObject(3); /* int did = rs.getInt("did");//也可以根据列名称,并且可以按照数据类型获取 String dname = rs.getString("dname"); String desc = rs.getString("description"); */ System.out.println(did +"\t" + dname + "\t"+ desc); } // 4、关闭 rs.close(); st.close(); conn.close(); } } 2.2 jdbc问题分析 1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。 ...

166 分钟 · Insane庆

Java遇到的错误总结以及java中的一些操作

遇到的错误总结 1.龟兔赛跑里的while语句缓存问题 package com.threadTest1; public class Test3 { public static void main(String[] args) { int a = 30; Sport a1 = new Sport("兔子", 100, 10000); Sport a2 = new Sport("乌龟", 1000, 1000); a1.start(); a2.start(); while (true) {//让主方法一直去判断,如果不写执行一次就结束了 //cpu频繁的在拿finish变量的值,判断,发现变量值没有变化,很短的时间里取了1000次10000次,做了一个优化,把变量值缓存起来了,放在了缓存里了,同步一次要很长时间 //所以出现与实际值不同的情况 //用volatile修饰符可以不缓存,直接去栈里面取 if (!a1.isFinish() || !a2.isFinish() ){ a1.interrupt(); a2.interrupt(); a1.stop(); a2.stop(); break; } } } } class Sport extends Thread { int xiao; int b; volatile boolean finish = true; boolean stop = true; public Sport(String name, int xiao, int b) { super(name); this.xiao = xiao; this.b = b; } @Override public void run() { int i; for (i = 1; i <= 30 && stop; i++) { try { Thread.currentThread().sleep(xiao); System.out.println(getName() + "走了" + i + "米"); } catch (InterruptedException e) { e.printStackTrace(); } if (i == 10 || i == 20) { try { System.out.println(getName() + "在休息"); Thread.currentThread().sleep(b); } catch (InterruptedException e) { e.printStackTrace(); } } } if (i > 30) { finish = false; System.out.println(getName()+"胜利"); } } public boolean isFinish() { return finish; } public void setStop(boolean stop) { this.stop = stop; } } web工程重命名后无法连上,出现404错误 总结:把iml文件相关错误的路径改回来,就可以正常使用了 ...

5 分钟 · Insane庆

Java高级

maven的用法 1、maven简介 官网: http://maven.apache.org/ http://mvnrepository.com/中寻找 1.1 完成一个java项目,需要做哪些工作 1.分析项目要做什么,知道项目有哪些组成部分。 2.设计项目,通过哪些步骤,使用哪些技术。需要多少人, 多长的时间。 3.组建团队,招人, 购置设备,服务器, 软件, 笔记本。 4.开发人员写代码。 开发人员需要测试自己写代码。 重复多次的工作。 5.测试人员,测试项目功能是否符合要求。 测试开发人员提交代码-如果测试有问题–需要开发人员修改–在提交代码给测试 –测试人员在测试代码-如果还有问题-在交给开发人员-开发人员在提交-在测试 直到-测试代码通过。 1.2 传统开发项目的问题,没有使用maven【meivn】管理的项目 1)很多模块,模块之间有关系, 手工管理关系,比较繁琐。 2)需要很多第三方功能, 需要很多jar文件,需要手工从网络中获取各个jar 3)需要管理jar的版本, 你需要的是mysql.5.1.5.jar 拿你不能给给一个mysql.4.0.jar 4)管理jar文件之间的依赖, 你的项目要使用a.jar 需要使用b.jar里面的类。 必须首先获取到b.jar才可以, 然后才能使用a.jar. a.jar需要b.jar这个关系叫做依赖, 或者你的项目中要使用mysql的驱动, 也可以叫做项目依赖mysql驱动。 a.class使用b.class, a依赖b类 1.3 需要改进项目的开发和管理,需要maven ​ 1)maven可以管理jar文件 ​ 2)自动下载jar和他的文档,源代码 ​ 3)管理jar直接的依赖, a.jar需要b.jar , maven会自动下载b.jar ​ 4)管理你需要的jar版本 ​ 5)帮你编译程序,把java编译为class ​ 6)帮你测试你的代码是否正确。 ​ 7)帮你打包文件,形成jar文件,或者war文件 ​ 8)帮你部署项目 2、 构建:项目的构建 构建是面向过程的,就是一些步骤,完成项目代码的编译,测试,运行,打包,部署等等,maven支持的构建包括有: 1.清理, 把之前项目编译的东西删除掉,我新的编译代码做准备。 2.编译, 把程序源代码编译为执行代码, java-class文件 批量的,maven可以同时把成千上百的文件编译为class。 javac 不一样,javac一次编译一个文件。 3.测试, maven可以执行测试程序代码,验证你的功能是否正确。 批量的,maven同时执行多个测试代码,同时测试很多功能。 4.报告, 生成测试结果的文件, 测试通过没有。 5.打包, 把你的项目中所有的class文件,配置文件等所有资源放到一个压缩文件中。 这个压缩文件就是项目的结果文件, 通常java程序,压缩文件是jar扩展名的。 对于web应用,压缩文件扩展名是.war 6.安装, 把5中生成的文件jar,war安装到本机仓库 7.部署, 把程序安装好可以执行。 ...

211 分钟 · Insane庆

Jwt

登录验证 用户登录验证 用户输入用户名和密码,发送给服务器。 服务器验证用户名和密码,正确的话就返回一个签名过的token(token 可以认为就是个长长的字符串),浏览器客户端拿到这个token。 后续每次请求中,浏览器会把token作为http header发送给服务器,服务器验证签名是否有效,如果有效那么认证就成功,可以返回客户端需要的数据。 一旦用户退出登录,只需要客户端销毁token即可,服务器端不需要任何操作。 优缺点: JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。 优点是在分布式系统中,很好地解决了单点登录问题,很容易解决了session共享的问题。jwt长度较小,且可以使用URL传输(URLsafe)。 验证token的过程其实跟重新生成一个token的过程是一样的 /** 生产 token */ public static String generateToken(Map<String, Object> claimMaps) { if (null != claimMaps) { claimMaps.forEach((key, val) -> { claimMaps.put(key, val.toString()); }); } return Jwts.builder() // JWT_ID,可用于每次签名唯一识别 .setId(UUID.randomUUID().toString()) // 数据压缩方式 .compressWith(CompressionCodecs.GZIP) // 签发者信息 .setIssuer(ISSUER) // 说明 .setSubject("system") //接收用户 .setAudience(AUDIENCE) // 签发时间 .setIssuedAt(new Date(System.currentTimeMillis())) // 过期时间戳 .setExpiration(new Date(System.currentTimeMillis() + EXPIRES_IN * 1000)) // claim信息,自定义载荷 .addClaims(claimMaps) // 签名算法以+密匙 .signWith(SIGNATURE_ALGORITHM, secretKey) .compact(); } 根据传递过来的header、payload以及服务端存储的密钥,重新生成一个token对比,如果token相同,那么标志token有效,没被修改。同时如果token没被修改,还可以进一步同bease64解密payload,然后根据payload中的exp有效期信息,判断token是否已经过期 ...

1 分钟 · Insane庆

K8s安装

1 kubeadm创建集群 1.1 安装kubeadm 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令 每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响你应用的运行内存) 2 CPU 核或更多 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以) 设置防火墙放行规则 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见这里了解更多详细信息。 设置不同hostname 开启机器上的某些端口。请参见这里 了解更多详细信息。 内网互信 禁用交换分区。为了保证 kubelet 正常工作,你 必须 禁用交换分区。 永久关闭 1.2 为所有机器执行下面操作 #各个机器设置自己的域名 hostnamectl set-hostname xxxx # 将 SELinux 设置为 permissive 模式(相当于将其禁用) sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config #关闭swap swapoff -a sed -ri 's/.*swap.*/#&/' /etc/fstab #允许 iptables 检查桥接流量 cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system 1.3 安装kubelet、kubeadm、kubectl cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg exclude=kubelet kubeadm kubectl EOF sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes sudo systemctl enable --now kubelet 1.4 下载各个机器需要的镜像 sudo tee ./images.sh <<-'EOF' #!/bin/bash images=( kube-apiserver:v1.20.9 kube-proxy:v1.20.9 kube-controller-manager:v1.20.9 kube-scheduler:v1.20.9 coredns:1.7.0 etcd:3.4.13-0 pause:3.2 ) for imageName in ${images[@]} ; do docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName done EOF chmod +x ./images.sh && ./images.sh 1.5 初始化主节点 #所有机器添加master域名映射,以下需要修改为自己的 echo "192.168.59.168 cluster-endpoint" >> /etc/hosts #主节点初始化 kubeadm init \ --apiserver-advertise-address=192.168.59.168 \ --control-plane-endpoint=cluster-endpoint \ --image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \ --kubernetes-version v1.20.9 \ --service-cidr=10.96.0.0/16 \ --pod-network-cidr=172.168.0.0/16 #所有网络范围不重叠 安装成功会显示 ...

18 分钟 · Insane庆

MybatisPlus

MyBatisPlus 0 快速开始 1.1 pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>spring-boot-starter-parent</artifactId> <groupId>org.springframework.boot</groupId> <version>2.3.4.RELEASE</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>mybatis-plusDemo</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> </dependencies> </project> 1.2 application.yml spring: datasource: url: jdbc:mysql://localhost:3306/mybatis-plus-demo username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver 1.3 userMapper的编写 package com.xiaodidi.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xiaodidi.demo.User; import org.apache.ibatis.annotations.Mapper; public interface UserMapper extends BaseMapper<User> { } 1.4 主程序 package com.xiaodidi; import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScans; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @MapperScan("com.xiaodidi.mapper") public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); } } 1.5 测试 package com.xiaodidi; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xiaodidi.demo.User; import com.xiaodidi.mapper.UserMapper; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import javax.annotation.Resource; import java.util.List; @RunWith(SpringRunner.class) @SpringBootTest public class TestDemo { @Resource UserMapper userMapper; @Test public void save() { List<User> users = userMapper.selectList(null); for (User user : users) { System.out.println(user); } } } 2.1 mybatis的主键(默认识别表中id字段为主键) 只要mybatis识别到主键,同时检测出来插入id为null,默认就自动使用了雪花算法,转换了然后在插入到数据库 ...

5 分钟 · Insane庆

Mycat

文章目录 第一章 入门概述 1.1 是什么 1.2 干什么 1.3 原理 第二章 安装启动 2.1 安装 2.2 启动 2.3 登录 第三章 搭建读写分离 3.1 搭建一主一从 3.2 搭建双主双从 第四章 垂直拆分——分库 4.1 如何划分表 4.2 实现分库 第五章 水平拆分——分表 5.1 实现分表 5.2 Mycat 的分片 “join” 5.3 常用分片规则 5.4 全局序列 第六章 基于 HA 机制的 Mycat 高可用 6.1 高可用方案 6.2 安装配置 HAProxy 6.3 配置 Keepalived 6.4 测试高可用 第七章 Mycat 安全设置 7.1 权限配置 7.2 SQL 拦截 第八章 Mycat 监控工具 8.1 Mycat-web 简介 8.2 Mycat-web 配置使用 8.3 Mycat 性能监控指标 第一章 入门概述 1.1 是什么 Mycat是数据库中间件 ...

14 分钟 · Insane庆