当前位置: 首页 > news >正文

JQuery、JSON、AJAX、XML、IO流、多线程、反射核心知识点详解

JQuery

一、什么是JQuery

    JQuery是JavaScript的一个框架,对js的封装,使得js简单易学

    优点:

        1、不用考虑浏览器兼容性问题

        2、jquery拥有强大的选择器,简化了js代码

        3、jquery提供了很多系统函数,直接调用

二、版本

        1.x版本:兼容ie678,使用最为广泛的,官方只做bug维护,功能不再新增。

        2.x版本:不兼容ie678,很少人使用,官方只做bug维护,功能不再新增。

        3.x版本:不兼容ie678,只支持最新的浏览器。除非特殊要求,一般不会使用3.x版本的.

        注:jquery版本不是向下兼容的

三、怎么使用jquery

    1、在官网上下载一个jquery核心js,放入到项目中

    2、在网页中映入jquery核心js,代码如下:

        <script type="text/javascript" src="js/jquery-2.1.1.min.js"></script>

四、jquery核心函数

    jQuery()            $();

    jQuery === $

五、初始化函数

    js版:window.onload = function () {}

    jQuery版:jQuery(function(){});

               $(function() {});

               $(document).ready(function () {})

               $().ready(function () {});

   注:jQuery初始化函数比JavaScript初始化函数优先级要高

六、选择器

    1、基本选择器

        id                      $("#")

        class                   $(".")

        标签                     $("标签名")

        通配符                   $("*")

    2、层级选择器

        后代                      $("ul li")

        子代                      $("ul > li")

        同级别后面第一个            $("div + p")

        同级别后面所有              $("div ~ p")

    3、伪类选择器

        第一个p标签              $("p:first")

        最后一个p标签             $("p:last")

        偶数行,从零开始           $("table tr:even")

        奇数行,从零开始           $("table tr:odd")

        第三行,从零开始           $(table tr:eq(2))

        大于第三行,从零开始        $(table gt:eq(2))

        小于第三行,从零开始        $(table lt:eq(2))

    4、表单选择器

        属性选择器               $("input[name=username]")

        单选框与复选框被选中的     $("input:checked")

        下拉框被选中的            $("select option:selected")

七、循环函数

    $().each(function(i,element)){

    //循环体

    }

    参数i:表示循环的下标,从零开始,变量名自定义,参数可选

    参数element:表示循环出来的元素,变量名自定义,参数可选,在循环体中可以使用this关键字代替

八、操作属性

    attr()                  设置/获取网页元素属性,操作html标签原生属性

    removeAttr()            删除网页元素属性,操作html原生属性

    prop()                  设置/获取网页元素属性,属性不显示,不适合操作html标签原生属性

    removeProp()              删除网页元素属性,属性不显示,不适合操作html标签原生属性

    addClass()                添加class属性

    removeClass()             删除class属性

    toggleClass()             切换class属性

    html()                  设置/获取网页元素中间html代码

    text()                  设置/获取网页元素中间纯文本

    val()                   设置/获取网页元素的value值

九、操作css

    CSS()                   设置网页元素的css样式,css属性名如果是多个单词,使用-或者驼峰命名

                            例如:font-size    fontSize

    height()                设置/获取网页元素高度

    width()                 设置/获取网页元素宽度

    innerHeight()           设置/获取网页元素内部高度,内部高度 = div高度 + 内边距高度

    innerWidth()            设置/获取网页元素内部宽度,内部高度 = div宽度 + 内边距宽度

    outerHeight()           设置/获取网页元素外部高度,外部高度 = div高度 + 内边距高度 + 上下边框

    outerWidth()            设置/获取网页元素外部高度,外部高度 = div宽度 + 内边距宽度 + 左右边框

    offset()                获取网页元素的坐标,top表示顶点位置,left表示左边位置

    position()              获取网页元素的定位坐标,top表示顶点位置,left表示左边位置

    scrollTop()             设置/获取网页元素纵向滚动条偏移量

    scrollLeft()            设置/获取网页元素横向滚动条偏移量

十、文档处理

    append()                内部插入,向尾部追加内容,从右边添加到左边

    appendTo()              内部插入,向尾部追加内容,从左边添加到右边

    prepend()               内部插入,向头部追加内容,从右边添加到左边

    prependTo()             内部插入,向头部追加内容,从左边添加到右边

    remove()                删除本身标签

    empty()                 清空标签下的内容,标签本身不删除

    clone()                 标签本身复制一份

    before()                外部插入,向元素前面插入,从右边添加到左边

    insertBefore()          外部插入,向元素前面插入,从左边添加到右边

    after()                 外部插入,向元素后面插入,从右边添加到左边

    insertAfter()           外部插入,向元素后面插入,从左边添加到右边

    wrap()                  给元素添加包裹

    unwrap()                移除元素的包裹

    wrapAll()               外部包裹,把多个相同元素包裹在一起

    warpInner()             内部包裹,把每个标签内部内容进行包裹,被原标签包裹。

    replaceWith()           替换,右边替换左边

    replaceAll()            替换,左边替换右边

十一、事件

    click()                 单机事件

    dblclick()              双击事件

    change()                改变事件

    focus()                 获取焦点事件

    blur()                  失去焦点事件

    ...

十二、效果(了解)

    show()                  显示

    hide()                  隐藏

    toggle()                切换  显示/隐藏

    slideDown(time)         根据设定时间滑入,时间单位:毫秒

    slideUp(time)           根据设定时间滑入,时间单位:毫秒

    slideToggle(time)       根据设定时间切换 滑入/滑出 时间单位:毫秒

    fadeIn(time)            根据设定时间淡入,时间单位:毫秒

    fadeOut(time)           根据设定时间淡出,时间单位:毫秒

    fadeToggle(time)        根据设定时间切换 淡入/淡出, 时间单位:毫秒

JSON

一、什么是json

    json是一种数据格式,前后端通讯的数据传输格式,一堆的字符串。json数据格式与计算机语言无关,Java、JavaScript

    C++都是支持json数据的

