1.客户端传输到服务端 public void service() { ServerSocket serverSocket = null; InputStreamReader inputStreamReader = null; try { serverSocket = new ServerSocket(8899); Socket accept = serverSocket.accept(); InputStream inputStream = accept.getInputStream(); inputStreamReader = new InputStreamReader(inputStream); char[] cbuf = new char[5]; int len = 0; while ( (len = inputStreamReader.read(cbuf))!=-1 ){ System.out.print(new String(cbuf, 0, len)); } } catch (IOException e) { e.printStackTrace(); } finally { if (inputStreamReader != null) { try { inputStreamReader.close(); } catch (IOException e) { e.
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。
示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。
你不需要考虑数组中超出新长度后面的元素。
package com.xiao.algorithms.array; class Solution { public static int removeElement(int[] nums, int val) { // 快慢指针 int fastIndex = 0; int slowIndex; for (slowIndex = 0; fastIndex < nums.
C++ C# 备注 HANDLE (void*) System.IntPtr BYTE (unsigned char) System.Byte SHORT (short) System.Int16 WORD (unsigned short) System.UInt16 INT (int) System.Int16 Int32 UINT (unsigned int) System.Int16 Int32 LONG (long) System.Int32 ULONG (unsigned long) System.UINT32 DWORD (unsigned long) System.UINT32 DECIMAL System.
在学习SQL注入时, 经常拿出来的例子就是PHP+MySQL这一套经典组合. 其中又经常提到的>=5.0版本的MySQL的内置库: information_schema
简单看一下information_schema库中的内容
其中在注入时关注的两张表: tables 和 columns
mysql> use information_schema Database changed mysql> show tables; +---------------------------------------+ | Tables_in_information_schema | +---------------------------------------+ | CHARACTER_SETS | | COLLATIONS | | COLLATION_CHARACTER_SET_APPLICABILITY | | COLUMNS | | COLUMN_PRIVILEGES | | ENGINES | | EVENTS | | FILES | | GLOBAL_STATUS | | GLOBAL_VARIABLES | | KEY_COLUMN_USAGE | | PARAMETERS | | PARTITIONS | | PLUGINS | | PROCESSLIST | | PROFILING | | REFERENTIAL_CONSTRAINTS | | ROUTINES | | SCHEMATA | | SCHEMA_PRIVILEGES | | SESSION_STATUS | | SESSION_VARIABLES | | STATISTICS | | TABLES | | TABLESPACES | | TABLE_CONSTRAINTS | | TABLE_PRIVILEGES | | TRIGGERS | | USER_PRIVILEGES | | VIEWS | | INNODB_BUFFER_PAGE | | INNODB_TRX | | INNODB_BUFFER_POOL_STATS | | INNODB_LOCK_WAITS | | INNODB_CMPMEM | | INNODB_CMP | | INNODB_LOCKS | | INNODB_CMPMEM_RESET | | INNODB_CMP_RESET | | INNODB_BUFFER_PAGE_LRU | +---------------------------------------+ 40 rows in set (0.
import java.util.Scanner; /* * Scanner:用于获取键盘录入数据 * public String nextline():获取键盘录入字符串数据 */ public class ScannerLearn { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println(请输入数据:); String line = sc.nextLine(); System.out.println(您输入的数据是:+line); /* * String构造方法 * public String() 创建空白字符串对象 * public String(char[] chs) 根据字符数组的内容,来创建字符串对象 * public String(byte[] bys) 根据字节数组的内容,来创建字符串对象 * String s = abc 直接赋值(推荐使用)*/ String s1 = new String(); System.out.println(s1:+s1); //s1: char [] chs = {'a','b','c'}; String s2 = new String(chs); System.
数组定义:
数组是相同类型数据的有序集合。
数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
其中,每一个数据称作一个数组元素,每个数组元素刻意通过一个下标来访问它们。
数组声明创建:
首先必需声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:
dataType[] arrayRefVar;//首选的方法 或 dataType arraryRefVar;//效果相同,但不是首选 Java语言使用new操作来创作数组,语法如下:
1 dataType[] arrayRefVar = new dataType[arraySize] 数组的元素是通过索引访问的,数组索引从0开始。
获取数组长度:
arrays.length 三种初始化
静态初始化
interesting[] a = {1,2,3,4}; Man[] mans = {new Man(1,1),new Man(2,2)}; 动态初始化
int [] a = new int[2]; a[0] = 1; a[1] = 2; 数组的默认初始化
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间其中每个元素也被按照实例变量同样的方式被隐式初始化。
结构体的相关知识 要有string头文件
结构体属于用户自定义的1数据类型,允许用户存储不同的数据类型
定义--struct 结构体名 {结构体成员列表};
结构体创建变量--stuct 结构体名 变量名;
struct 结构体名 变量名={成员1值,成员2值....}
定义结构体时顺便创建变量
结构体数组 struct 结构体名 数组名 [元素个数]={ { },{ },...{ } },遍历结构体中的数据用,可以通过结构体指针->访问或者直接通过结构体变量访问s.name
结构体指针
结构体嵌套结构体struct teacher{ int id; int age; string name; struct student stu; } tracher t; t.stu.age=20; 结构体做函数参数:将结构体作为参数向函数中传递 传递方式有两种: 值传递 地址传递
常见代码运行时间长底层逻辑两大主要原因:
数据量大小; 代码复杂程度。 数据量大小比较好理解,第二个则是运算的复杂程度,如果说你用了状元或者或者是微六方式,这样代码的运算复杂程度就会增加,所以你的运算时间就会大大增长。
技巧1:只选择用用的column,而不是不用select *或select all;
技巧2:使用temp table,而不是使用nested query。(temp table指的是本代码运行中的内存里面,存了一个临时表,那么之后的运算中可以读取之前的临时表;nested query就是子query,比如说你先select一个子表,然后从这个子表里再次select出一个新表,这样嵌套速度相对前者就会慢不少);
技巧3:使用partition来filter rdata(我们的数据库一般都是存在一个巨大的data center的硬盘里面的,那partition是决定整个数据是如何存在不同的硬盘里面,比如说我们的data是根据日期来分组,每一个日期的数据存储在不同的硬盘里,当你在读取数据的时候,如果你只需要一个精准的日期或者部分日期的时候,你可以用partition by日期来作为一个filter,数据库里可以直接锁定那个硬盘可以快速读取,而不是先读取了所有的数据然后在进行筛选);
技巧4:使用in clause 而避免使用not in clause语句(这个涉及到sql代码来自行优化语句,用not in速度会非常的慢,一种替代的方式你可以用left outer join在filter by x column is null,或者呢使用这个exist语句;
技巧5:不到最后一步不使用order by(order by 是遍历了所有数据,运算时间非常长),所以只在最后的输出的时候运行,而不要放在前面的字表里面;
技巧6:不要使用select distinct而是使用select...from ...group by ..这种方式(distinct这个语句是非常费运算的)大家可以使用select x from table group by 1这种方式来替代select distinct x from table。
Java 类方法 Java的类方法,是封装在类中的一个方法,可以理解为一个可以重复使用代码模板。
类方法的定义 public class ...... { public static void main (String[] args) { } } class Dog { String name; double weight; // 定义一个类方法 public void eat () { double addWeight = 1.5; weight += addWeight; System.out.println(name + 吃完饭后胖了 + addWeight + KG\n目前体重 + weight); } } public void eat ()代码解析:
public :代表这是一个公开的方法 void : 表示没有返回值 【后面解释】 eat: 表示方法名 () : 表示形参列表【后面解释】 类方法的使用 类方法的使用方式为 对象名.方法名();即可调用。