【JAVA软件开发】

java考试复习

JAVA软件开发复习

二 程序实现

链表  约瑟夫环  二叉树

1.给出数据结构定义

2.给出java实现代码

public class BST<E extends Comparable<E>>{//排序接口
class Node{
public E e;
public Node left,right;//没有指针

public Node(E e){
this.e=e;
left=null;
right=null;
}
public Node(){
left=null;
right=null;
}

}
private Node root;

private int size;

public BST(){
root=null;
size=0;
}
public int size(){return size;}

public void insert(E e){
root=insert(root,e);
}
public Node insert(Node node,E e){
if(node==null){
size++;
return new Node(e);
}
if(e.compareTo(node.e)<0){
node.left=insert(node.left,e);
}else if(e.compareTo(node.e)>0){
node.right=insert(node.right,e);
}
return node;
}
public boolean visit(E e){return visit(root,e);}
public boolean visit(Node node,E e){
if(node==null){
return false;
}
if(e.compareTo(node.e)<0){
return visit(node.left,e);
}else if(e.compareTo(node.e)>0){
return visit(node.right,e);
}else{
return true;
}
}
public Node search(E e){
if(root==null){
return null;
Node cur=root;
while(cur!=null)
{
if(cur.e==e){
return cur;
}else if(cur.e.compareTo(e)<0){
cur=cur.left;
}else{
cur=cur.right;
}

}
return null;
}
}
}

三 简答

1.什么是XML
“XML 指可扩展标记语言(EXtensible Markup Language)。 XML 是一种很像HTML的标记语言。 XML 的设计宗旨是传输数据,而不是显示数据。”
区别:1、XML用于传输和存储数据,侧重于数据;HTML用于显示数据并关注数据的外观。2、XML区分大小写;HTML不区分大小写。3、XML强制要求使用结束标记;而HTML中没有强制要求使用结束标记。4、XML保留空格;HTML不保留空格。
XML是一种传输数据的通讯语言
数据库提供的是强有力的数据存储和分析能力
XML仅仅是展示数据 极其简单
场景1:
为了不阻塞主线程,启动其他线程来做耗时的事情。
比如app开发中耗时的操作都不在UI主线程中做。
场景2:
实现响应更快的应用程序,即主线程专门监听用户请求,子线程用来处理用户请求。
场景3:
某种优先级虽然很低的服务,但要不定时去做 Jvm的垃圾回收。
场景4:
某种任务,虽然耗时,但是不耗CPU的操作,开启多个线程,效率显著提高。
servlet多线程 web处理请求  tomcat后续的处理扔给一个新的线程来处理
SQL server jdbc通信方法是 SOCKET

面向对象的三大基本特征

封装 继承 多态
可维护性差 重用性差  不能满足用户需求不断变化的需要

Java解释器的执行过程
运行JVM字节码的工作是由解释器来完成的。解释执行过程分三
步进行:代码的装入、代码的校验和代码的执行。装入代码的
工作由“类装载器”(class loader)完成。
数组类型是用 new 分配的引用类型
myArray.length // yes 
• myArray.length() // error
构建型 结构型 行为型
策略模式 行为型
迭代器模式 行为型
装饰模式 结构型
命令模式 行为型

三类设计模式

创建性模式

这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的

方式,而不是使用 new 运算符直接实例化对象。

✓ 单例、原型、工厂方法、抽象工厂、建造者

结构型模式

这些设计模式如何将类或对象按某种布局组成更大的结构,

关注类和对象的组合。继承的概念被用来组合接口和定义组

合对象获得新功能的方式。

✓ 代理、适配器、桥接、装饰、外观、享元、组合

行为型模式

这些设计模式用于描述类或对象之间怎样相互协作共同完成

单个对象都无法单独完成的任务,以及怎样分配职责,特别

关注对象之间的通信 。

✓ 模板方法、策略、命令、职责链、状态、观察者、中介

者、迭代器、访问者、备忘录、解释器