二、数据格式有哪些

    1、自定义拼串

        1|刘备|男|1999-08-16|成都,2|曹操|男|1999-08-16|许昌,3|孙权|男|1999-01-11|建宁

        优点:内容短,传输效率高

        缺点:没有扩展性,无法支持多表,可读性差,解析差,容易出错

    2、xml

        <persons>

            <person id="1" name="刘备" sex="男" birthday="1999-08-16" address="成都" />

            <person id="1" name="曹操" sex="男" birthday="1999-08-16" address="成都" />

            <person id="1" name="孙权" sex="男" birthday="1999-08-16" address="成都" />

        </persons>

        <classes>

            <class id="1" name="QF2111">

                <student id="1" name="张三" sex="男">

                <student id="2" name="张三" sex="男">

            </class>

            <class id="2" name="QF2112">

                <student id="1" name="张三" sex="男">

                <student id="2" name="张三" sex="男">

            </class>

        </classes>

        优点:扩展性强,能支持多表,可读性好,解析容易,不容易出错

        缺点:内容过长,传输效率低

    3、json

    [

        {"id":"1","name":"刘备","sex":"男","birthday":"1999-08-16","address":"成都"},

        {"id":"2","name":"刘备","sex":"男","birthday":"1999-08-16","address":"成都"},

        {"id":"3","name":"刘备","sex":"男","birthday":"1999-08-16","address":"成都"}

    ]

    [

        {"id":"1","name":"QF2111","students":[

                                                {"id":"1","name":"张三","sex":"男"},

                                                {"id":"2","name":"李四","sex":"男"}

                                             ]},

        {"id":"2","name":"QF2112","students":[

                                                     {"id":"3","name":"张三","sex":"男"},

                                                     {"id":"4","name":"李四","sex":"男"}

                                              ]}

    ]

    优点:扩展性强,能支持多表,解析容易,不容易出错,内容较短

    缺点:可读性不高

4、json的版本

    jackson                 国外                  spring框架默认使用

    Fastjson                阿里                  属于第三方jar

AJAX

一、什么是AJAX

    ajax全称:Asynchronous (异步) Javascript And Xml                 异步的JavaScript与XML

    web1.0              浏览信息

    web2.0              网页交互    比如:电商、邮件、游戏         ajax推动web2.0主要技术

    html静态网页获取动态数据,就要用到ajax

*****二、ajax的创建步骤

    1、创建ajax核心对象XMLHttpRequest

     var req = new XMLHttpRequest();

    2、 第二步:连接服务器         请求servlet

          第一个参数:提交方式          取值:get/post

          第二个参数:访问后端url

          第三个参数:boolean值 ,是否异步请求,true为异步,false为同步

    3、发送请求

    req.send();

    4、指定回调函数,接收返回值

    req.onreadystatechange = function () {

                    //什么时候拿返回结果,俩个判断条件,1、http状态200 2、ajax状态等于4,

                    if(req.status == 200 && req.readyState == 4){

                        var json = req.responseText;

                        var jsonObj = JSON.parse(json);//js解析json

                      }

                }

三、http状态

    ajax获取http状态:req.status

    1.X     通知  接收到请求,并准备执行

    2.X     请求成功,并完全返回结果

    3.X     重定向错误

    4.X     客户端

    5.X     服务器端错误

*****四、ajax状态

    ajax获取本身状态:req.readyState

    0表示:未初始化状态,XMLHttpRequest被创建,但没有进行初始化,没有调用open函数

    1表示:初始化状态,对象已建立,调用了open函数,但没有发生请求,没有调用send函数

    2表示:发生状态,XMLHttpRequest调用了send函数,但是没有得到响应

    3表示:接收状态,已经接收部分数据,但req.responseText没有完全接收完毕

    4表示:完成状态,完全接收数据

五、js解析json

    js解析json字符串有俩种方式,分别如下:

        eval()                  早期

        JSON.parse()            后期,推荐使用

    eval()与JSON.parse()的区别

        1、eval()可以解析不规则的json字符串

            JSON.parse()无法解析不规则的json字符串

        2、eval()无法排出恶意连接,并且会解析执行,安全性低

            JSON.parse()会排出恶意连接,不会解析,安全性高

            强烈推荐JSON.parse()

六、js解析xml

    xml内容:<prompt code="0" info="用户名已存在!" />

    var xml = req.responseText;

    var parser = new DOMParser();   //创建xml对象

    var xmlDoc = parser.parseFromString(xml,"text/xml");    //创建xml文档对象

    var span = document.getElementsByClassName("prompt")[0];    //获取prompt标签对象

    var code = xmlDoc.getElementsByTagName("prompt")[0].getAttribute("code");   //获取prompt标签中的code属性

    var info = xmlDoc.getElementsByTagName("prompt")[0].getAttribute("info");   //获取prompt标签中的info属性

七、jQuery使用ajax

    jQuery的ajax 是对 js的ajax的封装,常用如下:

    1、$.ajax()      推荐使用

        type        提交方式,取值get/post

        url         请求地址

        data        请求参数,表单参数

        async       是否为异步请求,true为异步(默认),false是同步

        success     请求成功后的回调函数

        dataType    服务器返回的数据格式类型,取值:json、xml、text(默认)、HTML、JavaScript

        error       请求失败后的回调函数

    2、$.post()      是$.ajax()简洁版,固定提交方式是post

        第一个参数:请求地址

        第二个参数:请求参数,表单参数

        第三个参数:请求成功后的回调函数

        第四个参数:服务器返回的数据格式类型,取值:json、xml、text(默认)、HTML、JavaScript

    3、$.get()      是$.ajax()简洁版,固定提交方式是get

        第一个参数:请求地址

        第二个参数:请求参数,表单参数

        第三个参数:请求成功后的回调函数

        第四个参数:服务器返回的数据格式类型,取值:json、xml、text(默认)、HTML、JavaScript

    4、$.getJSON()   是$.ajax()简洁版,固定提交方式是get,数据传输格式固定为json

        第一个参数:请求地址

        第二个参数:请求参数,表单参数

        第三个参数:请求成功后的回调函数

    jQuery ajax推荐使用1、2

XML

一、什么是xml

    xml是一种数据格式,一堆的字符串,因xml可读性好,一般也作为配置文件,xml与计算机语言无关,Java、JavaScript

    C++都是支持xml的

