精华内容
下载资源
问答
  • 四款好用免费直播编码推流软件

    万次阅读 2018-04-14 21:40:43
    现代生活已经离不开互联网,离不开软件了。 这说法毫不夸张。 比如手机上各种 APP 眼花缭乱 ,各种...今天我们来谈谈 关于直播编码和推流免费软件。 官网地址: http://www.800li.net/index.php?s=/home/websi...
    现代生活已经离不开互联网,离不开软件了。 这说法毫不夸张。 比如手机上各种 APP 眼花缭乱 ,各种行业, 各种功能, 各种 Logo, 各种的各种。 没有良好的整理力,是真 的不好意思让别人看到啊。 这些功能各异的 APP 程序大多数是免费 APP。今天我们来谈谈 关于直播编码和推流的免费软件。 

    官网地址: http://www.800li.net/index.php?s=/home/website/educationblog/key/45.html 

    推荐四款笔者用过的直播编码推流软件,这些免费软件各有功能侧重点。不过最终这四款能脱颖而出,主要是满足了以下两个基本功能: 

    1 ) 支持 H264 编码方式,支持 MP3 或者 AAC 编码。H.264 是视频编码方式,而 MP3 与 AAC 是音频编码方式。 


    H264:又称 AVC (高级视频编码),是当前首选的编码标准。 

    MP3:是音频编码标准,大家都熟悉,不多说。 

    AAC:即高级音频编码,比 MP3 音质还好,是做直播的首选,它有 AAC-LC 与 HE-AAC 两个 档次,AAC-LC 是低复杂度的 AAC,兼容性好,HE-AAC 是高效能 AAC,压缩度高,音质与 AAC-LC 相当。 


    2 ) 支持 RTMP 推流。 
    RTMP:是实时消息协议的简称,是由 Adobe 公司开发,虽然没有变成国际标准,但它是实际上的工业标准,无论哪个公司,只要做直播,就得用它,当今的手机直播 APP 推流所用 的协议都是 RTMP 协议。 

    四款免费推流软件分别为: 

    1. Adobe Flash Media Encoder 

    2. Open Broadcaster Software 

    3. 800Li Education Podcast (八百里教育播客) 

    4. iAVcast 

    1 ) Flash Media Live Encoder 3.2 

    由著名的 Adobe 公司出品,值得信赖,Adobe 好长时间已经停止更新了,时代比较久远了,但仍旧不失为一个好用的编码器软件。


    2 ) Open Broadcaster Software 

    开源并且免费的直播软件,是当前非常流行的直播软件,很多游戏直播就采用它,例如斗鱼直播。


    3 ) 800Li Education Podcast 

    免费的抓桌面直播和录屏软件。不可多得的免费的直播编码软件。有画中画功能及画笔标注功能,对于目前在线教育直播不失为一个好的选择。 小巧、好用。免费但不开源。


    4 ) iAVCast (串流直播) 

    国内串流直播团队开发的免费直播软件,免费但不开源。


    做直播除了需要直播编码推流软件之外,流媒体服务器系统必不可少。 笔者简单列一下可以使用的直播系统,选择开源的实时直播软件可以考虑 Red 5, 选择国外大品牌的可以考虑 Adobe Media Server, 选择有 flash P2P 功能的可以选择 800Li Media Server。 


    展开全文
  • 在我们本科甚至在刚刚参加工作的时候(例如博主),写串口通信基本都是一...对于一帧数据的传输,如果以我博客第4张的说法,就是一帧数据有4位有效数据位,剩下的两位用来奇偶校验(因为使用16位编码),将高八位存储在

        在我们本科甚至在刚刚参加工作的时候(例如博主),写串口通信基本都是一位开始一位结束八位数据位没有奇偶校验位,那么这样的好处是方便,的确很方便,但是对于数据传输的隐蔽性和封装的保护就没有那么好的效果了。今天博主初步的探究下在程序中加入奇偶校验位的使用和通信方式。

    对于一帧数据的传输,如果以我博客第4张的说法,就是一帧数据有4位有效数据位,剩下的两位用来奇偶校验(因为使用16位编码),将高八位存储在第五位。低八位存储在第六位。

    这个校验的基本方式和想法是,在各种主流的单片机都有一个奇偶校验的函数表,通过该表可以很简单的调用使用奇偶校验功能并且将校验码进行赋值给最后两位,那么校验对比的过程就是,PC机发送一个帧的数据,格式是四位有效数据位和两位奇偶校验位 XX XX XX XX XX XX,发送给单片机后,单片机会在收数据的中断函数中进行判断和校验,如果数据无误则可以通过发送信号线将信号发送给PC机。

       下面说一下AVR单片机烧写的一些小陷阱,博主在AVR开发的下载软件使用的是AVR_FIGHTER,这个烧写软件有比较有趣的地方,就是在下图中的界面。

    首先需要装载FLASH 装载EEPROM 然后可以尝试读取FLASH EEPROM等。

    有没有成功接入硬件设备需要进行读取的操作,在这里我们需要在芯片特征字和熔丝位进行读取,在博主手中的ATmega8中的熔丝低位是BF 熔丝高位是D9

    然后烧写程序的时候要记得勾选应该选择的选项,像如图中的选项基本要勾选,这样才不会导致烧写失败。


    展开全文
  • 关于MySQL性能优化描述,下列哪些说法是正确:ABCD A .主键查询优先于二级索引查询。 B .表连接有一定代价,故表连接数量越少越好。 C .一般情况下,二级索引扫描优先于全表扫描。 D .可以使用通过...
  • R.java文件无法创建原因网上有很多说法普遍是以下两种: 1. xml文件有错误: 解决方法就是找到哪个xml有错然后把错误修复就OK了。 2.编码问题 这时候只要把xml文件的编码改成utf8就能解决问题。 然而对于查找...

    R.java文件无法创建的原因网上有很多说法普遍是以下两种:

    1. xml文件有错误:

    解决方法就是找到哪个xml有错然后把错误修复就OK了。

    2.编码问题

    这时候只要把xml文件的编码改成utf8就能解决问题。

    然而对于查找xml文件错误我们常常依赖android的自带工具进行检测,但是只要是人写得程序必然会有一些bug,

    当检测工具出现bug后有可能导致错误很难定位。

    而在xml文件校验方面,里面就有一个很坑的bug:

    当menu目录下的文件有错时导致r文件无法生成时,可能不会给出任何有关menu目录下xml文件的错误提示

    所以在发现R文件无法生成而又找不到错误时,打开每个menu的xml文件看看是不是有问题

    转载于:https://www.cnblogs.com/instorm/p/3695009.html

    展开全文
  • 关于JVM执行效率深入分析Java编译原理JAVA编译过程Java可以做什么程序与JavaJava发展史与体系结构java 如何换行输出信息?Java编码规范 什么是Java编程关键字 关键字是电脑语言里事先定义,有特别意义...

    标题

    什么是Java编程的关键字

    1. 关键字是电脑语言里事先定义的,有特别意义的标识符,有时又叫保留字,还有特别意义的变量。
    2. Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数。
    3. Java语言规定关键字不能作为标识符。目前共有50个Java关键字,其中,"const"和"goto"这两个关键字在Java语言中并没有具体含义。Java语言把它们列为关键字,只是因为"const"和"goto"是其他某些计算机语言的关键字。
      在这里插入图片描述
      在这里插入图片描述

    关键字和保留字的区别

    正确识别java语言的关键字(keyword)和保留字(reserved word)是十分重要的。Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等。
    

    保留字是为java预留的关键字,他们虽然现在没有作为关键字,但在以后的升级版本中有可能作为关键字。
    识别java语言的关键字,不要和其他语言如c/c++的关键字混淆。
    标志符包含关键字而关键字里面又包含两个保留字,根据java文档true、false、null不属于关键字但是属于标志符,规定的关键字只有50个包含两个保留字,但是这53个都属于标志符。

    1.保留字(reserved words):是语言已经定义过的字,一些保留字可能没有相对应的语法,考虑到扩展性,为了向后兼容不能再将其作为变量名。const和goto是java的保留字。 所有的关键字都是小写

    2.关键字(keywards):在语言中有特殊的含义成为语法的一部分。

    JAVA语法——标识符

    标识符:就是给类、接口、方法、变量等起名字的字符序列
    组成规则:英文大小写字母、数字字符、$和-(字下美人数骆驼)
    注意事项:不能以数字开头、不能是java中的关键字、区分大小写
    常见的命名规则(见名知意)
    A: 包 全部小写
    单级包: 小写 举例:kgc,com
    多级包: 小写,并用.隔开 举例:cn.bdqn,pojo.user
    B: 类或者接口
    一个单词:首字母大写 举例:Student,User
    多个单词:每个单词首字母大写 举例:HelloSpring,UserName
    C: 方法或者变量
    一个单词:首字母小写 举例:name,main
    多个单词:从第二个单词开始,每个单词首字母大写 举例:studentAge,showAllNames()
    D: 常量 全部大写
    一个单词:大写 举例:SESSION
    多个单词:大写,并用_隔开 举例:SESSION_DEV_USER
    在这里插入图片描述

    什么是变量?

    在这里插入图片描述

    一、变量
    1.在程序运行过程中,随时可能会产生一些临时数据,应用程序将这些数据保存到一些内存单元。这些内存单元叫变量
    2.变量包括 变量名 变量类型 变量值
    3.变量的作用:
    变量可以用来存储 一个 数据,给这个数据起了名字(变量名)方便程序员使用该变量
    4.使用变量之前需要先声明,再赋值。
    5.如何声明变量:如何赋值:
    1)数据类型 变量名;
    例:int a;//声明一个int 类型的变量
    2)数据类型 变量名1,变量名2,变量名3,…;
    例:int a,b,c,d;//声明int类型的变量a,b,c,d
    3)给变量赋值:变量名=值;
    4)变量的声明和赋值可以写在一起:
    数据类型 变量名 = 值;
    数据类型 变量名 = 值,变量名 = 值,变量名=值;
    5)变量声明了以后一直可以使用么?
    全局变量可以,局部变量出了局部失效

    常量

    常量:在程序执行过程中,其值不发生改变的量。
    优点:比较安全
    推荐做法:
    (1)常量名通常大写
    (2)不同字符使用下划线分隔
    (3)只能被赋值一次,通常定义时即对其初始化

    什么是类?

    1.类是一个模板,它描述一类相同属性的对象的行为和状态。
    例:建立一个学生类,有年龄,性别,名字等属性,有学习、打游戏等方法。那么这些属性是来描述学生 群体的共同特征和共同行为。
    2.类的作用是什么?
    类就是用来存放和操作数据的
    3.如何使用类
    类是一个模板,如果要使用的话,是使用模板产生的某一个对象。每个对象都是唯一的。
    Student stu=new Student();//使用new关键字来创建对象

    四、程序主入口:main方法
    ,static public void main(String args[]){}
    ,public static void main(String args[]){}
    ,public static void main(String… args){}

    五、调用普通方法:
    类对象.方法名(参数);

    Abstract 抽象的 理解

    Abstract 抽象的 一个Java语言中的关键字,用在类的声明中来指明一个类是不能被实例化的,但是可以被其它类继承。一个抽象类可以使用抽象方法,抽象方法不需要实现,但是需要在子类中被实现。

    abstract关键字可以修改类或方法。abstract类可以扩展(增加子类),但不能直接实例化。abstract方法不在声明它的类中实现,但必须在某个子类中重写。采用 abstract方法的类本来就是抽象类,并且必须声明为abstract。

    Java中的名称命名规范:

    包名:多单词组成时所有字母都小写:xxxyyyzzz
    类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
    变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
    常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ

    数据类型 (注意float、boolean、char )String不是基本数据类型

    在这里插入图片描述
    在这里插入图片描述

    float 默认值是0.0f float f1=253.4f;
    double 默认值是0.0d double d1=123.4;
    boolean 默认值是false;
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    Java虚拟机与跨平台原理

    什么是跨平台

    java的跨平台不是java源程序的跨平台 ,如果是这样,那么所以语言都是跨平台的, java源程序先经过javac编译器编译成二进制的.class字节码文件(java的跨平台指的就是.class字节码文件的跨平台,.class字节码文件是与平台无关的),.class文件再运行在jvm上,java解释器(jvm的一部分)会将其解释成对应平台的机器码执行,所以java所谓的跨平台就是在不同平台上安装了不同的jvm,而在不同平台上生成的.class文件都是一样的,而.class文件再由对应平台的jvm解释成对应平台的机器码执行。 最后解释下机器码和字节码的区别: 一,机器码,完全依附硬件而存在~并且不同硬件由于内嵌指令集不同,即使相同的0 1代码 意思也可能是不同的~换句话说,根本不存在跨平台性~比如~不同型号的CPU,你给他个指令10001101,他们可能会解析为不同的结果~ 二,我们知道JAVA是跨平台的,为什么呢?因为他有一个jvm,不论哪种硬件,只要你装有jvm,那么他就认识这个JAVA字节码~~~~至于底层的机器码,咱不用管,有jvm搞定,他会把字节码再翻译成所在机器认识的机器码~~~

    一.Java的跨平台性

    1.Java可以跨平台,C和C++不具有跨平台的特性,
    2.编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件。Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。
    3.而这个过程中,我们编写的Java程序没有做任何改变,仅仅是通过JVM这一”中间层“,就能在不同平台上运行,真正实现了”一次编译,到处运行“的目的。
    4.运行Java程序必须有JVM的支持,即使将Java程序打包成可执行文件(例如 .exe),仍然需要JVM的支持。
    5.注意:跨平台的是Java程序,不是JVM。JVM是用C/C++开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的JVM。

    二.关于JVM的执行效率

    1. 解释字节码肯定比全速运行机器码慢很多,但是JVM 有一个选项,可以将使用最频繁的字节码翻译成机器码并保存,这一过程被称为即时编译。这种方式确实很有效,致使微软的 .NET 平台也使用了虚拟机。
    2. 现在的及时编译器已经相当出色,甚至成了传统编译器的竞争对手,某些情况下甚至超过了传统编译器,原因是JVM可以监控运行时信息。例如,即时编译器可以监控使用频率高的代码并进行优化,可以消除函数调用(即“内嵌”)。
    3. 但是,Java 毕竟有一些C/C++没有的额外的开销,关键应用程序速度较慢。比如Java采用了与平台无关的绘图方式,GUI程序(客户端程序)执行要慢;虚拟机启动也需要时间。
      在这里插入图片描述

    深入分析Java的编译原理

    前提了解网址
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    JAVA的编译过程

        JAVA中的编译器和解释器:   
        Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(即扩展名为.class的文件),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行,这就是上面提到的Java的特点的编译与解释并存的解释。
    

    Java源代码---->编译器---->jvm可执行的Java字节码(即虚拟指令)---->jvm---->jvm中解释器----->机器可执行的二进制机器码---->程序运行。

    采用字节码的好处:   Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。

    Java可以做什么

    客户端 银行软件、商场结算软件
    浏览器 京东商城、淘宝网、易趣网
    移动端 Android APP
    高速运算和存储 大数据开发

    程序与Java

    在这里插入图片描述
    编写程序的工具就是计算机语言,Java就是多种语言中的一种

    Java发展史与体系结构

    在这里插入图片描述
    在这里插入图片描述

    java 如何换行输出信息?

    在这里插入图片描述
    在这里插入图片描述

    Java编码规范

    在这里插入图片描述

    Scanner的使用 在程序运行中,如何接收用户键盘输入的值?

    在这里插入图片描述

    自动类型转换规则 强制类型转换规则

    在这里插入图片描述
    数据类型转换包括自动类型转换和强制类型转换
    在这里插入图片描述
    赋值运算符、算术运算符、关系运算符、逻辑运算符

    算数运算符

    在这里插入图片描述
    在这里插入图片描述

    关系运算符

    在这里插入图片描述
    =为赋值运算符,==为等于运算符 关系表达式的结果为布尔值

    、<、>=、<= 运算符的优先级别高于==、!=
    、<、>=、<=运算符只支持数值类型的数据比较
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    赋值运算符

    在这里插入图片描述

    逻辑运算符

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    条件运算符

    运算所需变量为三个的运算符叫做三目运算符,只有条件表达式【?:】
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    运算符优先级 所谓优先级就是在表达式运算中的运算顺序。

    单目运算符包括! ++ --,优先级别高
    优先级别最低的是赋值运算符
    可以通过()控制表达式的运算顺序,()优先级最高
    从右向左结合性的只有赋值运算符、三目运算符和单目运算符
    算术运算符 >逻辑非运算符【!】、按位取反运算符【~】、自增自减运算符【++, --】、负号运算符【-】、类型转换运算符【(类型)】、指针运算符和取地址运算符【*和&】、长度运算符【sizeof】 关系运算符 > 逻辑运算符
    在这里插入图片描述
    运算所需变量的个数决定几目运算符
    在这里插入图片描述
    在这里插入图片描述

    一个4、5位数一个个取出来

    在这里插入图片描述

    int num = 6325;int qian = num/1000;int bai = num/100%10;int shi = num/10%100%10;int ge = num%100%10;
    System.out.println(qian+","+bai+","+shi+","+ge);
    

    变成5位数 只会影响千位 后面的百十个位不受影响
    在这里插入图片描述

    基本的if选择结构

    if选择结构是根据条件判断结果选择不同的处理 结果必须是布尔值

    使用复杂条件的if选择结构

    ==使用逻辑运算符 复杂条件使用括号提高可读性 ==
    在这里插入图片描述

    使用if-else选择结构

    在这里插入图片描述

    为什么使用多重if选择结构

    == 单个if选择结构无法完成 多个if选择结构麻烦且效率低 ==
    使用多重if选择语句处理问题时需要注意顺序
    在这里插入图片描述
    在这里插入图片描述

    嵌套if选择结构

    嵌套if控制语句可以通过外层语句和内层语句的协作,增强程序的灵活性
    在这里插入图片描述

    为什么使用switch选择结构

    如果使用多重if选择结构完成,但是从代码的结构上看,显得代码冗余,结构复杂,有多次的等值判断。
    为了解决上述问题,我们引出switch的选择结构
    注意:
    ①常量名不能重复
    ②case后面的常量不是必须要按照某种顺序的,switch后面的值会去找和自己匹配的常量值,然后执行对应的代码块,如果没有找到,则执行default中的值
    ③break结束当前的执行内容,在case后面执行,如果没有break代码会继续向下执行,一直到遇到break或整个switch语句运行完
    ④default在最后的时候,break是可以省略的(不推荐),在其他位置的时候,不能省略,否则会一直向下执行直到遇到break为止
    default块和case块的先后顺序可以变动,不会影响程序执行的结果.通常,default块放在末尾,也可以省略.
    每个case后的代码块可以有多个语句,即可以有一组语句,而且不需要用"{}“括起来.
    case和default后都有一个冒号,不能漏写,否则编译不通过.对于每个case的结尾,都要想一想是否需要从这里跳出整个switch选择结构.如果需要,一定不要忘记写"break;”.
      
      在case后面的代码中,break语句是可以省略的,还可以让多个case执行同一语句.

      
    大家会发现多重if选择结构和switch选择结构很相似,它们都是用来处理多分支条件的结构,但是switch选择结构只能用于等值条件判断的情况
    在这里插入图片描述
    在这里插入图片描述
    表达式 即条件可以是
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    产生随机数(0~9)的方法如下

    在这里插入图片描述

    java生成指定范围的随机数

    生成区间 [64,128] 中随机值的代码为:
    rand.nextInt(65)+ 64;
    取值可能性的数量是如何计算出来的呢?当然是 最大取值-最小取值+1 通用公式如下:

    Random rand = new Random();
    int randNumber =rand.nextInt(MAX - MIN + 1) + MIN; // randNumber 将被赋值为一个 MIN 和 MAX 范围内的随机数
    在这里插入图片描述

    • 生成0-n之内的数字 [0,n] * int i1 = random.nextInt() * (n-0+1);
    • 生成 [m,n] 的数字 [m,n] * int i1 = random.nextInt() * (n-m+1)+m;
    •                             [0, 100)。            rand.nextInt(100);                        
      
    • 生成一个50位的随机a~z字符串。[a,z]
    public void test4(){
        String result = "";
        char chValue ;
        int inValue;
        for(int i = 0 ; i < 50; i++){
            inValue = (int) (Math.random()*(122-97+1)+97);
            chValue = (char) inValue;
            result += chValue + ",";
        }
        System.out.println("运行结果:" + result);
    }
    
    

    字母小写a-z:97-122; 字母大写A-Z:65-90; 数字到字母char接收转化

    变大小写把char弄成String这种复杂 可直接用Character
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    java中next与nextLine的用法

    nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。
    next()会自动消去有效字符前的空格,只返回输入的字符,不能得到带空格的字符串。
    (简单点说,next我只要字,nextLine我啥都要)
    next()在输入有效字符之后,将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。
    nextLine()方法的结束符只是Enter键

    3种循环结构

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    while循环结构 先判断,后执行。 循环次数不确定

    while循环语句也称条件判断语句,他的循环方式为利用一个条件来控制是否要反复执行这个语句。
    语法:while(条件表达式){//要执行循环操作的代码块} 。循环条件是一个表达式,它的值为boolean类型,

    声明并初始化循环变量
    判断循环条件是否满足,如果满足则执行循环操作,否则退出循环
    执行完循环操作后,再次判断循环条件,决定继续执行循环或者退出循环
    在这里插入图片描述

    do-while循环结构 先执行,后判断 循环次数不确定

    Java中的for循环 循环次数确定 先判断,再执行

    在这里插入图片描述
    3种形式

    //第一种是普通的for循环遍历、
    for (int i = 0; i < list.size(); i++) {
       System.out.print(list.get(i) + ",");
    }
    //第二种是使用迭代器进行遍历
    Iterator iterator = list.iterator();
    while (iterator.hasNext()) {
       System.out.print(iterator.next() + ",");
    }
    //第三种我们一般称之为增强for循环(for each)
    for (Integer i : list) {
       System.out.print(i + ",");
    }
    

    == 增强for循环有两个好处: 1.写起来简单 2.遍历集合、容器简单==
    通过反编译,我们看到,其实JAVA中的增强for循环底层是通过迭代器模式来实现的。下面删除元素采坑点分析
    既然增强for循环通过迭代器实现,那么必然有迭代器的特性。
    Java中有fail-fast机制。在使用迭代器遍历元素的时候,在对集合进行删除的时候一定要注意,使用不当有可能发生ConcurrentModificationException,这是一种运行时异常,编译期并不会发生。只有在程序真正运行时才会爆发。

    Iterator是工作在一个独立的线程中,并且拥有一个 mutex 锁。 Iterator被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数量发生变化时,这个索引表的内容不会同步改变,所以当索引指针往后移动的时候就找不到要迭代的对象,所以按照 fail-fast 原则 Iterator 会马上抛出java.util.ConcurrentModificationException异常。
    所以 Iterator 在工作的时候是不允许被迭代的对象被改变的。
    但你可以使用 Iterator 本身的方法 remove() 来删除对象,Iterator.remove() 方法会在删除当前迭代对象的同时维护索引的一致性。

    使用for循环,输出加法表

    在这里插入图片描述
    在这里插入图片描述

    使用while、do…while、for循环计算100以内的奇偶数之和

    参考地址

    JAVA之二重循环

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    break直接跳出当前层次的循环。
    return 跳出循环体所在的方法,相当于结束该方法;
    continue 结束本次循环,进行下次循环;

    二重循环实现乘法表、倒三角

    MySQL 自增长主键 在删除数据后依然接着删除的数据增长解决

    如题,比如有主键为1,2,3的三条数据,删除2,3两条数据后再新增数据,主键是从4开始的。

    原因是主键是唯一的,绝对不能出现重复。比如有100条数据,主键为1到100,删除了主键为50的数据之后,还剩99条数据,这个时候再新增数据,主键是要从101开始,而不是第100条数据的100,不然会重复,有两个主键为100的数据。
    不过可以手动修改。
    1,删除原有主键:

    ALTER TABLE `table_name` DROP `id`;
    

    2,添加新主键字段:

    ALTER TABLE `table_name` ADD `id` int NOT NULL FIRST;
    

    3,设置新主键:

    ALTER TABLE `table_name` MODIFY COLUMN `id` int NOT NULL AUTO_INCREMENT,ADD PRIMARY KEY(id);
    

    点击查看更多思路

    冒泡排序

    假如有N个元素,最好的情况我们仅仅需要N-1次比较和交换,最坏的情况下需要N(N-1)/2次比较和交换才能完成。
    在这里插入图片描述

    Java:List,Map,Set底层实现

    参考二
    参考三
    在这里插入图片描述
    在这里插入图片描述

    为什么需要程序调试什么是程序调试

    编写程序过程中有时出现错误,但不好发现和定位错误,有没有好的方法呢?
    通过代码阅读或者加输出语句查找程序错误
    当程序结构越来越复杂时,需要专门的技术来发现和定位错误,就是“程序调试”
    在这里插入图片描述
    在这里插入图片描述
    双重循环中,外层循环变量与内层循环变量的关系是什么?
    答:外层循环每执行一次,内层循环要执行一圈
    1.continue再循环中的作用
    1)在continue分支判断执行时,跳出本次循环,执行下个循环
    1.break再循环中的作用
    1)在break分支判断执行时,跳出(结束)循环

    数组及其基本要素

    数组是一个变量,存储相同数据类型的一组数据
    Java中,数组变量是引用类型的变量,同时因为Java是典型的静态语言,因此它的数组也是静态的,所以想要使用就必须先初始化(为数组对象的元素分配空间)。
    在这里插入图片描述
    数组基本要素: 标识符 、 数组元素 、 元素下标:从0开始 、 元素类型
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    使用数组四步走
    在这里插入图片描述
    声明数组: 告诉计算机数据类型是什么
    在这里插入图片描述
    分配空间: 告诉计算机分配几个连续的空间
    在这里插入图片描述
    数组赋值
    在这里插入图片描述
    在这里插入图片描述

    数组与内存 数组的初始化方式及其内存分配

    静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度,如:

    1 //只是指定初始值,并没有指定数组的长度,但是系统为自动决定该数组的长度为4
    2 String[] computers = {"Dell", "Lenovo", "Apple", "Acer"};  //①
    3 //只是指定初始值,并没有指定数组的长度,但是系统为自动决定该数组的长度为3
    4 String[] names = new String[]{"多啦A梦", "大雄", "静香"};  //②
    

    动态初始化:初始化时由程序员显示的指定数组的长度,由系统为数据每个元素分配初始值,如

    1 //只是指定了数组的长度,并没有显示的为数组指定初始值,但是系统会默认给数组数组元素分配初始值为null
    2 String[] cars = new String[4];  //③
    

    在这里插入图片描述
    静态初始化方式,程序员虽然没有指定数组长度,但是系统已经自动帮我们给分配了,而动态初始化方式,程序员虽然没有显示的指定初始化值,但是因为Java数组是引用类型的变量,所以系统也为每个元素分配了初始化值null,当然不同类型的初始化值也是不一样的,假设是基本类型int类型,那么为系统分配的初始化值也是对应的默认值0。
    在这里插入图片描述
    在这里插入图片描述

    填充替换数组元素2种方法

    在这里插入图片描述
    在这里插入图片描述

    数组越界异常

    如果指定的索引位置大于或等于要进行填充的数组的长度,则会报出ArrayIndexOutOfBoundsException(数组越界异常)异常。
    还有常见错误有:1. 编译出错,没有写明数组的大小、2.编译出错,数组越界、
    3.编译出错,创建数组并赋值的方式必须在一条语句中完成
    在这里插入图片描述

    对数组进行排序

    通过Arrays类的静态sort()方法可以实现对数组的排序。sort方法提供了多种重载形式,可对任意类型的数组进行升序排序。 Arrays.sort(object);
    在这里插入图片描述

    复制数组

    Arrays类的copyOf()方法与copyOfRange()方法可以实现对数组的复制。
    copyOf()方法是复制数组至指定长度。copyOfRange()方法是将指定数组的指定长度复制到一个新数组中。
    1、copyOf()方法
    该方法提供了多种重载形式,用于满足不同类型数组的复制。
    语法如下:copyOf(arr,int newlength)
    在这里插入图片描述
    2、copyOfRange()方法
    该方法同样提供了多种重载形式。 语法如下:copyOfRange(arr, int from, int to);
    在这里插入图片描述

    数组查询

    Arrays类的binarySearch()方法,可使用二分搜索法来搜索指定数组 ,以获得指定对象。该方法返回要搜索元素的索引值。binarySearch()方法提供了多种重载形式,用于满足各种类型数组的查找需要。binarySearch()方法有两种参数类型。
    1、binarySearch(Object [ ],Object key)
    在这里插入图片描述
    上面的代码中变量index的值是元素8在数组arr中索引在0~1内的索引位置。由于在指定的范围内并不存在元素8,index的值是“-”(插入点)。如果对数组进行排序,元素8应该在25的前面,因此插入点应是元素25的索引值2,所以index的值是-2。
    如果数组中的所有元素都小于指定的键,则为arr.length。
    在这里插入图片描述
    必须在进行此调用之前对数组进行排序(通过sort()方法)。如果没有对数组进行排序,则结果是不确定的。如果数组包含多个带有指定索引值的元素,则无法保证找到的是哪一个。

    2、binarySearch(Object [ ],int fromIndex,int toIndex,Object key) 该方法在指定的范围内检索某一元素。

    在这里插入图片描述
    在使用此方法之前同样对数组进行排序,来获取准确的索引值。如果要搜索的元素key在指定的范围内,则返回搜索键的索引;否则返回-1或“-”(插入点)。如果范围中的所有元素都小于指定的键,则为toIndex。
    如果指定的范围大于或等于数组的长度,则会报出ArrayIndexOutOfBoundsException异常。

    Java数组的5种基本操作

    1 声明数组
    2 获取数组的长度(.length)
    3 打印数组(Arrays.toString())
    4 数组元素重排序(Arrays.sort())
    5 判断数组中是否包含某个值

    掌握数组常用操作

    获取最大 、最小值 、 数字排序 、 插入数字

    使用数组有哪些步骤?

    三个过程分别是.声明,创建和初始化

    二维数组

    在这里插入图片描述

    二维数组其实是一维数组的嵌套(每一行看做一个内层的一维数组)
    两种初始化形式 : 格式1动态初始化、格式2: 静态初始化
    在这里插入图片描述
    在这里插入图片描述

    使用java.util.Arrays类

    在这里插入图片描述
    在这里插入图片描述

    二维数组定义、定义并赋值

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 2、下列关于URL类的说法,正确的是(BD) A .URL 类自身可根据 RFC2396 中定义的转义机制编码或解码URL 部分。 B .URL类继承自java.lang.Object,实现了Serializable接口。 C .public String getHost...
  • 【Qt开发】Qt中中文字符问题

    千次阅读 2012-05-23 01:38:14
    之前查了关于处理中文字符的一些资料,说法不一,有些方法又没有效果。只好最终自己尝试了一种适合当前程序的方法。 (1)首先在主函数中重置程序的默认字符编码: #include #include #include ...
  • 【单选题】根据《建设工程工程畺清单计价规范》(GGB505-2013)下列关于工程量清单项目编码的说法中,正确的是( )。【单选题】以下程序执行后,如通过键盘输入字符 我喜欢唱歌,则变量words的值为 #coding:utf-8 wor...
  • Qt中中文字符问题

    2012-05-23 01:38:00
    之前查了关于处理中文字符的一些资料,说法不一,有些方法又没有效果。只好最终自己尝试了一种适合当前程序的方法。 (1)首先在主函数中重置程序的默认字符编码: #include &lt;QtGui/QApplication&...
  • 程序员现实日子

    2014-01-01 21:34:05
    好久没有写东西了,由于这段时刻发生了太多事。我乃至置疑自个还有没有创意可用,有没有可能再写出啥。不过,太阳仍是在起起落落,我也还在...说起“晚上生活”,很多人必定思绪万千,但关于一个编码为生的程序...
  • Spring面试题分享()

    万次阅读 2017-10-10 20:38:57
    1.下面关于“依赖注入”的说法,错误的是( D ) A. 将组件间的依赖关系采取配置文件的方式管理,而不是硬编码在代码中 B. 降低了组件间的耦合,使程序更容易维护和升级 C. 促进了“面向接口编程”,使构建大...
  • 问题4-23:在一些文献和教材中,可以见到关于以太网的“前同步码”(preamble)有两种不同的说法。一种说法是:前同步码共8个字节。另一种说法是:前同步码共7个字节,而在前同步码后面还有一个字节的“帧开始定界符”...
  • 多选题 以下说法正确的是(    )? A....B....C....关于重定位的说法,以下正确的是(    )? A. 重定位的目的是为了使程序运行时确定所需内容的真实地址,从而可以得到所需内容
  • 笔试相关1

    2019-02-17 23:25:08
    在软件开发过程中,我们可以采用不同的过程模型,下列... 下列关于递归的说法正确的是: 1.程序结构更加的简洁 2.占用 CPU 的处理时间更多 3.要消耗大量的内存空间,程序执行满,甚至无法执行 ...
  •  如果将数据库称为现代数字生活的基础,那么这样的说法一点也不夸张——大型企业应用、网站,所有这些东西的背后,都是数据库在支撑。并且,最终说来,产生价值的并不是绚丽的界面和现代化的输入方式,而是存放在...
  • 2,下列关于功能性注释不正确的说法是() A功能性注释嵌在源程序中,用于说明程序段或语句的功能以及数据的状态 B注释用来说明程序段,需要在每一行都要加注释 C可使用空行或缩进,以便很容易区分注释和程序 D...
  • 错题整理day06

    2020-04-09 15:51:24
    1、下面哪段程序能够正确的实现了GBK编码字节...2、下列关于java并发的说法中正确的是: readwritelock适用于读多写少的并发场景 3、下列哪个对访问修饰符作用范围由大到小排列是正确的? public>protected>d...
  • 8.1 选择题 (695) 根据编码规范,下面说法正确的是______。 a. 可以使用类型定义符typedef重命名用户类型;... (a) (696) 下面关于宏定义的说法正确的是: a. 虽然预处理程序可以用#include
  • A、 程序的规模 B、程序的易读性 C、程序的执行效率 D、程序的可移植性 我的答案:C 4、 在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段()。 A、 概要设计 B、详细设计 C、可行...
  • 来源:牛客网 下面关于 form 属性中说法错误的是 a. method属性一共有两个选项,post 和 get b. action属性用来定义提交给服务器处理程序的地址 c. enctype属性用来定义表单数据进行编码的方式 d. enc...
  • 1. 在关于用例(use case)描述中,错误是a)用例将系统功能范围分解成许多小系统功能陈述b)一个用例代表了系统一个...b)集成测试也叫做组装测试,通常在编码完成基础上,将所有的程序模块进行有序、递...
  • Java多态 练习

    2020-07-23 21:55:19
    选择 1、下列代码的运行结果为: C 2、创建一个父类Animal,一个子类...6、在Java中,多态的实现不仅能减少编码的工作量,还能大大提高程序的可维护性及可扩展性,那么实现多态的步骤包括以下几个方面除了 B 7、下面
  • 今天在写代码的时候,突然想到了一个非常有趣的问题,就是非常经典的一个问题:猫叫了,老师跑了... 设计模式主要是教大家如何写代码,更确切的说法应该是怎么组织代码,使代码更加优雅。使程序编码成为一门艺术。 ...
  •  “关于Java的序列化,无非就是简单的实现Serializable接口”这样的说法只能说明停留在会用的阶段,而我们想要走的更远往往就需要了解更多的东西,比如:为什么要实现序列化?序列化对程序的安全性有啥影响?如何...
  • jsp复习题库(1)

    万次阅读 多人点赞 2019-01-23 11:02:52
    1、下面关于动静资源说法错误是? A、HTML+CSS+JavaScript属于静态资源 B、动态资源为一段服务程序,运行后,生成数据文件 C、js属于动态资源 D、jsp+servlet属于动态web技术 2、当利用request方法获取...

空空如也

空空如也

1 2 3
收藏数 48
精华内容 19
关键字:

关于编码程序的说法