接口和抽象类有什么共同点和区别?
共同点:
1.都不能被实例化
2.都可以包含抽象方法
3.都可以有默认实现的方法(JAVA8可以用default关键字在接口中定义默认方法)
区别:
1.接口主要用于对类的行为进行约束
2.抽象类主要用于代码复用,强调的是所属关系
3.一个类只能继承一个类,但是可以实现多个接口
4.接口中的成员变量只能是public static final类型不能被修改且必须有初始值
而抽象类的成员变量默认default,可在子类中被重新定义,也可被重新赋值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-upncoF6C-1681922785726)(https://snailclimb.gitee.io/javaguide/docs/java/basis/images/shallow&deep-copy.png)]

==和equals()的区别
基本类型 == 比较的是值
引用数据类型  == 比较的是对象的地址

PS:因为 Java 只有值传递,所以,对于 == 来说,不管是比较基本数据类型,还是引用数据类型的变量,其本质比较的都是值,只是引用类型变量存的值是对象的地址。

String 中的 equals 方法是被重写过的,因为 Object 的 equals 方法是比较的对象的内存地址,而 String 的 equals 方法比较的是对象的值。
String
1.操作少量数据:String
2.单线程操作字符串缓冲区下操作大量数据:StringBuilder
3.多线程操作字符串缓冲区下操作大量数据:StringBuffer

String s1=new String(“abc”);

创建1或2个字符串对象

区别是:print()输出完毕后不换行,而println()输出完毕后会换行,因此println()不输出任何东西时,就输出一个换行符。
Java 泛型
Java 泛型(Generics) 是 JDK 5 中引入的一个新特性。使用泛型参数,可以增强代码的可读性以及稳定性。

编译器可以对泛型参数进行检测,并且通过泛型参数可以指定传入的对象类型。比如 ArrayList<Persion> persons = new ArrayList<Persion>() 这行代码就指明了该 ArrayList 对象只能传入 Persion 对象,如果传入其他类型的对象就会报错。
并且,原生 List 返回类型是 Object ,需要手动转换类型才能使用,使用泛型后编译器自动转换。
反射
优点 : 可以让咱们的代码更加灵活、为各种框架提供开箱即用的功能提供了便利
缺点 :让我们在运行时有了分析操作类的能力,这同样也增加了安全问题。比如可以无视泛型参数的安全检查(泛型参数的安全检查发生在编译时)。
IO
什么是序列化?什么是反序列化?
如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。

碎碎念:
类型要先new才能使用
接口不能实例化
package xx;
import org.junit.Test;
public class Target{
@Test
    public void fun1Test(){
        Target test1=yy;
        assertEquals(1.test1.fun(1),0.001);
        assertEquals("neg",test1.toString());
    }
}

JDBC

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCUtils{
    public static String URL="jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8";
    public static String DRIVER ="com.mysql.cj.kdbc.Driver";
    public static String USER ="root";
    public static String PWD ="cugSE";
    
    public static Connection getConn(){
        Connection con =null;
        try{
            Class.forName(DRIVER);
            con=DriverManager.getConnection(URL,USER,PWD);
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }catch(SQLException e){
            e.printStackTrace();
        }
        return con;
    }
    public static void close(Connection con,PrepareStatement pstmt,ResultSet rs){
        try{
            if(rs!=null){
                rs.close();
            }
            if(pstmt!=null){
                pstmt.close();
            }
            if(con!=null){
                con.close();
            }
        }catch(SQLException e){
            e.printStackTrace();
        }
    }
}
二、对象回收的时机
通常有两种方法:

引用计数法
可达性分析算法
引用计数算法是垃圾收集器中的早期策略。在对象中添加一个引用计数器,每当有一个地方 引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可 能再被使用的。
引用计数算法(Reference Counting)虽然占用了一些额外的内存空间来进行计数,但 它的原理简单,判定效率也很高,在大多数情况下它都是一个不错的算法。

标记-清除算法

标记-复制算法

标记-整理算法

库和框架的区别
库的英语为 Library ( 简写 Lib ),框架的英语为 Framework。
库是将代码集合成的一个产品,供程序员调用。面向对象的代码组织形式而成的库也叫类库。面向过程的代码组织形式而成的库也叫函数库。在函数库中的可直接使用的函数叫库函数。开发者在使用库的时候,只需要使用库的一部分类或函数,然后继续实现自己的功能。

框架则是为解决一个(一类)问题而开发的产品,框架用户一般只需要使用框架提供的类或函数,即可实现全部功能。可以说,框架是库的升级版。开发者在使用框架的时候,必须使用这个框架的全部代码。
————————————————
版权声明:本文为CSDN博主「十年磨一剑a」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45843073/article/details/115587688

进程与线程

进程:应用程序在执行过程中存在一个内存空间
的初始入口点地址、一个程序执行过程中的代码
执行序列以及用于标识进程结束的内存出口点地
址,在进程执行过程中的每一时间点均有唯一的
处理器指令与内存单元地址相对应。
• Java语言中定义的线程(Thread)同样包括一个
内存入口点地址、一个出口点地址以及能够顺序
执行的代码序列。但是进程与线程的重要区别在
于线程不能够单独执行,它必须运行在处于活动
状态的应用程序进程中,因此可以定义线程是程
序内部的具有并发性的顺序代码流。
Java的多线程机制
• 每个Java程序都有一个默认的主线程
• 如果main方法中没有创建其他线程,那么当main
方法返回时JVM就会结束Java应用程序。
• 但如果main方法中创建了其他线程,所有线程全
部结束才结束Java程序。
• 程序中调用了Runtime类的exit方法,程序结束
Java线程会以以下三种方式之一结束:
• Java线程到达其run()方法的末尾。
• Java线程抛出一个未捕获到的Exception或Error。 • 另一个Java线程调用一个弃用的stop()方法。弃
用是指这些方法仍然存在,但是您不应该在新
代码中使用它们,并且应该尽量从现有代码中
除去它们。
• 当Java程序中的所有线程都完成时,程序就退出了。
整个类的互斥执行
可以把关键字synchronized应用到类的静态方法中。把一个类方法指定为同步的,
等于告诉编程程序,把这个方法添加到一组必须以互斥方式运行的方法中。
我们可以把RaisePressure方法定义为静态的同步方法,示例如下:
static synchronized void RaisePressure() {

仅供学习交流,严禁用于商业用途,请于24小时内删除

1.看程序写结果
2.程序填空(考了JFrame的相关语法)
3.7个简答
接口与抽象类的区别
servlet与jsp的区别与联系
进程与线程的区别与联系,多线程的场景举例
反射的含义,反射的应用场景
final,finally,finalize的区别与联系
模块与库的区别与联系
谈谈你熟悉的一种设计模式
4.点类和线类的构造,创建点表和线表,导入点表和线表数据到数据库,单元测试

仅供学习交流,严禁用于商业用途,请于24小时内删除

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值