二、xml格式

        <persons>

            <person id="1" name="刘备" sex="男" birthday="1999-08-16" address="成都" />

            <person id="1" name="曹操" sex="男" birthday="1999-08-16" address="成都" />

            <person id="1" name="孙权" sex="男" birthday="1999-08-16" address="成都" />

        </persons>

        <classes>

            <class id="1" name="QF2111">

                <student id="1" name="张三" sex="男">

                <student id="2" name="张三" sex="男">

            </class>

            <class id="2" name="QF2112">

                <student id="1" name="张三" sex="男">

                <student id="2" name="张三" sex="男">

            </class>

        </classes>

        优点:扩展性强,能支持多表,可读性好,解析容易,不容易出错

        缺点:内容过长,传输效率低

三、xml解析技术

    dom4j.jar

IO流

一、什么是IO流

    File:操作系统硬盘中的文件,比如:.txt、.doc、jpg

    流:与文件内容或者网络传输内容称为IO流,在java.io包下,流是有方向的,有输出流与输入流

二、File类

    1、什么是File类

        在Java中File代表一个文件或文件夹

    2、构造方法

            File(String path)                   根据路径创建文件或文件夹

        new File(File parent,String child);     在父目录下,创建子文件或文件夹

        new File(String parentPath,String child)在父目录下,创建子文件或文件夹

    3、常用属性

        File.pathSeparator      路径分隔符

        File.separator          文件分隔符

    4、常用方法

        createNewFile()         创建一个新文件,文件已存在返回false,否则返回true,不会覆盖

        mkdir()                 创建一个单层目录,目录已存在返回false,否则返回true,不会覆盖

        mkdirs()                创建一个多层目录,目录已存在返回false,否则返回true,不会覆盖

        exists()                判断文件或文件夹是否存在,存在返回true,不存在返回false

        delete()                删除文件或文件夹,删除文件夹只能删除空文件夹,删除多层文件夹,

                                只会删除最底层的文件夹,不会删除全部

        listFiles()             获取指定目录下的所有文件与文件夹

        getName()               获取文件名

        getPath()               文件路径

        getParent()             文件父目录

        length()                文件大小

        isFile()                判断是否是一个文件,如果是返回true,否则返回false

        isDirectory             判断是否是一个文件夹,如果是返回true,否则返回false

        isHidden                判断是否是一个隐藏文件,如果是返回true,否则返回false

*****三、IO流的分类

    1、按流的类型来分

        字节流 byte        字节输入流       InputStream         以字节的形式读取

                          字节输出流       OutputStream        以字节的形式写入

        字符流 char        字符输入流       Reader              以字符的形式读取

                          字符输出流       Writer              以字符的形式写入

    2、按读写的分类

        输入流             字节输入流       InputStream         以字节的形式读取

                          字符输入流       Reader              以字符的形式读取

        输出流             字节输出流       OutputStream         以字节的形式写入

                          字符输出流       Writer              以字符的形式写入

*****四、文件流

    1、文件流的类

    FileOutputStream        继承OutputStream      文件字节输出流     以字节的形式写入文件

    FileInputStream         继承InputStream       文件字节输入流     以字节的形式读取文件

    FileWriter              继承Writer            文件字符输出流     以字符的形式写入文件

    FileReader              继承Reader            文件字符输入流     以字符的形式读取文件

    2、文件流的作用

        文件流用来操作硬盘中文件内容,依赖File类

*****五、字节流与字符流

   1、字节流按字节大小读取,字符流是按字符个数读取

   2、字节流可以读取任何文件,字符流只能读取文本文件

   3、字符流的底层是字节流

   注:读写文本建议使用字符流,其他文件使用字节流

debug

1、设置断点

2、使用debug模式运行

3、F8是下一步执行

4、F9是执行到下一断点,如果没有下一个断点就会执行完毕

*****六、字符流与字节流的转换

    1、OutputStreamWriter        继承Writer        本身是一个字符流        字符流通向字节流的桥梁

        写入的内容是字符,自动转成字节形式写入

    2、InputStreamReader         继承Reader        本身是一个字符流        字节流通向字符流的桥梁

        写入的内容是读取,自动转成字节形式读取

七、RandomAccessFile(随机读写文件)

    RandomAccessFile可以随机读写文件,底层是以字节形式写入与读取

八、缓冲流

    1、缓冲流的分类

        BufferedInputStream       字节缓冲输入流         缓冲区默认大小是8kb      字节读取

        BufferedOutputStream      字节缓冲输出流         缓冲区默认大小是8kb      字节写入

        BufferedReader            字符缓冲输入流         缓冲区默认大小是8kb      字符读取

        BufferedWriter            字节缓冲输出流         缓冲区默认大小是8kb      字符写入

    2、缓冲流的作用

        缓冲流是用来提高读写效率,减少IO读写保护硬盘,先把内容写入到缓冲区(数据结构),缓冲区写满后,再同步到

        文件中,如果缓冲区没有写满,通过close()方法进行同步

        注:如果一个文件需要持续的写入或读取,建议使用缓冲流

九、数据流

    1、什么是数据流

        数据流一般用于网络传输,针对数据类型传输的流,数据流只有字节流

    2、数据流的类

        DataInputStream         数据字节输入流             读取

        DataOutputStream        数据字节输出流             写入

十、对象流

    1、什么是对象流

        对象流可以把对象写入到硬盘中,然后可以从硬盘中读取,是java创建对象的一种方式

    2、对象流的类

        ObjectInputStream       对象输入流          把对象从硬盘读取到内存中    java创建对象的一种

        ObjectOutputStream      对象输出流       序列化         把对象从内存写入到硬盘中

        注:1、被写入的对象必须实现java.io.Serializable接口,否则会报错,这是一个空接口

           2、被写入的对象属性一旦赋值,那么属性的类型也必须实现java.io.Serializable接口

           以下系统类都已实现java.io.Serializable接口

                八大基本数据类型包装

                String

                Date

                集合类(List、Set、Map)

十一、属性文件(.properties)

    .properties文件是一个属性文件,可以用来做配置文件

    spring boot框架使用的就是.properties文件做配置文件

