首页 文章 精选 留言 我的

精选列表

搜索[基础搭建],共10000篇文章
优秀的个人博客,低调大师

python 基础语法

1.查看python版本 python -V 以上命令执行结果如下: 2.标识符 第一个字符必须是字母表中字母或下划线_。 标识符的其他的部分由字母、数字和下划线组成。 标识符对大小写敏感。 3.python保留字 保留字即关键字,我们不能把它们用作任何标识符名称。Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字: >>> import keyword >>> keyword.kwlist['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] 4.注释 Python中单行注释以#开头,实例如下: # 第一个注释 print ("Hello, Python!") 多行注释可以用多个#号,还有'''和""": # 第一个注释 # 第二个注释 ''' 第三注释 第四注释 ''' """ 第五注释 第六注释 """ print ("Hello, Python!") 5.行与缩进 python最具特色的就是使用缩进来表示代码块,不需要使用大括号{}。 缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。 if True: print('True') else: print('False') 以下代码最后一行语句缩进数的空格数不一致,会导致运行错误: if True: print('C') print('C#') else: print('python') print('java') # 缩进不一致,会导致运行错误错误:IndentationError: unindent does not match any outer indentation level 补充:if else 后的参数可不写"()",单必须写":" 6.多行语句 Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠(\)来实现多行语句 total = "item_one \ item_two \ item_three" 在 [], {}, 或 () 中的多行语句,不需要使用反斜杠(\) total = ['one', 'two', 'three'] 7.等待用户输入 temp = input('\n请输入内容:') print(temp) \n在结果输出前会输出个新的空行 8.同一行显示多条语句 Python可以在同一行中使用多条语句,语句之间使用分号(;)分割 import sys; x = 'runoob'; sys.stdout.write(x + '\n') # 输出结果:runoob 9.Print 输出 print 默认输出是换行的,如果要实现不换行需要在变量末尾加上end="": string1 = "one" string2 = "two" # 换行输出 print(string1) print(string2) # 不换行输出 print(string1,end=" ") print(string2) 10.import 与 from...import 在 python 用import或者from...import来导入相应的模块。 将整个模块(turtle)导入,格式为:importturtle 从某个模块中导入某个函数,格式为:from turtle import done 从某个模块中导入多个函数,格式为:from turtle import done,deepcopy 将某个模块中的全部函数导入,格式为:from turtle import * import turtle from turtle import done from turtle import done,deepcopy from turtle import * 11.命令行参数 很多程序可以执行一些操作来查看一些基本信息,Python可以使用-h参数查看各参数帮助信息

优秀的个人博客,低调大师

JDBC---基础

概念 之前操作数据(客户端工具) 登录到服务器(mysql -u root -p root) 编写sql的语句 发送sql语句到数据库服务器执行 jdbc 使用java代码(程序)操作数据库(发送sql语句),的技术就是jdbc技术 使用jdbc执行sql的前提 登录数据库的服务器(连接数据库服务器) 1.数据库的IP地址 2.端口 3.数据库的用户名/密码 image.png image.png jdbc的接口在哪里: java.sql.* javax.sql.* 代码详情 package cn.persistXl.jdbc; import org.junit.jupiter.api.Test; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; /** * jdbc链接数据库 * @author persistXL * @data 2018/4/29 14:51 */ public class TestJdbc { //链接数据库的url private String url = "jdbc:mysql://localhost:3306"; private String user = "root"; private String password = "root"; /** * 包括两部分 jdbc协议:数据库子协议:主机:端口/需要链接的数据库 */ /** * * 第一种相连接数据库的方法 * @throws Exception */ @Test public void test() throws Exception { //创建驱动程序类对象 Driver driver = new com.mysql.jdbc.Driver(); //设置一个Properties Properties properties = new Properties(); properties.setProperty("user", user); properties.setProperty("password", password); //链接数据库,返回链接对象 Connection conn = driver.connect(url,properties); System.out.println(conn); } /** * 使用驱动管理器类链接数据库 * 第二种链接数据库的方法 */ @Test public void test1() throws SQLException { //注册驱动程序(可注册多个驱东程序) Driver driver = new com.mysql.jdbc.Driver(); DriverManager.registerDriver(driver); //链接到具体的数据库 Connection conn = DriverManager.getConnection(url, user, password); System.out.println(conn); } /** *最终的简洁版本 */ @Test public void test2() throws SQLException { /* Driver driver = new com.mysql.jdbc.Driver(); //注册驱动程序(可注册多个驱东程序) DriverManager.registerDriver(driver);*/ //通过字节码对象的方式加载静态代码块,从而注册驱动程序 try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } //链接到具体的数据库 Connection conn = DriverManager.getConnection(url, user, password); System.out.println(conn); } } 常用的方式 public class TestJdbc { //链接数据库的url private String url = "jdbc:mysql://localhost:3306"; private String user = "root"; private String password = "root"; /** * 包括两部分 jdbc协议:数据库子协议:主机:端口/需要链接的数据库 */ @Test public void test2() throws SQLException { /* Driver driver = new com.mysql.jdbc.Driver(); //注册驱动程序(可注册多个驱动程序) DriverManager.registerDriver(driver);*/ //通过字节码对象的方式加载静态代码块,从而注册驱动程序 try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } //链接到具体的数据库 Connection conn = DriverManager.getConnection(url, user, password); System.out.println(conn); } } JDBC接口的核心的API java.sql.* 和 javax.sql.* |---Driver 接口:表示java驱动程序接口,所有的具体的数据库厂商要来实现此接口 |-- connect(url,properties):连接数据库的方法 url : 连接数据库的URL URL语法:jsbc协议:数据库子协议://主机:端口/数据库 user:数据库的用户名 password:数据库用户密码 |--DriverManager 类:驱动管理器,用于管理所有的注册的驱动程序 |--registerDriver(driver):注册驱动类对象 |--Connection getConnection(url,user,password); 获取连接对象 |-- Connection接口:表示Java程序和数据库的连接对象 |--Statement createStatement();创建一个Statement对象 |--PreparedStatement preparedStatement(String sql);创建PreparedStatement对象 |- CallableStatement prepareCall(String sql) 创建CallableStatement对象 |- Statement接口: 用于执行静态的sql语句 |- int executeUpdate(String sql) : 执行静态的更新sql语句(DDL,DML) |- ResultSet executeQuery(String sql) :执行的静态的查询sql语句(DQL) |-PreparedStatement接口:用于执行预编译sql语句 |- int executeUpdate() : 执行预编译的更新sql语句(DDL,DML) |-ResultSet executeQuery() : 执行预编译的查询sql语句(DQL) |-CallableStatement接口:用于执行存储过程的sql语句(call xxx) |-ResultSet executeQuery() : 调用存储过程的方法 |- ResultSet接口:用于封装查询出来的数据 |- boolean next() : 将光标移动到下一行 |-getXX() : 获取列的值 使用Statement执行sql语句 执行DDL语句(创建表) package cn.persistXl.statement; import org.junit.Test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; /** * @author persistXL * @data 2018/4/29 16:57 */ public class StatementTest { private String url = "jdbc:mysql://localhost:3306/jdbc"; private String user = "root"; private String password = "root"; /** * * 执行DDL语句 */ @Test public void test(){ int count = 0; Connection conn = null; Statement stmt = null; try { //连接数据库,注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取连接对象 conn = DriverManager.getConnection(url, user, password); //创建statement对象 stmt = conn.createStatement(); //准备sql String sql = "CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20),gender VARCHAR(4))"; //发送sql语句并执行,得到返回的结果 count = stmt.executeUpdate(sql); //输出 System.out.println(count); } catch (Exception e) { e.printStackTrace(); } finally { //关闭连接(顺序:先打开都关闭) if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } } 执行DML语句(操作表内容) package cn.persistXl.statement; import org.junit.Test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; /** * @author persistXL * @data 2018/4/29 18:06 */ /** * 使用statement执行DML语句 */ public class DmlTest { /** * 增加 */ private String url = "jdbc:mysql://localhost:3306/jdbc"; private String name = "root"; private String password = "root"; @Test public void testInsert() throws SQLException{ Connection conn = null; Statement stmt = null; try { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取连接对象 conn = DriverManager.getConnection(url, name, password); //创建Statement对象 stmt = conn.createStatement(); //准备sql语句 String sql = "insert into student(name,gender) VALUES ('zhangsan','nan')"; //执行sql int count = stmt.executeUpdate(sql); System.out.println(count); } catch (Exception e) { e.printStackTrace(); }finally { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } } @Test public void testUpdate() throws SQLException{ Connection conn = null; Statement stmt = null; try { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取连接对象 conn = DriverManager.getConnection(url, name, password); //创建Statement对象 stmt = conn.createStatement(); //准备sql语句 String sql = "UPDATE student SET gender='nv' WHERE id='1'"; //执行sql int count = stmt.executeUpdate(sql); System.out.println(count); } catch (Exception e) { e.printStackTrace(); }finally { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } } } 创建公共的 db.properties 作用:当连接的数据库不是MySQL时在这里修改,当访问的数据库需要改变时在这里修改 url=jdbc:mysql://localhost:3306/day17 user=root password=root driverClass=com.mysql.jdbc.Driver 抽取公共类(JdbcUtil) package cn.persistXl.util; /** * @author persistXL * @data 2018/4/29 18:27 */ import java.io.FileInputStream; import java.io.InputStream; import java.sql.*; import java.util.Properties; /** * jdbc 的工具类 */ public class JdbcUtil { private static String url = null; private static String name = null; private static String password = null; private static String driverClass = null; /** * 静态代码块(只加载一次) */ static { try { //读取db.properties文件 Properties props = new Properties(); /** * . 代表java命令运行的目录 * 在java项目下,. java命令的运行目录从项目的根目录开始 * 在web项目下, . java命令的而运行目录从tomcat/bin目录开始 * 所以不能使用点. */ //FileInputStream in = new FileInputStream("./src/db.properties"); //若使用java项目时没有问题,若使用web项目时文件的路径就有问题 /** * 使用类路径的读取方式 * / : 斜杠表示classpath的根目录 * 在java项目下,classpath的根目录从bin目录开始 * 在web项目下,classpath的根目录从WEB-INF/classes目录开始 */ InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties"); //加载文件 props.load(in); //读取信息 url = props.getProperty("url"); name = props.getProperty("user"); password = props.getProperty("password"); driverClass = props.getProperty("driverClass"); //注册驱动程序 Class.forName(driverClass); } catch (Exception e) { e.printStackTrace(); System.out.println("驱动程序注册失败"); } } /** * 抽取获取连接对象的方法 */ public static Connection getConnection() { try { Connection conn = DriverManager.getConnection(url, name, password); return conn; } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * 释放资源的方法 */ public static void close(Connection conn, Statement stmt, ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void close(Connection conn, Statement stmt) { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } } 执行DQL语句(查询) package cn.persistXl.statement; /** * @author persistXL * @data 2018/4/29 19:50 */ import cn.persistXl.util.JdbcUtil; import org.junit.Test; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; /** * 使用statement执行DQL语句(查询语句) */ public class InsertTest { @Test public void inseret(){ Connection conn = null; Statement stmt = null; try { //获取连接 conn = JdbcUtil.getConnection(); //创建statement stmt = conn.createStatement(); //准备sql String sql = "SELECT * FROM student"; //执行sql ResultSet rs = stmt.executeQuery(sql); //移动光标 boolean flag = rs.next(); if (flag) { //取出列的值(根据索引值) /* int id = rs.getInt(1); String name = rs.getString(2); String gender = rs.getString(3); System.out.println(id+name+gender); */ //根据列的名称 /* int id = rs.getInt("id"); String name = rs.getString("gender"); String gender = rs.getString("name"); System.out.println(id+name+gender); */ //遍历结果 while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("gender"); String gender = rs.getString("name"); System.out.println(id+name+gender); } } } catch (Exception e) { e.printStackTrace(); } } } 使用PreparedStatement执行sql package cn.persistXl.PreparedStatement; import cn.persistXl.util.JdbcUtil; import org.junit.Test; import java.sql.*; /** * @author persistXL * @data 2018/4/29 20:26 */ /** * 使用PreparedStatement执行sql语句 */ public class PreparedStatementTest { /** * 增加 */ @Test public void InsertTest(){ Connection conn = null; PreparedStatement stmt = null; try { //获取连接 conn = JdbcUtil.getConnection(); //准备sql String sql = "insert into student (name,gender) values (?,?)"; //?表示一个参数占位符 //执行预编译sql语句(检查语法) stmt = conn.prepareStatement(sql); //设置参数值 stmt.setString(1,"李四"); stmt.setString(2,"男"); //发送参数,执行sql stmt.executeUpdate(); System.out.println(stmt); } catch (Exception e) { e.printStackTrace(); }finally { JdbcUtil.close(conn, stmt); } } /** * 修改 */ @Test public void UpdateTest(){ Connection conn = null; PreparedStatement stmt = null; try { //获取连接 conn = JdbcUtil.getConnection(); //准备sql String sql = "UPDATE student SET name=? WHERE id=?"; //?表示一个参数占位符 //执行预编译sql语句(检查语法) stmt = conn.prepareStatement(sql); //设置参数值 stmt.setString(1,"王五"); stmt.setInt(2,2); //发送参数,执行sql stmt.executeUpdate(); System.out.println(stmt); } catch (Exception e) { e.printStackTrace(); }finally { JdbcUtil.close(conn, stmt); } } /** * 删除 */ @Test public void DeleteTest(){ Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { //获取连接 conn = JdbcUtil.getConnection(); //准备sql String sql = "DELETE FROM student WHERE id=?"; //?表示一个参数占位符 } catch (Exception e) { e.printStackTrace(); }finally { JdbcUtil.close(conn, stmt, rs); } } /** * 查询 */ @Test public void SelectTest(){ Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { //获取连接 conn = JdbcUtil.getConnection(); //准备预编译sql String sql = "select * from student"; //预编译 stmt = conn.prepareStatement(sql); //执行sql rs = stmt.executeQuery(); boolean flag = rs.next(); System.out.println(flag); if (flag) { //便利rs while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); String gender = rs.getString("gender"); System.out.println(id + "," + name + "," + gender); } } } catch (Exception e) { e.printStackTrace(); }finally { JdbcUtil.close(conn, stmt, rs); } } } 两种方式的登录的比较 package cn.persistXl.PreparedStatement; /** * @author persistXL * @data 2018/4/29 21:38 */ import cn.persistXl.util.JdbcUtil; import org.junit.Test; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.Statement; import java.sql.ResultSet; /** * 模拟用户登录 */ public class Index { //模拟用户输入 private String name = "admin"; private String password = "admin"; /** * statement存在sql注入风险 */ /* @Test public void idnex(){ Connection conn = null; Statement stmt = null; ResultSet rs = null; try { //获取连接 conn = JdbcUtil.getConnection(); //创建statement stmt = conn.createStatement(); //准备sql String sql = "select * from user where name = '"+name+"' and password = '"+password+"'"; //执行sql rs = stmt.executeQuery(sql); if (rs.next()) { //登录成功 System.out.println("登录成功"); } else { //登录失败 System.out.println("登录失败"); } } catch (Exception e) { e.printStackTrace(); }finally { JdbcUtil.close(conn, stmt, rs); } }*/ @Test public void idnex(){ /** * PreparedStatement有效预防sql注入 * */ Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { //获取连接 conn = JdbcUtil.getConnection(); //准备sql String sql = "select * from user where name =? and password = ?"; //创建sql预编译 stmt = conn.prepareStatement(sql); //设置参数 stmt.setString(1, name); stmt.setString(2, password); //执行sql rs = stmt.executeQuery(); if (rs.next()) { //登录成功 System.out.println("登录成功"); } else { //登录失败 System.out.println("登录失败"); } } catch (Exception e) { e.printStackTrace(); }finally { JdbcUtil.close(conn, stmt, rs); } } } //statement登录时存在sql被注入的风险,PrepareStatement则不存在 PreparedStatement vs Statment 1)语法不同:PreparedStatement可以使用预编译的sql,而Statment只能使用静态的sql 2)效率不同: PreparedStatement可以使用sql缓存区,效率比Statment高 3)安全性不同: PreparedStatement可以有效防止sql注入,而Statment不能防止sql注入。 推荐使用PreparedStatement CallableStatement执行存储过程 /** * 使用CablleStatement调用存储过程 * @author APPle * */ public class Demo1 { /** * 调用带有输入参数的存储过程 * CALL pro_findById(4); */ @Test public void test1(){ Connection conn = null; CallableStatement stmt = null; ResultSet rs = null; try { //获取连接 conn = JdbcUtil.getConnection(); //准备sql String sql = "CALL pro_findById(?)"; //可以执行预编译的sql //预编译 stmt = conn.prepareCall(sql); //设置输入参数 stmt.setInt(1, 6); //发送参数 rs = stmt.executeQuery(); //注意: 所有调用存储过程的sql语句都是使用executeQuery方法执行!!! //遍历结果 while(rs.next()){ int id = rs.getInt("id"); String name = rs.getString("name"); String gender = rs.getString("gender"); System.out.println(id+","+name+","+gender); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } finally { JdbcUtil.close(conn, stmt ,rs); } } /** * 执行带有输出参数的存储过程 * CALL pro_findById2(5,@NAME); */ @Test public void test2(){ Connection conn = null; CallableStatement stmt = null; ResultSet rs = null; try { //获取连接 conn = JdbcUtil.getConnection(); //准备sql String sql = "CALL pro_findById2(?,?)"; //第一个?是输入参数,第二个?是输出参数 //预编译 stmt = conn.prepareCall(sql); //设置输入参数 stmt.setInt(1, 6); //设置输出参数(注册输出参数) /** * 参数一: 参数位置 * 参数二: 存储过程中的输出参数的jdbc类型 VARCHAR(20) */ stmt.registerOutParameter(2, java.sql.Types.VARCHAR); //发送参数,执行 stmt.executeQuery(); //结果不是返回到结果集中,而是返回到输出参数中 //得到输出参数的值 /** * 索引值: 预编译sql中的输出参数的位置 */ String result = stmt.getString(2); //getXX方法专门用于获取存储过程中的输出参数 System.out.println(result); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } finally { JdbcUtil.close(conn, stmt ,rs); } } } 总结 JDBC的五部曲 //获取连接 Connection conn = JdbcUtil.getConnection(); //准备sql String sql = ""; //创建PreparedStatement PreparedStatement pstmt = conn.prepareStatement(sql); //设置参数值 stmt.setString(1,""); //发送参数,执行sql stmt.executeUpdate(); //关闭连接(finally内关闭) JdbcUtil.close(conn, stmt); || JdbcUtil.close(conn, stmt, rs);

优秀的个人博客,低调大师

Android基础混淆

#---------------------------------实体类--------------------------------- -keep class com.yuyigufen.hymanager.beans.**{*;} # 自定义数据模型的bean目录 #---------------------------------基本指令区---------------------------------- -optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -dontpreverify -verbose -printmapping proguardMapping.txt -optimizations !code/simplification/cast,!field/*,!class/merging/* -keepattributes *Annotation*,InnerClasses -keepattributes Signature -keepattributes SourceFile,LineNumberTable #---------------------------------------------------------------------------- #---------------------------------默认保留区--------------------------------- -keep public class * extends android.app.Activity -keep public class * extends android.app.Application -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider -keep public class * extends android.app.backup.BackupAgentHelper -keep public class * extends android.preference.Preference -keep public class * extends android.view.View -keep public class com.android.vending.licensing.ILicensingService -keep class android.support.** {*;} -keepclasseswithmembernames class * { native <methods>; } -keepclassmembers class * extends android.app.Activity{ public void *(android.view.View); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep public class * extends android.view.View{ *** get*(); void set*(***); public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); } -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } -keep class **.R$* { *; } -keepclassmembers class * { void *(**On*Event); } #---------------------------------------------------------------------------- #---------------------------------webview------------------------------------ -keepclassmembers class fqcn.of.javascript.interface.for.Webview { public *; } -keepclassmembers class * extends android.webkit.WebViewClient { public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap); public boolean *(android.webkit.WebView, java.lang.String); } -keepclassmembers class * extends android.webkit.WebViewClient { public void *(android.webkit.WebView, jav.lang.String); }

优秀的个人博客,低调大师

基础知识

1. # 这是单行注释 2. """ 这是多行注释 """ IPO input process output python提供了两套索引体系 第一种叫正向递增序号,从0开始,0是第一个元素 arr[0:10] 第二种叫反向递减序号,从-1开始,-1是倒数第一个元素,逐渐反向递减 arr[-5:-1] input()函数,从控制台读取一行,可带参数input("请输入:") 定义一个变量接收返回值 temp = input() print()函数,输出 eval() 评估函数 去掉参数最外侧引号并执行余下的函数 8. if TempStr[-1] in ['F', 'f']: C = (eval(TempStr[0:-1]) - 32) / 1.8 print("转换后的温度是{:.2f}C".format(C)) # {:.2f}是一个占位符, :.2f表示将结果保留两位小数 elif TempStr[-1] in ['C', 'c']: F = 1.8 * eval(TempStr[0:-1]) + 32 print("转换后的温度是{:.2f}F".format(F)) else: print("输入的格式错误") type(eval(N)) == int 判断是不是某种类型 arr[-1]表示取最后一个元素,arr[0,-1] 截取第一个到倒数第二个子串,不包含最后一个 arr[0,arr.len()]

优秀的个人博客,低调大师

Java基础温习

本文是按照Thinking in Java的章节温习的。仅记录有注释的章节。 第一章 对象入门 Introduction to Objects 1. 面向对象的三个基本特征 2. [转]关于Java中各种修饰符与访问修饰符的说明 Java的类有个默认类型,只能被同一package的其他类访问。 第二章 一切皆对象 Everything is an Object 1. 栈和堆的区分 栈,因为本身是FILO - first in, last out. 先进后出,能够自动释放,不需要垃圾回收。而堆是内存池,保存数据比栈灵活,需要用new命令创建对象,所以垃圾回收GC是针对堆Heap。 同时因为栈的特性,所以方法/函数的变量,引用是存放在栈里,当退出作用域后则自动清理这些变量!而且栈的读取速度比堆所在的内存要快,因为堆需要定位数据,而栈不需要,所以Java代码优化--尽可能地使用stack(栈)变量,实际上就是尽量使用局部变量,把成员变量引用传递到函数方法里面的变量! 参考 [Java]Stack栈和Heap堆的区别(终结篇)。 2. 成员变量的默认值和局部变量的初始化 Java和C++的其中不同之处:在Java里面,类里面的成员变量是有默认值的: 变量类型 默认值 Boolean false Char '\u0000'(null) 显示为空白 byte (byte)0 short (short)0 int 0 long 0L float 0.0f double 0.0d 而对象引用则默认值为null。 但 函数方法里面的变量是不会分配默认值的,这点和C++是一致的。可以参考一下程序: publicclassDemo{ inti; charc; Strings; publicvoidprint(){ //Error:可能损失精度 //找到:double //需要:float //floatf=1.1; floatf=1.1f; intnum; Stringss; //Error:可能尚未初始化变量num //System.out.println(num); System.out.println(i); System.out.println(c); //Error:可能尚未初始化变量ss //if(ss==null) if(s==null) System.out.println("null"); } publicstaticvoidmain(String[]args){ newDemo().print(); } } 输出结果为 0 空白 null ***所以函数方法里面的变量一定要初始化。 3. float 类型的赋值 从上一个程序可以看到,当需要给float类型的变量赋值,需要加上后缀 f来表示。 4. 参数的传递 要小心把对象传递给方法的形参时,所传递的是引用,就是说在方法能够修改原来对象里面的数据。而为了避免这个问题,则对形参加上final修饰词,使得这个形参在方法里不能修改所引用的对象的数据。 第三章 控制程序流程 Controlling Program Flow 1. Java5的for/in循环使用 2. return语句在try-catch-finally中的执行顺序 第四章 初始化和清除 Initialization & Cleanup~第八章 接口和内部类 1. 关键字this, super this 表示当前类的对象。super表示当前子类的父类对象。Java里在子类中用super 调用父类构造函数时,调用函数必须放在 子类构造函数的第一条语句的位置,否则编译错误。 2.Java关键字static、final使用小结 3. Java类和对象的初始化顺序 4. [Java]重载,重写以及继承,多态的区别 5.Java抽象类和接口的学习 6. Java内部类的使用小结 7. 什么是多态?为什么用多态?有什么好处? 本文转自 Icansoft 51CTO博客,原文链接:http://blog.51cto.com/android/385292

优秀的个人博客,低调大师

Python基础(草稿)

#python ex1.py ## # -- coding:utf-8 -- print “Hello World!” print 6+2 print "aa","bb" print "%s %d %i "%(aa,bb,cc) print "%d"%10 print x print y $r False True string+string print aa,bb 逗号即空格 print "."*10 formater="%r %r %r %r" print formater%(1,2,3,4) %r everything \n 换行 """ xx yy xx yy """ #三个引号代表多行 获取用户输入 raw_input() raw_input("how old are you") pydoc raw_input 传参数 from sys import argv script,first,second,third=argv #脚本名字,变量1,2,3 a=open(filename) a.read() from sys import argv script,filename=argv file=open(filename) file.read() file.readline() file.truncate() file.seek(0) file.write("sss") file.close() from sys import argv from os.path import exists script,ffile,tfile=argv input=open(ffile) indata=input.read() len(indata) ##len exists(tfile) ##exists output.write(indata) output.close() input.close() def funt(a1,a2) print "%r %r"%(a1,a2) return 1 funt(1,2) string.split(' ') string.pop(0) if xx: print xx if xx: elif xx: else: xx the_count=[1,2,3,4,5] for nu in the_count: print nu for i in range(1,5) num=[] num.append(i) a=num[1] 字典 del from random import randint randint(0,5) class Employee(Person): def __init__(self,a,b): #######pip distribute nose virtualenv try: except : string.upper() string.lower() string.title() 首字母大写 string.strip() string.rstrip() string.lstrip() str(23) sss=[] sss.append() sss.insert(0,'aa') del sss[0] sss.pop() delete the last sss.pop(0) sss.remove('aa') sss.sort() sss.sort(reverse=True) 永久性排序 sorted(sss) 临时排序 sss.reverse() sss[-1] 最后一个元素 for a in sss: print(a) #缩进即关系 for a in range(1,7): print(a) sss=list(range(1,8)) sss=list(range(2,11,2)) min(sss) max(sss) sum(sss) sss[0:3] sss[0:] aaa=sss[:] sss=(111,2222) #不可更改 for i in range(1,5): if i<=3: print(i) else: print(i) aaa={1:333,2:3333} aaa[1] del for key,value in aaa.items(): for a in aaa.keys(): sorted(aaa.keys()) aaa.values() set(aaa.values()) 不重复的值 raw_input() int() 转成数字 break continue def gree() print def gree(arg1='aaa') print while aaa: print def gree(*arg) print from modulename import fun1,fun2,fun3 import pp as p p.fun2() from modulename import * ################################################################# class Dog(object): def __init__(self,name,age) def sit(self) class Dog(Cat): def __init__(self): super(Dog,self).__init__() from Dog import Dog from Dog import Dog,Cat import Dog as hh hh.cc() from Dog import * ###################################################################### with open('a.txt') as fi: fi.read() print readline() with open('a.txt','w') as fi: fi.write('aa\n') with open('a.txt','a') as fi: fi.write('aa') try: xx except xx: pass import json json.dump() json.load() #################################################################### aa.append aa.insert for a in aa: print(a) aa[0][1][3] isinstance(aa,list) ## for each_item in movies: if isinstance(each_item,list): for ne in each_item: print(ne) else: print(each_item) ## list() range enumerate int id next() ####### pypi ##### thefile=open('xx.txt') thefile.close() import os os.getcwd() os.chdir('') os.getcwd() data=open() data.seek(0) data.close() (a,b)=string.split(':') print(a) print(b) string.find(':') if string.find(':')==-1 xx try: except: pass file.open file.readline file.close file.find string.strip string.lstrip string.rstrip out=open('xx.txt','w') print("xxx",file=out) out.close() try: except: finally: try: with open('xx.txt','w') as data: print('sss',file=data) except: print('error') with 帮助关闭文件 sys.stdout sys.stdint ##################### ###二进制读写文件 import pickle with open('xx.pickle','wb') as aa: pickle.dump('xxx',aa) with open('xx.pickle','rb') as bb: ali=pickle.load(bb) locals() 返回当前作用域的变量集合 ################## data.sort() sorted(data) secs=[m*60 for m in mins] sanitize(t) 转时间格式 set() aa[0:3] class Aa(object): def __init__(self): class Nextlist(list): dict() 空字典 #######################################

优秀的个人博客,低调大师

Android基础概念

最近为了应付老外的Android作业,所以不得不开始学习一下Android。在这里不得不吐槽一下学校,悄悄的将我们选的嵌入式换成Android,而不通知我们。 先简单的介绍一下Android中UI组件的一些通用属性吧: android:id 是指定控件的位置标识,在java程序中可以通过findViewById(“id”)来获取指定的android界面组件。 android:layout_width和android:layout_height用来指定界面组件的宽度和高度,如果这个属性值设置为fill_parent的话,也就是说明这个组件和其父组件具有相同的宽度,如果属性值设置为warp_content的话,说明这个组件的宽度或者高度刚刚能包裹他的内容。 android之所以采用XML文件来定义用户界面,我觉的就是为了解耦。使得java程序专门负责业务逻辑实现。 使用Eclipse开发Android应用比较简单,一般只需要做大体两件事情:使用main.xml定义用户界面,然后使用java编写业务逻辑实现。 下面大致说说几个主要目录的作用,如图: AndroidManifest.xml文件是Android项目的系统清单文件,用来控制android应用的名称,图标,访问权限等的整体属性。 src目录是一个普通的用来保存java源文件的目录 res目录用来存放各种资源文件 比如layout存放布局文件values目录下存放各种XML格式的资源文件,例如字符串文件strings.XML。drawable-mdpi,drawable-ldpi,drawable-hdpi这3个目录是分别用来存放中,小,大三种图片文件。 下面来建立一个基本的例子来看看,首先使用eclipse建立一个android项目,然后修改main.xml文件内容如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/show" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="" /> <!-- 设置按钮的文本为“单击我” --> <Button android:id="@+id/ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="单击我" /> </LinearLayout> 然后设置HelloWorldActivity.java文件内容如下: package hello.com; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.LinearLayout; public class HelloWorldActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置使用main.xml文件定义的界面布局 setContentView(R.layout.main); //获取UI界面中id为ok的按钮 Button button=(Button)findViewById(R.id.ok); //为按钮绑定一个时间监听器 button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //或许UI界面中id为show的文本框 final TextView show=(TextView)findViewById(R.id.show); //改变文本框的内容 show.setText("Hello Android "+new java.util.Date()); } }); } } 好了,然后运行,结果如下图: ============================================================================== 本文转自被遗忘的博客园博客,原文链接:http://www.cnblogs.com/rollenholt/archive/2012/05/16/2504667.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

docker compose 基础

yum install docker -y systemctl start docker systemctl enable docker docker 加速 vim /etc/docker/daemon.json { "registry-mirrors": [ "http://1206f14f.m.daocloud.io" ], "insecure-registries": [] } docker compose 安装 sudo yum install epel-release -y sudo yum install -y python-pip -y pip install --upgrade pip pip install docker-compose yum upgrade python* docker-compose --version 通过docker compose 来安装wordpress vim docker-compose.yml ////////////////////////////////////////////////// version: '2' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: wordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_PASSWORD: wordpress volumes: db_data: ///////////////////////////////////////////////////////////// 5.开始运行wordpress docker-compose up -d -d代表在后台执行。 6.打开浏览器,输入(ip address):8000,按提示初始化wordpress。 相关命令 docker-compose up -d docker-compose stop docker-compose ps docker-compose run servicename cmd //对容器执行命令(一次) docker-compose run servicename env //查看web容器环境变量 本文转自 zbill 51CTO博客,原文链接:http://blog.51cto.com/dek701/1965645,如需转载请自行联系原作者

优秀的个人博客,低调大师

docker基础用法

1、安装 vim /etc/yum.repos.d/CentOS-Base.repo [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg yum install -y docker-engine chkconfig docker on 2、镜像 查看镜像库镜像 docker search centos 从镜像库下载镜像 docker pull centos docker pull nginx [root@docker data]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest db079554b4d2 31 hours ago 182 MB centos latest 67591570dd29 2 months ago 192 MB 删除镜像 [root@docker grafana]# docker rmi db079554b4d2 如果镜像删除不掉,请查看镜像是否已生成容器 查看镜像详细信息 [root@docker ~]# docker inspect nginx 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [ { "Id":"sha256:db079554b4d2f7c65c4df3adae88cb72d051c8c3b8613eb44e86f60c945b1ca7", "RepoTags":[ "nginx:latest" ], "RepoDigests":[ "nginx@sha256:4296639ebdf92f035abf95fee1330449e65990223c899838283c9844b1aaac4c" ], "Parent":"", "Comment":"", "Created":"2017-02-16T00:54:56.752000751Z", "Container":"30e0e527a56283658abfc1c1bff8650f9c924b70749d2e4c14930af78485ed02", "ContainerConfig":{ "Hostname":"33842653d6db", "Domainname":"", "User":"", 3、根据镜像创建容器 docker container旨在提供一个共享kernel的 OS 级虚拟化方法,在执行时不用重复加载Kernel, 且container的kernel与host共享,因此可以大大加快container的 启动过程,并显著减少内存消耗,容器在提供隔离的同时,还通过共享这些资源节省开销,这意味着容器比真正的虚拟化的开销要小得多。 Docker container运行时所构造的运行环境,实际上是由具有依赖关系的多个Layer组成的。nginx容器需要依赖centos镜像的kernel才能运行。 启动nginx容器 注释:docker run 命令 -d 后台运行 -p 端口映射,容器端口映射到服务器端口(-p 服务器端口:容器端口)。 -v 挂载目录 --restart=waways 随着docker服务启动一起启动容器 [root@docker grafana]# docker run --name=nginx -d -p 80:80 -p 443:443 -v /tmp/logs:/var/log/nginx/ --restart=always nginx 1caa1c76f4a0cc19979c6fa1c7cb2c1b29d5039d9578b2747675e39eafc9015b [root@docker grafana]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1caa1c76f4a0 nginx "nginx -g 'daemon ..." 10 minutes ago Up 10 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp nginx 4、容器 查看容器 [root@docker grafana]# docker exec -it nginx /bin/bash root@1caa1c76f4a0:/# ls bin boot devetc home liblib64 media mnt optproc root run sbin srv sys tmp usr var 重启/停止/启动容器(restart/stop/start) [root@docker grafana]# docker restart 1caa1c76f4a0 删除容器(自能删除非运行状态的容器) [root@docker grafana]# docker rm 1caa1c76f4a0 更新容器 使用docker exec可以进入容器查修改容器的相关配置,但是容器一旦重启启动就会还原。如果想要修改永久生效有两种方式。 1、修改dockerfile后重新生成镜像,然后由镜像生成新容器(旧容器和镜像可以删除) 2、使用docker commit命令更新镜像 1 2 3 4 5 6 7 8 9 [root@docker~] #dockercommit376c169391b7python sha256:389a76ab6473e78cc4777bfa280eed80f1c0240f8af257992b42d28174498a9c [root@docker~] #dockerimages REPOSITORYTAGIMAGEIDCREATEDSIZE pythonlatest389a76ab647313secondsago350MB grafana4.0.4latest69e6c963b0f82weeksago465MB grafanalatest12bfbc0626592weeksago464MB nginxlatestdb079554b4d23weeksago182MB centoslatest67591570dd292monthsago192MB docker commit可以直接更新原来的镜像,也可以生产新的镜像。(建议后者) 5、自定义镜像 FROM 基于那个镜像 RUN 安装软件或执行命令使用 MAINTAINER 镜像创建者 CMD Container启动时执行的命令,但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD.CMD主要用于container时启动指定的服务,当Docker run command的命令匹配到CMD command时,会替换CMD执行的命令。 备注:Docker容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务。但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直接启动这个脚本,另外就是安装进程管理工具。CMD结合supervisor一起使用,实现多服务同时启动。 USER 使用哪个用户跑container EXPOSE container内部服务开启的端口。主机上要用还得在启动container时,做host-container的端口映射。例如上面:docker run --name=nginx -d -p 80:80 -p 443:443 -v /tmp/logs:/var/log/nginx/ --restart=always nginx ENV 设置环境变量 COPY 拷贝本地数据到容器中,经常用于配置文件拷贝 VOLUME VOLUME指令用来设置一个挂载点,可以用来让其他容器挂载以实现数据共享或对容器数据的备份、恢复或迁移。 参考:https://hujb2000.gitbooks.io/docker-flow-evolution/content/cn/basis/dockerfiledetail.html 下面是一个实现python界面接口访问的服务实例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 FROMcentos MAINTAINER test 123456789@qq.com #设置本地时区并安装需要的插件和supervisor RUN rm -rf /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&yum-y install wgetpython-setuptools&&easy_installpip&&pip install supervisor #安装redis等安装包 RUNpip install redis&&yum install -yMySQL-python RUNyum-y install httpd #拷贝配置好的配置文件到容器中 COPYhttpd.conf /etc/httpd/conf/httpd .conf COPY*.py /var/www/cgi-bin/ RUN chmod +x /var/www/cgi-bin/ *.py #supervisord.conf设置启动的命令,随着容器一起启动 COPYsupervisord.conf /etc/supervisord .conf CMD[ "/usr/bin/supervisord" ] #container内部服务开启的端口 EXPOSE80 vim supervisord.conf 1 2 3 4 [supervisord] nodaemon= true [program:httpd] command =httpd-kstart 创建镜像 docker build -t python . 镜像保存 docker save -o centos.tar centos 1 2 [root@docker~] #ls centos. tar 还原镜像 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@docker~] #dockerrmicentos Untagged:centos:latest Untagged:centos@sha256:c577af3197aacedf79c5a204cd7f493c8e07ffbce7f88f7600bf19c688c38799 [root@docker~] #dockerimages REPOSITORYTAGIMAGEIDCREATEDSIZE pythonlatest389a76ab647316minutesago350MB grafana4.0.4latest69e6c963b0f82weeksago465MB grafanalatest12bfbc0626592weeksago464MB [root@docker~] #dockerload-icentos.tar Loadedimage:centos:latest [root@docker~] #dockerimages REPOSITORYTAGIMAGEIDCREATEDSIZE pythonlatest389a76ab647316minutesago350MB grafana4.0.4latest69e6c963b0f82weeksago465MB grafanalatest12bfbc0626592weeksago464MB centoslatest67591570dd292monthsago192MB 本文转自 irow10 51CTO博客,原文链接:http://blog.51cto.com/irow10/1898922,如需转载请自行联系原作者

优秀的个人博客,低调大师

ansible基础使用

ansible的安装 Ansible —基于 Python paramiko开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2模板语言,更强的远程命令执行操作。 类似的自动化运维工具有很多常用的还有: Puppet: —基于 Ruby 开发,采用 C/S架构,扩展性强,基于SSL,远程命令执行相对较弱. SaltStack: —基于 Python 开发,采用 C/S 架构,相对 puppet 更轻量级,配置语法使用 YMAL,使得配置脚本更简单。 Ansible 工作机制 Ansible 在管理节点将 Ansible 模块通过 SSH 协议(或者 Kerberos、LDAP)推送到被管理端执行,执行完之后自动删除,可以使用 SVN 等来管理自定义模块及编排。 由上面的图可以看到 Ansible 的核心组件组成由 5 个部分组成: Ansible core: 核心; core Modules: 包括 Ansible 自带的核心模块及自定义模块; connect Plugins: 完成模块功能的补充,包括连接插件、邮件插件等; Playbooks: 定义 Ansible 多任务配置文件,由 Ansible 自动执行; host Inventory: 定义 Ansible 管理主机的清单、主机池、主机列表; yum安装ansible yum install ansible (ansible依赖于Python 2.6或更高的版本、paramiko、PyYAML及Jinja2。) 三台主机: 192.168.38.3 192.168.38.4 192.168.38.5 (安装ansible) 使用ssh-keygen生成ssh秘钥,通过ssh-copy-id -i root@192.168.38.3 将秘钥传送到另外两台被管理的主机,测试登录被管理主机。 ansible的参数: -u 远程执行命令的user,默认为root。 -i 指定主机清单,默认为/etc/ansible/hosts。 -m 指定模块的名称,默认command命令模块。 -a 模块的具体参数。 -k 提示输入远程主机的密码。 vim /etc/ansible/hosts 主机清单配置文件。 [test] test组有2台机器。 192.168.38.4 192.168.38.3 也可以用":"来定义一系列连续的主机,下面那样写也是ok的。 [test] 192.168.38.[3:4] [root@192 ansible]# ansible -m ping 'test' ping模块测试,返回pong,代表ok。 192.168.38.3 | SUCCESS => { "changed": false, "ping": "pong" } 192.168.38.4 | SUCCESS => { "changed": false, "ping": "pong" } [root@192 ansible]# ansible -m command -a 'uptime' 'test' -m命令模块,具体执行uptime命令。 192.168.38.4 | SUCCESS | rc=0 >> 19:23:51 up 1:02, 2 users, load average: 0.00, 0.01, 0.05 192.168.38.3 | SUCCESS | rc=0 >> 19:23:51 up 1:02, 2 users, load average: 0.00, 0.02, 0.05 [root@192 ansible]# ansible -u root -m command -a date 'test'-u 指定用户。 192.168.38.3 | SUCCESS | rc=0 >> 2016年 11月 05日 星期六 19:24:45 CST 192.168.38.4 | SUCCESS | rc=0 >> 2016年 11月 05日 星期六 19:24:45 CS ansible组的划分定义,2台主机分别属于2个组,但同时又属于一个大组。 cat /etc/ansible/hosts test1和test2同属于test组。 [test:children] test1 test2 [test1] 192.168.38.3 [test2] 192.168.38.4 [root@192 ansible]# ansible -a date 'test' 192.168.38.3 | SUCCESS | rc=0 >> 2016年 11月 05日 星期六 19:44:25 CST 192.168.38.4 | SUCCESS | rc=0 >> 2016年 11月 05日 星期六 19:44:25 CST [root@192 ansible]# ansible -a date 'test1' 192.168.38.3 | SUCCESS | rc=0 >> 2016年 11月 05日 星期六 19:44:31 CST [root@192 ansible]# ansible -a date 'test2' 192.168.38.4 | SUCCESS | rc=0 >> 2016年 11月 05日 星期六 19:44:34 CST 本文转自青衫解衣 51CTO博客,原文链接:http://blog.51cto.com/215687833/1869847

优秀的个人博客,低调大师

安全基础-E

1、安全策略是一种正式申明,定义了安全如何在一个特定的组织中实施。 2、安全策略的每个部分通常都包含了几个标准组成:策略申明、标准、指导方针、规程。 3、常见安全策略类型:可接受的使用策略(AUP)、隐私策略、审计策略、外联网策略、密码策略、无线标准策略、社交媒体策略等。 4、组策略是一种集中式的账户管理功能,在windows server系统的活动目录中可用。 5、安全文档的类型:系统架构、变更文档、日志、存货清单。 6、变更管理是一种用于批准并执行变更的系统化方法,以确保信息技术服务最大化的安全性、稳定性和可用性。 7、档案处理方法:分类、保留与留存、处理与销毁。 本文转自 eth10 51CTO博客,原文链接:http://blog.51cto.com/eth10/1981854

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册