1. []URL的组成<协议>://<主机>:<端口>/<路径> .
    2. []线程的定义实例化和启动。
    3. []类的final变量初始化需要满足的条件.
    4. []管道通信,进程间的通信方式.
    5. []Java中的构造方法
    6. []Socket和ServerSocket的创建:http://www.cnblogs.com/rond/p/3565113.html
    7. []java中各个常用数据接口的继承关系:http://www.cnblogs.com/jing99/p/7057245.html
    8. []ArrayList和LinkList对比知识:http://yulon.iteye.com/blog/602556
    9. [] Java中异常的分类回答;https://blog.csdn.net/weixin_39382337/article/details/79438223
    10. [] PreparedStatement与Statement 的使用注意https://blog.csdn.net/u011161786/article/details/48394751http://www.cnblogs.com/raymond19840709/archive/2008/10/13/1309657.html
     
    URL的组成<协议>://<主机>:<端口>/<路径> :
    URL(Uniform Resource Locator) ,统一资源定位符,能够对因特网的资源进行定位。
    URL一般有四部分组成: <协议>://<主机>:<端口>/<路径> 
    现在最常用的<协议>为http协议。
    <主机>是指主机在因特网上的域名。主机号= ip地址+子网掩码.
    http协议的默认<端口>为80。
    <路径>是指要的文件的路径。
     
    线程的定义实例化和启动。
     
    一 、定义线程: 1、扩展java.lang.Thread类。 2、实现java.lang.Runnable接口。
    二、实例化线程: 1、如果是扩展java.lang.Thread类的线程,则直接new即可。
                     2、如果是实现了java.lang.Runnable接口的类,则用Thread的构造方法:
            Thread(Runnable target) 
            Thread(Runnable target, String name) 
            Thread(ThreadGroup group, Runnable target) 
            Thread(ThreadGroup group, Runnable target, String name) 
            Thread(ThreadGroup group, Runnable target, String name, long stackSize)
    三、启动线程: 在线程的Thread对象上调用start()方法,而不是run()或者别的方法。
     
     
    Final成员变量初始化需要满足的条件:
    类的final成员变量必须满足以下其中一个条件
     1、在构造函数中赋值
     2、初始化赋值
     
    管道通信,进程间的通信方式.
    管道实际上是一种固定大小的缓冲区,管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在于内存中。它类似于通信中半双工信道的进程通信机制,一个管道可以实现双向 的数据传输,而同一个时刻只能最多有一个方向的传输,不能两个方向同时进行。管道的容 量大小通常为内存上的一页,它的大小并不是受磁盘容量大小的限制。当管道满时,进程在 写管道会被阻塞,而当管道空时,进程读管道会被阻塞,
     
     
    Java中的构造方法
    构造方法的特点:
    1. 构造方法的方法名与类名相同
    2. 构造方法没有返回值类型,也不写void
    3. 构造方法可以重载
     
    构造方法的分类:显示的构造方法和隐式地构造方法
    1. 显示的构造方法:显示的写出构造方法时,系统不会提供默认的无参构造方法
    2. 隐式地构造方法:系统默认提供的无参构造方法
     
    代码块的优先级: 静态成员变量或静态代码块>main方法>非静态成员变量或非静态代码块>构造方法
    代码块的分类:
    静态代码块和实例代码块
    1. 静态代码块:static修饰的代码块,在类加载时执行,且只执行一次。因为类就加载一次了。
    2. 实例代码块:没有static修饰的代码块,创建对象时执行,每创建一次对象加载一次。
    实例代码块在执行构造方法之前执行。所以优先级高于构造方法。
     
     
     
    Socket和ServerSocket的创建:http://www.cnblogs.com/rond/p/3565113.html
    ServerSocket  (int port)
    创建一个serversocket 绑定在特定的端口
     
    Socket(InetAddress address, int port)
    创建一个socket流,连接到特定的端口和ip地址
     
    java中各个常用数据接口的继承关系参考:http://www.cnblogs.com/jing99/p/7057245.html
     
    其中Iterable接口是Collevtion接口的父类;
     
     
    1:认识和理解ArrayList和LinkedList
     
    ArrayList实现了List接口,它是以数组的方式来实现的,数组的特性是可以使用索引的方式来快速定位对象的位置,因此对于快速的随机取得对象的需求,使用ArrayList实现执行效率上会比较好. 
     
    LinkedList是采用链表的方式来实现List接口的,它本身有自己特定的方法,如: addFirst(),addLast(),getFirst(),removeFirst()等. 由于是采用链表实现的,因此在进行insert和remove动作时在效率上要比ArrayList要好得多!适合用来实现Stack(堆栈)与Queue(队列),前者先进后出,后者是先进先出.
     
    2:认识和理解之间的差别:
    遍历方式快慢比较: 
    访问速度的差异:ArrayList>>LinkList
    添加删除速度:LinkList>>ArrayList
     
    Throwable: 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。
    一:Error
    Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。
    二:Exception
    Java的异常分为两种,一种是运行时异常(RuntimeException),一种是非运行异常也叫检查式异常(CheckedException)。
    1、运行时异常不需要程序员去处理,当异常出现时,JVM会帮助处理。常见的运行时异常有:
    • ClassCastException(类转换异常)
    • ClassNotFoundException
    • IndexOutOfBoundsException(数组越界异常)
    • NullPointerException(空指针异常)
    • ArrayStoreException(数组存储异常,即数组存储类型不一致)
    • 还有IO操作的BufferOverflowException异常
    2、非运行异常需要程序员手动去捕获或者抛出异常进行显示的处理,因为Java认为Checked异常都是可以被修复的异常。常见的异常有:
    • IOException
    • SqlException
     
     
     
     
    1 、 PreparedStatement 接口继承 Statement , PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象。
    2 、作为 Statement 的子类, PreparedStatement 继承了 Statement 的所有功能。三种方法
          execute 、 executeQuery 和 executeUpdate 已被更改以使之不再需要参数
     
    3 、在 JDBC 应用中 ,应该始终以 PreparedStatement 代替 Statement. 也就是说 , 在任何时候都不要使用 Statement.
    基于以下的原因 :
    一 . 代码的可读性和可维护性 .
    虽然用 PreparedStatement 来代替 Statement 会使代码多出几行 , 但这样的代码无论从可读性还是可维护性上来说 . 都比直接用Statement 的代码高很多档次 :
    stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");//stmt 是 Statement 对象实例
     
    perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");
    perstmt.setString(1,var1);
    perstmt.setString(2,var2);
    perstmt.setString(3,var3);
    perstmt.setString(4,var4);
    perstmt.executeUpdate(); //prestmt 是 PreparedStatement 对象实例
     
    对于第一种方法可读性差 . 别说其他人去读你的代码 , 就是你自己过一段时间再去读 , 都会觉得伤心 .
     
    PreparedStatement 尽最大可能提高性能 .
        语句在被 DB 的编译器编译后的执行代码被缓存下来 , 那么下次调用时只要是相同的预编译语句就不需要编译 , 只要将参数直接传入编译过的语句执行代码中 ( 相当于一个涵数 ) 就会得到执行 . 这并不是说只有一个 Connection 中多次执行的预编译语句被缓存 , 而是对于整个 DB 中 , 只要预编译的语句语法和缓存中匹配 . 那么在任何时候就可以不需要再次编译而可以直接执行 . 而 statement 的语句中 , 即使是相同一操作 , 而由于每次操作的数据不同所以使整个语句相匹配的机会极小 , 几乎不太可能匹配 . 比如 :
    insert into tb_name (col1,col2) values ('11','22');
    insert into tb_name (col1,col2) values ('11','23');
    即使是相同操作但因为数据内容不一样 , 所以整个个语句本身不能匹配 , 没有缓存语句的意义 . 事实是没有数据库会对普通语句编译后的执行代码缓存 .
     
    当然并不是所以预编译语句都一定会被缓存 , 数据库本身会用一种策略 , 比如使用频度等因素来决定什么时候不再缓存已有的预编译结果. 以保存有更多的空间存储新的预编译语句 .
     
    三 . 最重要的一点是极大地提高了安全性 .
     
    即使到目前为止 , 仍有一些人连基本的恶义 SQL 语法都不知道 .
    String sql = "select * from tb_name where name= '"+varname+"' and passwd='"+varpasswd+"'";
    如果我们把 [' or '1' = '1] 作为 varpasswd 传入进来 . 用户名随意 , 看看会成为什么 ?
     
    select * from tb_name = ' 随意 ' and passwd = '' or '1' = '1';
    因为 '1'='1' 肯定成立 , 所以可以任何通过验证 . 更有甚者 :
    把 [';drop table tb_name;] 作为 varpasswd 传入进来 , 则 :
    select * from tb_name = ' 随意 ' and passwd = '';drop table tb_name; 有些数据库是不会让你成功的 , 但也有很多数据库就可以使这些语句得到执行 .
     
    而如果你使用预编译语句 . 你传入的任何内容就不会和原来的语句发生任何匹配的关系 . 只要全使用预编译语句 , 你就用不着对传入的数据做任何过虑 . 而如果使用普通的 statement, 有可能要对 drop,; 等做费尽心机的判断和过虑 .
     

Java新知识系列 四的更多相关文章

  1. Java新知识系列 七

    抽象类和接口的区别和特点 java的JDK中包含的五个工具 编译型语言和解释型语言 Java和C++的区别` 常见的ASCII的值 Forward和Redirect之间的对比 Web Service ...

  2. java新知识系列 一

    内联函数: 所谓内联函数就是指函数在被调用的地方直接展开,编译器在调用时不用像一般函数那样,参数压栈,返回时参数出栈以及资源释放等,这样提高了程序执行速度. 对应Java语言中也有一个关键字final ...

  3. java新知识系列 五

    类方法和对象方法的使用限制 abstract修饰符的注意 静态变量只能在类主体中定义,不能在方法中定义 线程的各种方法差别 关于抽象类 什么是中间件 Servlet生命周期的三个主要方法 可以修饰类的 ...

  4. java新知识系列 三

    1:trycatch中需要注意的地方. 2:ServletConfig以及ServletContext对象. 3: Spring事务属性的种类:   传播行为.隔离级别.只读和事务超时. 5:关于程序 ...

  5. java新知识系列 二

      1:数据库事务隔离以及事务隔离的级别 数据库事务隔离: 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别:为了解决更新丢失,脏读,不可重读(包括虚读和幻读)等问题在标准SQL规 ...

  6. Java新知识系列 八

    什么是死锁,死锁的原因和必要条件:       []什么是死锁,死锁的原因和必要条件: 死锁:死锁的原因在于进程在等待其它进程占有的某些资源,而自身的资源又被其它进程等待着,造成了死循环. 出现死锁的 ...

  7. java新知识系列 六

    sleep和wait的区别有: Servlet方法的使用 方法重写的规则,以及两同两小一大原则: DispatcherServlet的解析 依赖注入DU和控制反转Ioc AOP和OOP的区别 Spri ...

  8. java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现

    java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析 ...

  9. Java基础知识系列——String

    最近晚上没有什么事(主要是不加班有单身),就复习了一下Java的基础知识.我复习Java基础知识主要是依据Java API和The Java™ Tutorials. 今天是第一篇,复习了一下Strin ...

随机推荐

  1. 查看和修改Linux服务器的时区和时间

    一.查看和修改Linux的时区1. 查看当前时区 命令 : "date -R" 2. 修改设置Linux服务器时区方法 A 命令 : "tzselect" 方法 ...

  2. 写给大忙人的centos下ftp服务器搭建(以及启动失败/XFTP客户端一直提示“用户身份验证失败”解决方法)

    注:个人对偏向于底层基本上拿来就用的应用,倾向于使用安装包,直接yum或者rpm安装:而对于应用层面控制较多或者需要大范围维护的,倾向于直接使用tar.gz版本. 对于linux下的ftp服务器,实际 ...

  3. [Swift]LeetCode320. 通用简写 $ Generalized Abbreviation

    Write a function to generate the generalized abbreviations of a word. Example: Given word = "wo ...

  4. [Swift]LeetCode667. 优美的排列 II | Beautiful Arrangement II

    Given two integers n and k, you need to construct a list which contains n different positive integer ...

  5. VIVO 手机重力传感器踩坑记录

    手上的 vivo-x9 手机传感器模式下的旋转效果有误,经查发现是 Gravity sensor 返回的数据有误,和其他机型返回的数据相反的. 参考 Gravity 的说明: A three dime ...

  6. 正交矩阵、EVD、SVD

    原文地址:https://www.jianshu.com/p/1004dd342fe2 一.正交矩阵 二.EVD 特征值分解(Eigen Value Decomposition, EVD). 对于对称 ...

  7. Underscore.js 源码学习笔记(下)

    上接 Underscore.js 源码学习笔记(上) === 756 行开始 函数部分. var executeBound = function(sourceFunc, boundFunc, cont ...

  8. MySQL开启远程连接权限

    对于我们刚开始安装的mysql或者mariadb来说,默认是不开启远程连接的.所以需要我们手动开启远程连接的权限.如果你是使用docker安装mysql那需要先进入容器中,这里就不讲如何进入容器了,百 ...

  9. 【Spark篇】---Spark中资源和任务调度源码分析与资源配置参数应用

    一.前述 Spark中资源调度是一个非常核心的模块,尤其对于我们提交参数来说,需要具体到某些配置,所以提交配置的参数于源码一一对应,掌握此节对于Spark在任务执行过程中的资源分配会更上一层楼.由于源 ...

  10. Hbase篇--Hbase和MapReduce结合Api

    一.前述 Mapreduce可以自定义Inputforma对象和OutPutformat对象,所以原理上Mapreduce可以和任意输入源结合. 二.步骤 将结果写会到hbase中去.  2.1 Ma ...