多线程

一、什么是线程

    线程是程序最小执行单位,独立可运行的调度单元,是CPU最小执行单位,CPU就是用来处理线程的,在一个程序

    中不同的线程完成不同的任务,称为多线程,软件最小执行单位就是线程。

二、程序、进程、线程

    程序:一段静态代码

    进程:进程就是程序一次正常的运行过程,从代码的加载到最后一句代码的运行,整个过程就是进程的生命周期

    线程:线程是进程中独立、可调配的单元,最小的执行单位

    1、程序与进程的关系

        一个程序一般产生一个进程,但是也可以产生多个进程,一个进程只能属于一个程序

    2、进程与线程的关系

        一个进程拥有多个线程,一个线程只能属于一个进程

    注:一个程序至少有一个线程,这个线程称为主线程,其他都是子线程,Java应用程序的main方法,就是主线程

        有程序一不定有进程,有进程一定有程序

        有进程至少有一个线程,有线程一定有进程

*****三、线程的创建

    1、继承Thread类

        Thread th = new Thread();

        th.start();    //启动线程

    2、实现Runnable接口

        Thread th = new Thread(new Runnable());

        th.start();   //启动线程

    3、两种创建方式的区别

        a、Thread类本身实现了Runnable接口,Runnable接口是线程的根接口

        b、使用Runnable接口创建线程,还是要依赖Thread类,因为Runnable接口没有start()方法

        c、一个类要继承线程,又要继承其他类,这个时候用Runnable接口,因为类是单继承,

           如果一个类只继承线程类,就使用Thread类

*****四、线程的生命周期

    1、创建:线程对象被构造

    2、启动(就绪):线程对象调用start()方法,排队申请CPU资源

    3、运行:CPU处理线程,进入run()方法

    4、中断:遇到sleep()方法

    5、死亡:运行完run()方法,线程就会死亡

    线程生命周期过程

    情况一:创建--->启动--->运行--->死亡

    情况二:创建--->启动--->运行--->中断--->就绪--->运行--->中断--->就绪--->...--->死亡

    情况二比较多

*****五、线程状态

    1、新建(NEW):线程对象被构造,没有调用start()方法

    2、运行(RUNNABLE):从调用了start()方法到线程运行run()方法都处于这个状态

    3、阻塞(BLOCKED):线程遇到同步锁,其他线程在锁外面等待,处理这个状态

    4、等待(WAITING):无时间等待,线程遇到了wait()方法

    5、等待(TIME_WAITING):有时间的等待,线程遇到了sleep(long millis)、wait(long millis)方法

    6、死亡(TERMINATED):线程运行完run()方法,线程已经死亡

*****六、程序的主线程

    主线程是程序的入口与闭口,主线程一旦死亡,程序就会终止,进程就会消失。

    主线程代码执行完毕,子线程没有执行完毕,主线程不会死亡,等待子线程执行完毕之后,主线程才会死亡

七、线程的休眠与中断休眠

    线程休眠:Thread.sleep(long millis)            时间单位是毫秒

    中断休眠:interrupt()

    注:sleep()是有时间的等待,一般不会使用interrupt()方法进行唤醒,时间到了自动唤醒,强制唤醒sleep()

        方法会抛出InterruptedException异常

        保证线程执行优先级 = 书写顺序 + 线程优先级

八、线程常用方法

    Thread类

        构造方法

            Thread()                       无参构造,创建一个线程对象

            Thread(String name)            创建一个线程对象,并且设置线程名称

            Thread(Runnable target)        根据Runnable对象创建线程

            Thread(Runnable target, String name)    根据Runnable对象创建线程,并且设置线程名称

        常用方法

            start()                  启动线程

            sleep(long millis)       静态方法,线程休眠,有等待时间

            interrupt()              中断线程的sleep

            getState()               获取线程状态

            stop()                   停止线程,杀死线程,已过时

            setPriority(int newPriority) 设置线程的优先级,最小是1,最大10,默认是5

            getPriority()            获取线程的优先级,最小是1,最大10,默认是5

            setName(String name)     设置线程的名称

            getName()                获取线程的名称

            currentThread()          静态方法,获取当前正在执行的线程

            yield()                  静态方法,当前线程把CPU资源让给优先级相同的其他线程,其他线程包括本身

            join()                   把多个线程连接在一起,第一个线程执行完毕,第二个线程才会被执行,

                                     把线程异步变成同步

        常用属性

            State                   静态属性,枚举类型,线程的状态

            MAX_PRIORITY            静态属性,线程最高优先级,值为10

            MIN_PRIORITY            静态属性,线程最低优先级,值为1

            NORM_PRIORITY           静态属性,线程默认优先级,值为5

    Runnable接口

        常用方法

            run()                 线程被CPU执行,自动进入此方法,此方法执行完毕,线程死亡

    Object类

        常用方法

            wait()                 线程无时间等待,只能通过其他线程唤醒

            wait(long timeout)     线程有时间等待,可以通过其他线程唤醒或者指定时间已过,时间单位:毫秒

            notify()               随机唤醒一个等待的线程

            notifyAll()            唤醒所有的等待线程

九、线程同步

    *****1、什么是线程不安全

        多个线程操作同一个对象的同一个全局属性,就会造成线程不安全。

        线程不安全,必须满足以下三个条件:

            a、必须是同一个对象

            b、必须改变同一个全局属性

            c、必须是多个线程操作

    *****2、同步锁(synchronized)作用

        在方法上增加synchronized关键字,就是给此方法增加一把同步锁,同步锁只允许一个线程进入此方法,

        其他线程在此方法外阻塞,线程进入方法后,这个方法就被锁住,只有等待此线程执行完方法,其他线程

        才能进入此方法。

        总结:同一个时刻只允许一个线程进入方法

十、线程安全与不安全的对象

    线程安全对象                   线程不安全对象

    StringBuffer                   StringBuilder

    HashTable                      HashMap

    Vector                           ArrayList

    线程安全对象:对象创建比较费时,消耗内存大,执行效率低,安全性高,重量级对象

    线程不安全对象:对象创建比快,消耗内存小,执行效率高,安全性低,轻量级对象

    局部变量建议使用线程不安全对象

    全局变量建议使用线程安全对象

