zoukankan      html  css  js  c++  java
  • 编程专题

    编程专题

    1 I/O编程

    1.1 java.io

    一个方向一个维度

    两种对称

    输入和输出的对称性

       InputStream --- OutputStream

       Reader --- Writer

    字节和字符的对称性

       InputStream --- Reader

       OutputStream --- Writer

    两种设计模式

    适配器模式(转换流)和装换模式(处理流)

    只要输入流一定有read方法读取数据

    只要输出流一定有write方法写数据

    转换流 InputStreamReader (把字节流转换成字符流)

    处理流 DataInputStream、BufferedReader -> readLine

    文件操作 

    二进制文件 --- FileInputStream/FileOutputStream 

    字符文件 --- FileReader/FileWriter

    对象的序列化(串行化、腌咸菜)和反序列化

    序列化 --- ObjectOutputStream -> writeObject

    反序列化 --- ObjectInputStream -> readObject

    类必须要实现Serializable(标识接口)

    1.2 java.nio

    Buffer

    Channel

    Charset

    Selector

    1.3 nio.2

    Java 7升级的IO

    2 容器和泛型

    2.1 集合框架

    2.1.1 Collection

    List

    可以用索引来操作元素

    ArrayList读取效率高

    LinkedList增删元素效率高

    ArrayList

    LinkedList

    Set

    不允许有重复元素

    TreeSet会对元素进行排序

    需要元素是可比较对象(实现Comparable接口)

    HashSet会通过元素的哈希码来决定如何存取元素

    需要重写hashCode和equals方法

    TreeSet

    HashSet

    Queue

    2.1.2 Map

    键值对形式的容器,键是唯一的

    TreeMap

    HashMap

    2.1.3 遗留容器

    Properties

    通常用它来操作键值对形式的配置文件

    Properties对象的load方法可以从指定的输入流中加载配置文件中的键值对映射

    配置文件db.properties

    driver=com.mysql.jdbc.Driver

    url=jdbc:mysql://localhost:3306/demo

    uid=root

    pwd=123456 

    2.2 泛型

    2.2.1 泛型方法

    例如:

    public static <T> T foo(T x, T y) { }

    2.2.2 泛型类

    例如:

    class MyStack<T> {

    private List<T> content = new ArrayList<T>();

    public void push(T t){  }

    public T pop() { return null; }

    }

    2.2.3 泛型接口

    例如:

    public interface BaseDao<E, K> {

    public boolean save(E entity);

    public boolean deleteByPK(K pk);

    public boolean update(E entity);

    public List<E> findAll();

    public E findByPK(K pk);

    }

    3 异常机制

    一种在不打乱原有业务»˜的前提下,把程序在Ð行时可能出现的不正常状态处理掉的方式。异常机制是一种低耦合的处理Ð行时状况的手段

    异常相关的关键字

    throw (Throwable的子类型都可以被抛出)

    throws (为方法声明异常)

    try (将可能出现异常的代码保护起来)

    catch (捕获异常)

    finally (总是执行代码,用于释放外部资源)

    自定义异常

    继承Exception或者它的子类型

    受检异常和运行时异常(非受检异常)

    RuntimeException和它的子类型都是非受检异常

    常见的运行时异常

    NullPointerException

    ArrayIndexOutOfBoundsException

    NumberFormatException

    ClassCastException

    ArithmeticException

    NegativeArraySizeException

    IllegalArgumentException

    4 网络编程

    4.1 基于TCP

    4.1.1 服务器

    创建服务器

    1. 创建服务器套接字ServerSocket并绑定端口(端口是用来区分不同的服务的逻辑地址)

    2. 监听客户端的连接,调用ServerSocket对象的accept方法,该方法是阻塞方法,如果没有客户端连接到服务器则保持阻塞;如果监听到客户端连接,则返回Socket对象

    3.进行I/O操作。通过Socket对象的getInputStream方法可以得到输入流,调用read方法读取客户端的数据;通过getOutputStream方法可以得到输出流,调用write方法可向客户端发送数据

    4. 通信结束后调用Socket对象的close方法关闭客户端套接字

    通常我们需要创建多线程的服务器,即在监听到客户端连接后通过启动线程的方式来处理客户端的请求并对客户端的请求作出响应,主线程继续监听其他客户端的连接

    4.1.2 客户端

    创建客户端

    1. 创建Socket对象,指定服务器的IP地址和端口号

    2. 连接成功后,通过Socket对象的getInputStream和getOutputStream方法得到输入输出流,剩下的事情就是I/O操作

    3. 通过Socket对象的close方法关闭套接字

    I/O操作时可以使用处理流来简化I/O操作

    PrintStream 

    ---> new PrintStream(client.getOutputStream());

    DataInputStream

    ---> new DataInputStream(client.getInputStream());

    4.2 基于UDP

    不区分服务器和客户端,通信双方都是创建DatagramSocket和DatagramPacket

    DatagramPacket代表要收发的数据包,发送方的DatagramPacket对象中需要填写收信人的IP地址、端口号和信息的内容,接收方的DatagramPacket对象是一个空包,里面只需要有足够的缓冲区来接受发送方发送的数据

    DatagramSocket提供了send方法用于发送数据包,还提供了receive方法用于接收数据包

    4.3 java.net

    InetAddress  --- IP地址(寻址)

    URL --- 统一资源定位符(资源的位置信息)

    URLConnection --- (对网络资源的连接)

    5 多线程

    5.1 创建线程

    通过创建Thread类的对象并调用其start方法可以启动线程

    5.1.1 继承Thread类

    5.1.2 实现Runnable接口

    5.1.3 实现Callable接口

    Java 5+

    5.2 线程同步

    synchronized关键字

    用synchronized关键字修饰的方法只有一个线程能够进入

    synchronized放在对象上构造同步代码块(对象只有一个线程能够访问)

    Java 5+

    Lock ---> ReentrantLock (重入锁)

    lock方法 --- 加锁

    unlock方法 --- 解锁(建议放在finally代码块中)

    Semaphore(信号量)

    不恰当的同步可能导致死锁(deadlock)

    5.3 线程调度

    线程的生命周期

    Java 1.4-

    sleep

    yield

    join

    wait

    notify

    notifyAll

    Java 5+

    Condition 

    5.4 线程池

    Java 5

    ExecutorService接口 -->

          execute(Runnable)

    Executors工具类 -->

    newFixedThreadPool(int)

    newCachedThreadPool()

    池化技术(包括线程池、数据库连接池)是典型的用空间换时间的策略,因为对于计算机来说时间和空间是不可调和的矛盾,二者可以相互交换

    6 GUI编程

    6.1 AWT

    6.2 Swing

    6.2.1 常用的控件

    JLabel

    JButton / JRadioButton / JCheckBox

    JTextField / JTextArea / JPasswordField

    JComboBox

    JList / JTable / JTree

    JMenu / JMenuItem / JRadioButtonMenuitem / JCheckBoxMenuItem / JMenuBar / JPopupMenu / JSeparator

    JPanel / JScrollPane / JTabbedPane / JSplitPane

    JProgressBar / JEditorPane / JSlider

    6.2.2 布局管理器

    FlowLayout

    BorderLayout

    GridLayout

    CardLayout

    SpringLayout

    GroupLayout

    6.2.3 MVC架构模式

    MVC模式

    M --- Model模型 --- 数据

    V --- View视图 --- 呈现给用户的界面

    C --- Controller控制器 --- 连接模型和视图的桥梁

    MVC模式实现了视图和数据的分离

    6.3 事件处理机制

    6.3.1 ActionListener

    6.3.2 MouseListener / MouseMotionListener / MouseWheelListener

    MouseAdapter

    6.3.3 KeyListener

    KeyAdapter

    6.3.4 WindowListener

    WindowAdapter

    7 反射

    通过对象还原类的信息,获得类的元数据

    8 JDBC

    8.1 核心API

    8.1.1 Driver

    8.1.2 DriverManager

    工具类

    通过getConnection(url, uid, pwd) 方法  ---> Connection

    url ---   jdbc:mysql://IP地址:端口号/数据库的名字

    uid --- 数据库的用户名

    pwd --- 用户名对应的口令

    8.1.3 Connection

    开启事务环境的方法:

    setAutoCommit(false) --- 开启事务

    commit() --- 提交事务

    rollback() --- 回滚事务

    setTransactionIsolation(常量) --- 设置事务隔离级别

    8.1.4 Statement

    PreparedStatement

    预编译语句:

    1. 性能好

    2. 使用更方便

    3. 防范SQL注射攻击

    CallableStatement

    调用存储过程的SQL语句对象

    8.1.5 ResultSet

    游标(结果集)

    next --- 取下一条记录

    8.2 性能优化

    8.2.1 抓取策略

    ResultSet对象的setFetchSize方法可以指定每次抓取多少条记录

    8.2.2 批处理

    PreparedStatement对象的方法

    addBatch --- 将语句添加到批处理

    executeBatch --- 执行批处理

    8.2.3 连接池

    创建连接和释放连接都需要经过TCP协议的三次握手,开销很大,为此可以事先创建好若干连接放入连接池中,需要连接的时候从连接池获取,用完以后归还给连接池,不创建也不释放连接以节省开销。这又是典型的用空间换时间的策略

    8.3 事务

    事务 ACID 特性

          原子性 --- 

    一致性 --- 事务完成后数据状态要一致

    隔离性 --- 不同的事务不能看到对方的中间状态

    持久性 --- 事务完成后改动会被持久化

    事务隔离级别

    脏读  --- 读到没有提交的事务的数据

    不可重复读 --- 再次读取无法读到被其他事务修改的数据

    幻读 --- 再次读取读到了其他事务提交的数据

    8.4 DAO模式

    DAO --- Data Access Object 数据访问对象

    以对象为单位进行增删改查的操作

    DAO的实现类封装了SQL语句和JDBC代码

    9 XML

    XML - eXtensible Markup Language 可扩展标记语言

    <?xml version="1.0" encoding="utf-8"?>

    <books>

       <book>

          <name>Java编程思想</name>

          <author gender="男">Bruce Eckel</author>

          <price>128.0</price>

       </book>

       <book>

          <name>Java面向对象程序设计</name>

          <author gender="女">孙卫琴</author>

          <price>38.0</price>

       </book>

    </books>

    1. 异构系统之间的数据交换 (被JSON取代)

    2. 作为配置文件(常用)

    Java操作XML推荐使用dom4j

     

  • 相关阅读:
    Mac终端运行java程序
    Mac上csv导入mysql提示错误[Error Code] 1290
    Mac终端使用mysql
    将spark默认日志log4j替换为logback
    Cocos2d-x 3.x部署到安卓
    Cocos2d-x 3.0 场景切换
    visual studio 未将对象引用设置到对象的实例
    C++ list用法
    减而治之
    递归
  • 原文地址:https://www.cnblogs.com/xieh/p/3798247.html
Copyright © 2011-2022 走看看