十一、线程的等待与恢复

    wait()                 线程无时间等待,只能通过其他线程唤醒

    wait(long timeout)     线程有时间等待,可以通过其他线程唤醒或者指定时间已过,时间单位:毫秒

    notify()               随机唤醒一个等待的线程

    notifyAll()            唤醒所有的等待线程

    wait()方法不稳定,必须结合同步锁使用

*****十二、sleep()与wait()区别

    1、sleep()方法是Thread类的,wait()是Object类

    2、sleep()方法不需要结合同步锁,wait()方法一定要结合同步锁

    3、sleep()放弃CPU资源,但不会释放同步锁

       wait()放弃CPU资源,并且释放同步锁

    4、sleep()方法必须给出唤醒时间,是有时间的等待,也可以通过interrupt()方法强制唤醒,并且会抛出异常

       wait()方法给出唤醒时间,是有时间的等待,不给出唤醒时间,是无时间等待,可以使用notify()

       或notifyAll()进行唤醒,唤醒不会抛出异常

*****十三、单例模式

    1、什么是单例模式

        一个类只能有一个对象,称为单例模式

    2、单例模式的优缺点

        优点:只创建一个对象,节约内存,提高执行效率

        缺点:多线程操作单例,会造成线程不安全

    3、单例模式种类

        1、懒汉模式

        2、饿汉模式

        3、枚举

        4、双重检查

        5、静态内部类

        效率由高到底排列:

            静态内部类 > 饿汉模式 > 枚举 > 双重检查 > 懒汉模式

*****十四、synchronized使用注意事项

    1、动态方法的 synchronized,锁的是当前对象

    2、静态方法的 synchronized,锁的是当前类的字节码

    3、sleep 让出 CPU 资源,不会释放同步锁

    4、wait 让出 CPU 资源,并且释放同步锁

    5、同步锁必须锁同样的东西才会有效

    6、synchronized方法会互相影响,线程进入一个对象的synchronized方法后,

       其他相同类型的synchronized方法无法进入,大大的影响效率,但可以保证线程安全

*****十五、线程的七种同步方式

    1、同步方法,使用synchronized关键字修饰方法

    2、同步代码块,使用synchronized关键字修饰语句块,synchronized必须锁一个公共变量,

       这个公共变量必须是引用类型,可以是当前对象或者类的字节码

    3、特殊域变量,使用volatile修饰变量,能保证获取此变量的最新值,保证变量的可见性,

       是一种无锁机制

    4、重入锁,JDK提供的第三方锁,不受wait()方法的影响,java.util.concurrent.locks.ReentrantLock

       lock()     获取锁

       unlock()   释放锁

    5、线程变量(ThreadLocal),把全局变量写成局部变量,交个ThreadLocal管理,set方法赋值,get方法取值

       单例对象多例属性

    6、变量的原子性实现线程同步,把变量的赋值过程(读取、修改、写入)看成一个整体,要么一起成功,要么一起失败

    7、阻塞队列,队列是数据结构的一种,特点是:先进先出,后进后出

*****十六、volatile与synchronized区别

    变量赋值线程安全必须保证俩个方面:一是变量的可见性,二是变量的原子性

    volatile关键字只保证了变量的可见性,没有原子性,他是一种无锁机制,不能保证线程安全,

    但是不会造成线程阻塞,是轻量级的

    synchronized关键字保证了可见性和原子性,它是一种有锁机制,可以保证线程安全,

    会造成线程阻塞,是重量级的

    volatile只能修饰变量

    synchronized修饰方法和代码块

    volatile效率会比synchronized高

十七、守护线程

    3、守护线程的创建

        Thread daemon = new Thread();

        daemon.setDaemon(true);

    4、什么是GC

        GC是垃圾回收机制,JDK启动时,会启动一个守护线程,轮询JVM中的对象,发现对象超出作用域,

        没有被引用,就会被回收,使用的分析算法有:可达性分析法、引用计数法、标记清除法等

十八、线程池(pool)

    1、什么是线程池

        多个线程绑定在一起统一管理,形成线程池,线程池统一管理线程的创建、使用、回收

    2、线程池的分类

        在JDK中提供了四个线程池,通过java.util.concurrent.Executors类创建,分别如下:

        a、可缓存的线程池,任务超时会新增新的线程

            ExecutorService service =  Executors.newCachedThreadPool();

        b、固定大小的线程池,执行任务平均分配

            ExecutorService service =  Executors.newFixedThreadPool(5);

        c、固定大小的线程池,支持定时任务

            ScheduledExecutorService service =  Executors.newScheduledThreadPool(5);

        d、单线程池

            ExecutorService service = Executors.newSingleThreadExecutor()

反射

一、什么是反射

    在Java中通过类的字节码反射出类中的信息,包括:类、包、属性、方法、继承、实现、构造等

    反射在JDK中java.lang与java.lang.reflect包下

    作用:代码的通用性与扩展性

二、Class类

    1、什么是Class类

        在反射中Class类代表一个类或接口,其实就是字节码,在Java数据类型中称为类类型

    *****2、Java数据类型有哪些

        a、基本数据类型(八种)

        b、引用数据类型

            Ⅰ、类

            Ⅱ、接口

            Ⅲ、类类型(Class)

            Ⅳ、枚举

            Ⅴ、注解

            Ⅵ、数组

    3、类类型获取方式

        Class cla = 类名.class

        Class cla = 对象名.getClass();         getClass()是Object类的方法

        Class cla = Class.forName("类的完整路径")

    4、Class类的常用方法

            getSimpleName()         获取类名

            getName()               获取类的完整路径

            newInstance             创建新的对象,默认调用无参构造

            getSuperclass()         获取父类的类类型

            getInterfaces()         获取父接口的类类型

三、Filed类

    1、什么是Filed类

        在Java反射中Filed类代表类中的一个属性,可以通过类类型获取

    2、获取Field对象

        cla.getDeclaredField(String name)       根据属性名获取本类中的单个属性

        cla.getDeclaredFields()                 获取本类所有属性

        cla.getField(String name)               根据属性名获取父类或父接口中的public属性

        cla.getFields()                         获取父类或父接口中的所有public属性

    3、Field类常用方法

        getName()                               获取属性名

        getType()                               获取属性数据类型

        getModifiers()                          获取属性的访问修饰符

        setAccessible(boolean flag)             设置变量是否能访问,为true允许访问

                                                为false部允许访问,默认为false(属性默认只能访问public修饰的)

        set(Object obj,Object value)            设置属性值,静态属性,第一个参数为null

        get(Object obj)                         获取属性值,静态属性,参数为null

四、Method类

    1、什么是Method

        在Java反射中Method类代表类中的一个方法,可以通过类类型获取

    2、获取Method对象

        cla.getDeclaredMethod(String name,Class<?>...parameterTypes)

            根据方法名与参数列表获取本类中指定方法

        cla.getDeclaredMethod()

            获取本类中的所有方法

        cla.getMethod(String name,Class<?>...parameterTypes)

            根据方法名与参数列表获取指定public方法,包括:本类、父类、父接口

        cla.getMethod()

            获取类中所有public方法包括:本类、父类、父接口

    3、Method类常用方法

        getName()           获取方法名

        getModifiers()      获取方法的修饰符

        getReturnType()     获取返回值类型

        getParameterCount() 获取参数列表个数

        getParameterTypes() 获取参数列表类型

        getExceptionTypes() 获取异常类型

        setAccessible(boolean flag) 设置方法是否能访问,为true允许访问

                                    为false不允许访问,默认false

        invoke(Object obj,Object...args)    执行方法,第一个参数:调用对象

                                                    第二个参数:方法的参数值

                                            执行静态方法,第一个参数为null

五、Constructor类

    1、什么是Constructor类

        在Java反射中Constructor类表示类中的一个构造方法,可以通过类类型获取

    2、获取Constructor对象

        cla.getConstructor(Class<?>...parameterTypes)   根据参数列表获取指定的构造方法

        cla.getConstructors()                           获取类中的所有构造方法

    3、Constructor类常用方法

        getName()                       获取构造方法名

        getModifiers()                  获取构方法的修饰符

        getParameterCount()             获取参数列表的个数

        getParameterTypes()             获取参数列表类型

        getExceptionTypes()             获取异常类型

        newInstance(Object...parameter) 调用指定的构造方法创建对象

六、java中T的使用

    1、什么是T

        T是一个关键字,泛型与Object很像,可以接收任何引用类型,而且不需要强制装换,

        比Object强制转换成其他类型效率高

    2、T的定义

        a、定义在类名上,整个类有效,静态方法不能使用

            public class 类名<T> {

            }

        b、定义在方法上,整个方法有效,适用于任何方法,定义<T>必须写在返回值之前

            public <T> T 方法名{

            }

七、克隆

    1、java中变量的赋值都是栈内存赋值,基本数据类型是值赋值,引用数据类型是指针赋值,

       基本数据类型变量更改,不会影响其他变量,引用数据类型变量更改,会影响其他赋值的变量,

        其中有九个引用数据类型是值赋值,更改不会影响其他变量,分别如下:

        八大基本数据类型的包装类 + String

    2、什么是对象克隆

        对象的克隆只针对引用数据类型,基本数据类型没有克隆,对象克隆是重新分配一片新的内存空间,

        把对象的内容复制到新的内存空间,克隆的对象不会相互影响,是Java创建对象的一种方式

    *****3、java创建对象的方式

        a、new +构造

        b、反序列化

        c、反射

        d、克隆

    *****4、对象克隆方式

        a、浅度克隆:只会克隆对象本身,对象的属性不会克隆

        b、深度克隆:会克隆对象本身,对象属性也会克隆

    5、对象克隆的步骤

        a、克隆对象的类必须实现java.lang.Cloneable接口

        b、重写clone()方法

        c、在clone()方法中,使用super关键字调用Object中的clone()方法,返回自身对象

八、Object类中的方法

    1、反射

        getClass()              获取对象的类类型

    2、克隆

        clone()                 对象的克隆

    3、线程

        wait()                  线程等待

        notify()                随机唤醒一个等待线程

        notifyAll()             唤醒全部等待的线程

    4、对象比较

        equals()                比较俩个对象内容是否相同

        hashCode()              获取对象的哈希码

    5、GC

        finalize()              对象回收之前最后调用的方法

    6、String

        toString()              对象字符串表示

九、注解

    1、注解的作用

        用来做配置信息,可以替代xml配置文件

    2、如何创建注解

        @Documented

        @Target

        @Retention

        public @interface 注解名{

        }

        创建注解时,必须写上@Documented、@Target、@Retention这三个注解

        @Documented             表示一个文档注解,空注解

        @Target                 表示这个注解写在什么地方,使用ElementType枚举来指定,取值如下

                                TYPE                           作用在类上

                                FIELD                          作用在属性上

                                METHOD                         作用在方法上

                                PARAMETER                      作用在参数上

                                CONSTRUCTOR                    作用在构造方法上

                                ANNOTATION_TYPE                作用在注解上

                                PACKAGE                        作用在包上

        @Retention              表示注解的生命周期范围,使用RetentionPolicy枚举来取值

                                SOURCE                          在源码中有效

                                CLASS                           在字节码中有效

                                RUNTIME                         在运行时有效

相关文章:

JQuery、JSON、AJAX、XML、IO流、多线程、反射核心知识点详解

JQuery 一、什么是JQuery JQuery是JavaScript的一个框架&#xff0c;对js的封装&#xff0c;使得js简单易学 优点&#xff1a; 1、不用考虑浏览器兼容性问题 2、jquery拥有强大的选择器&#xff0c;简化了js代码 3、jquery提供了很多系统函数&#xff0c;直接调用 二、版本 1.x…...

基于python的多种图像增强算法实现

基于python的多种图像增强算法实现 引言工具算法增强对比度直方图均衡化锐化图像噪声消除中值滤波均值滤波高斯滤波双边滤波增强对比度直方图均衡化总结全部资源引用引言 本项目使用python实现多种空域增强的图像增强算法,并使用了pyqt编写页面。通过点击不同页面的多种按钮,…...

Java前后端交互实现班级管理(查询)

1&#xff0c;数据库创建存储专业信息的表 2&#xff0c;后端&#xff1a; 连接数据库工具类DBUtil.java&#xff1a; package com.ffyc.webserver.util;import java.sql.*;public class DButils {static {try {Class.forName("com.mysql.cj.jdbc.Driver");} catch…...

论文速递 | 8月下旬9月上旬Operations ResearchManagement Science文章精选

编者按 本期我们选取了8月下旬及9月上旬Operations Research文章2篇&#xff0c;Management Science文章4篇期刊文章&#xff0c;着眼于各种不同场景下对于风险的预测、量化及管理&#xff0c;通过聚焦于风险这一主题&#xff0c;体系化地形成文章精选。 文章1 Computation of…...

DataBinding使用报错

val dataBinding DataBindingUtil.setContentView<ActivityMainBinding>(this,R.layout.activity_main)报错一&#xff1a; Unresolved reference: ActivityMainBinding 首先你要知道一个概念&#xff0c;ActivityMainBinding是DataBinding中的一种视频绑定&#xff…...

08Maven中的继承和聚合的作用

Maven中的继承 实际开发中对一个比较大型的项目进行了模块拆分 , 一个project下面创建了很多个modul, 每一个module都需要配置自己的依赖信息 开发中使用的同一个框架内的不同jar包&#xff0c;它们应该是同一个版本&#xff0c;所以整个项目中使用的框架版本需要统一 传统方…...

Ansible运行临时命令及常用模块介绍

目录 一.运行临时命令 1.基本语法格式 2.查看当前版本已安装的所有模块 二.ansible常见模块 1.command模块 2.shell模块 3.raw模块 4.script模块 5.file模块 参数列表&#xff1a; 示例&#xff1a; 6.copy模块 参数列表&#xff1a; 示例&#xff1a; 7.fetch模…...

EtherCAT报文-APRD(自动增量读)抓包分析

0.工具准备 1.EtherCAT主站 2.EtherCAT从站&#xff08;本文使用步进电机驱动器&#xff09; 3.Wireshark1.EtherCAT报文帧结构 EtherCAT使用标准的IEEE802.3 Ethernet帧结构&#xff0c;帧类型为0x88A4。EtherCAT数据包括2个字节的数据头和44-1498字节的数据。数据区由一个或…...

论文阅读:Seeing in Extra Darkness Using a Deep-Red Flash

论文阅读&#xff1a;Seeing in Extra Darkness Using a Deep-Red Flash 今天介绍的这篇文章是 2021 年 ICCV 的一篇 oral 文章&#xff0c;主要是为了解决极暗光下的成像问题&#xff0c;通过一个深红的闪光灯补光。实现了暗光下很好的成像效果&#xff0c;整篇文章基本没有任…...

将license验证加入到系统中

1.将ClientDemo下的cn文件夹的内容导入项目对应的java目录下。 2.将license-config.properties文件导入resources目录下。 3.在项目的pom.xml中添加如下依赖。 <properties><!-- Apache HttpClient --><httpclient>4.5.5</httpclient><!-- License…...

中断机制-interrupt和isInterrupted源码分析、中断协商案例

当前线程的中断标识为true&#xff0c;是不是线程就立刻停止&#xff1f; 答案是不立刻停止&#xff0c;具体来说&#xff0c;当对一个线程&#xff0c;调用interrupt时&#xff1a; 如果线程处于正常活动状态&#xff0c;那么会将该线程的中断标志设置为true&#xff0c;仅此…...

我与COSCon的故事【时光的故事】

曾经 2019年的时候&#xff0c;我还在日本读研究生&#xff0c;做一些物联网 (Internet of Things, IoT) 网络中的底层P2P (Peer to Peer) 通讯仿真模拟。这个方向是新来的Nguyen老师的新方向&#xff0c;它跟计算机强相关&#xff0c;但是很小众&#xff0c;实验室里也没有前辈…...

【科学文献计量】利用pybibx分析Scopus文献数据集(EDA,N-Grams,Cluster,Network analysis,NLP)

利用pybibx分析Scopus文献数据集 1 运行前准备1.1 数据集1.2 前置库2 加载库3 数据导入4 探索式数据分析,即EDA4.1 表格可视化4.2 词云图可视化4.3 N-Grams可视化4.4 文献聚类4.5 主题词演化4.6 桑基图可视化4.7 树图可视化4.8 作者生产力可视化5 网络可视化5.1 文献引用与被引…...

-带你看懂11种API类型及应用-

一起走进多样的API&#xff0c;多样的精彩 随着互联网行业的日益发展&#xff0c;API(Application Programming Interface)这个名词对于绝大多数来说都已不再陌生。然而&#xff0c;实际上&#xff0c;根据不同标准可以划分出不同类型的API。今天&#xff0c;让我们来走…...

集成友盟qq互联分享,导出风险问题处理

处理方案&#xff1a;移除 android:exported"true"即可。 注意友盟SDK QQ share 里默认配置是android:exported"true"&#xff0c;所以要覆盖即可。...

探索数字安全的卓越之选 - Digicert证书

在数字时代&#xff0c;数据安全和隐私保护变得尤为重要。无论是个人网站、电子商务平台还是大型企业&#xff0c;保护用户数据和建立信任都是至关重要的任务。在这个领域&#xff0c;Digicert是一个备受推崇的品牌&#xff0c;提供了卓越的数字证书解决方案&#xff0c;以确保…...

第五章 流程控制 Pro

五、流程控制 1、条件语句 一、if语句&#xff08;三种形式&#xff09; 1、单分支语句: if &#xff08;表达式&#xff09;语句&#xff1b; //表达式可以是任何表达式 0和非0 多条语句加{ }构成复合语句 2、双分支语句 if(表达式) 语句1&#xff1b; else 语句2…...

CSS之实现线性渐变背景

1. background: linear-gradient() background: linear-gradient是CSS中用于创建线性渐变背景的属性&#xff0c;这个属性允许你定义一个在元素的背景中进行渐变的效果&#xff0c;可以从一个颜色过渡到另一个颜色。 基本语法 background: linear-gradient(direction, color-…...

软考 系统架构设计师系列知识点之特定领域软件体系结构DSSA(7)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之特定领域软件体系结构DSSA&#xff08;6&#xff09; 所属章节&#xff1a; 第7章. 系统架构设计基础知识 第5节. 特定领域软件体系结构 相关试题 5. 特定领域软件架构&#xff08;Domain Specific Software Archite…...

CentOS-7网卡重启后关闭的解决方法

第一步查找网卡&#xff1a; ip addr 如下图&#xff1a; 于是发现网卡eth0。 第二步进入网卡配置目录并进行配置&#xff1a; cd /etc/sysconfig/network-scriptsvim ifcfg-eth0 第三步改配置如下图&#xff1a; 然后每次重启后网卡会自动启动。...

Linux CentOS7 用户组管理

Linux操作系统基于多用户的设计理念&#xff0c;允许多个用户同时使用系统资源。用户是登录系统并使用系统资源的个体&#xff0c;其都有自己的账户和密码。用户组是将众多用户归类为一组。Linux中的用户和用户组是系统安全和权限管理的基础。本文将探讨Linux中用户组的创建和管…...

C++算法:前缀和基础

相关 源码测试用例下载 https://download.csdn.net/download/he_zhidan/88430716 包括4个压缩包&#xff0c;初始代码&#xff0c;实现前缀和&#xff0c;实现前缀积&#xff0c;实现前缀异或。都是在前者的基础上修改的。 本博文是CSDN学院课程的讲义 https://edu.csdn.net/c…...

vue和react的区别

目录 1. 数据绑定 Vue React 2. 组件化 Vue React 3. 学习曲线 4. 状态管理 Vue React 5. 社区和生态系统 3. 学习曲线 4. 状态管理 Vue React 5. 生态系统 6. 社区和支持 7. 性能 8. 生产环境性能 9.语法和模板: 结论 当涉及到前端开发框架时&#xff0c…...

STM32 之 HAL 库串口 USART 丢数据及ORE卡死的解决方案

STM32 之 HAL 库串口 USART 丢数据及ORE卡死的解决方案_hal_uart_error_ore-CSDN博客...

递归最小二乘法RLS

参考&#xff1a;RLS递归最小二乘法(Recursive Least Squares)_hymwgk的博客-CSDN博客...

Apache Doris (三十九):Doris数据导出 - MySQL dump导出

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录...

【Nginx32】Nginx学习:随机索引、真实IP处理与来源处理模块

Nginx学习&#xff1a;随机索引、真实IP处理与来源处理模块 完成了代理这个大模块的学习&#xff0c;我们继续其它 Nginx 中 HTTP 相关的模块学习。今天的内容都比较简单&#xff0c;不过最后的来源处理非常有用&#xff0c;可以帮我们解决外链问题。另外两个其实大家了解一下就…...

vue3后台管理框架之集成sass

我们目前在组件内部已经可以使用scss样式,因为在配置styleLint工具的时候,项目当中已经安装过sass sass-loader,因此我们再组件内可以使用scss语法!!!需要加上lang="scss" <style scoped lang="scss"></style> 接下来我们为项目添加一些…...

无需付费开会员,一个Python程序实现PDF转高清图片

今天需要将一个PDF导出为图片&#xff0c;但是一般的在线转换网站导出的图片清晰度都不高&#xff0c;分辨率只有1241*1754&#xff0c;这就导致输出的图片放大后字体是有点模糊的&#xff0c;所以就想到了使用Python中的PyPDF2库来处理PDF文件&#xff0c;以及Pillow库来处理图…...

为分布式系统设计数据库

【squids.cn】 全网zui低价RDS&#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 数据库设计是微服务和云原生解决方案的关键因素&#xff0c;因为基于微服务的架构导致了数据的分布式。数据管理不再在一个单一的过程中发生&#xff0c;而是可以通过多…...

wordpress 登录 不同/百度搜索排名与点击有关吗

我们经常碰到的需求是希望页面某个元素固定在浏览器的一个位置&#xff0c;无论如何滚动滚动条&#xff0c;位置不变&#xff0c;就例如经常看到的弹出广告。方法一般是使用js控制&#xff0c;或者使用css。下面本篇文章给大家介绍一下CSS让元素固定不变的方法。在css中&#x…...

创建网站的过程/重庆网站搜索排名

精品文档精品文档PAGEPAGE11精品文档PAGE目录1.序言2.使用SmartstartCD引导服务器3.使用ADU检测服务器4.使用SDU检测服务器以下仅供参照序言ADU(ArrayDiagnosticsUtility)即阵列检测工具&#xff0c;能够检测硬盘以及阵列卡有关状态信息。SDU(ServerDiagnosticsUtility)即服务器…...

中小型网站设计哪家好/官网seo优化找哪家做

​​​​​​347. 前 K 个高频元素 本题还是细节处理比较多&#xff0c;我不太熟悉小顶堆大顶堆&#xff0c;这个题花了一个多小时在搞基础&#xff0c;具体细节在代码部分。 class Solution {public int[] topKFrequent(int[] nums, int k) {Map<Integer,Integer> map…...

和俄罗斯美女做的视频网站/百度公司招聘信息

展开全部计算机硬件由五妇部分构成&#xff1a;运算曝制奇储其入设备跟输掣。1、运算毗运算沏虱单元(ALU)、累加拼态寄存屁用寄存迫组成。算虱运算单元(ALU)的基本功能为加、妓、除四糟&#xff0c;与、磺、异贿辑操自及移位、侨操?p>计算机运行时&#xff0c;运算瀑踪奏由…...

企业网站建设 安全/关键词提取工具app

el-tree初始化的时候默认选中第一个 先查看https://cloud.tencent.com/developer/section/1489888按照以上方法能不能解决 首先设置node-key 然后设置default-expanded-keys <template><div class"system-tree"><el-tree :data"data" …...

怎么把网站提交给搜索引擎/手机百度账号申请注册

java中的输入总是伴随着异常(这是我的个人见解)&#xff0c;所以&#xff0c;用下面这个简单类&#xff0c;就简化了每次都要抛异常的问题。import java.io.*;public class Console{/**Reads a single double from the keyboard. Stops execution in case of error.return doub…...