Java笔试题
文章目录
1. 哪些是TCP服务,哪些是UDP服务
(1) TCP协议:传输控制协议,是可靠连接,类似于打电话,只有等待对方接通的时候才可以交流,也就是确认了对方可以传信息,才会发送信息。一些要求比较高的服务一般使用这个协议,如FTP、Telnet、SMTP、HTTP、POP3等,
(2)UDP协议:用户数据报协议,是不可靠的,就像发短信,发出去就完事了,对方是否接收到就与自己无关。使用这个协议的常见服务有DNS、SNMP、QQ等。对于QQ必须另外说明一下,QQ2003以前是只使用UDP协议的,其服务器使用8000端口,侦听是否有信息传来,客户端使用4000端口,向外发送信息。
2. 操作系统提供的服务有哪些
(1)用户界面:一种是命令行界面,就像黑窗的命令行输入,通过命令行执行文件或者文档,一种是图形用户界面,可以控制更多的I/O操作或者菜单选择
(2)程序执行:操作系统在程序底层,操作系统需要让程序正常运行并提示运行错误信息或异常。
(3)I/O操作:程序的I/O操作可能涉及到保护文件特定功能使用,为了提高效率和进行文件保护,用户通常不能直接控制I/O设备,因此,操作系统提供I/O操作的方法。
(4)文件系统操作:可以说,WINDOWS系统就是靠强大的文件系统的目录结构和读写文件,创建文件删除文件的保护机制,访问权限机制赢得很多用户的支持。
(5)通信:通常,一个进程需要与另一个进程交换信息,这种通信可以通过共享内存来实现,也可以通过信息交换技术实现,一种是发生在同一台计算机的两个进程之间的通信,一种是发生在网络连接的不同计算机上的两个进程之间的通信。
(6)错误检测:CPU(如内存错误或电源失败)、I/O设备(磁带奇偶出错,网络连接出错,打印异常)、用户程序(算术溢出,试图访问非法内存地址,单个进程使用CPU时间太长)…每种类型的错误,操作系统都会有一套应对机制确保错误后能正常运行或者调解错误。
(7)资源分配:当计算机有多个用户或多个作业运行时,系统就会给他们每一个分配资源,操作系统可以管控多种不同的资源,什么资源什么时候进来到CPU什么时候出去。
(8)统计:操作系统负责记录哪些用户使用了多少和什么类型的资源,这种数据对研究人员有作用,可用于重新分配系统资源以提高计算服务能力。
(9)保护与安全:多个进程并发执行时,一个进程不能干预另外一个进程,操作系统会对两个进程之间的访问资源进行控制;然后就是操作系统需要设置密码用来保护自身不受外界的侵犯,记录外界强制破解的企图信息,如果一个系统需要保护和安全,那么系统中的所有部分都要预防,因为,一条链子的强度和最薄弱的环节相关。
3. sleep()和yield()的区别
(1)sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会;yield()方法只会给相同优先级或更高优先级的线程以运行的机会;
(2)线程执行sleep()方法后转入阻塞(blocked)状态,而执行yield()方法后转入就绪(ready)状态;
(3)sleep()方法声明抛出InterruptedException,而yield()方法没有声明任何异常;
(4)sleep()方法比yield()方法(跟操作系统CPU调度相关)具有更好的可移植性。
4. sleep()和wait()的区别
(1)sleep方法是Thread的静态方法,wait方法是Object类的普通方法;
(2)sleep方法不释放同步锁,wait方法释放同步锁(执行notify方法唤醒wait的线程时是不释放同步锁的);
(3)wait方法用于线程间通信,而sleep方法用于短暂的暂停线程;
(4)sleep针对当前线程,而wait针对被同步代码块加锁的对象;
(5)wait方法(notify,notifyAll)只能在同步方法或者同步块中使用(如果在non-synchronized函数或non-synchronizedblock中进行调用,虽然能编译通过,但在运行时会发illegalMonitorStateException的异常);sleep方法可以在任意位置使用;
(6)sleep方法是当前线程暂停指定时间,将执行机会让给其它线程,时间结束后进入就绪状态等待;调用wait方法会暂停线程,当前线程释放对象的同步锁,进入等待池(wait pool),只有调用对象的notify或者notifyAll方法唤醒时,线程进入等锁池(lock pool),直到线程再次获得对象的锁才会进入就绪状态。
5. volatile和synchronized的区别
(1)volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取; synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
(2)volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的
(3)volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性
(4)volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。
(5)volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化
6. 编程题
题目要求:编写注册验证功能 1.原系统中包括两个注册好的账号“zhangsan"和"lisi",要求新注册的账号用户名不能已经存在,否则输出”用户名已经存在“,中止程序。 2.密码必须是8到16位,且必须由数字和字母组成,否则输出”密码格式不正确“,中止程序。 3.手机号码必须是11位,且开头必须是1,否则输出”请输入正确的手机号“,中止程序 4.如果全部输入正确,输出”注册成功“
import java.util.Scanner; public class demo02 { public static void main(String[] args) { //输入 Scanner sc=new Scanner(System.in); System.out.println("请输入用户名"); int flag=0; while(flag==0) { String name=sc.next(); flag=user(name,flag); if(flag==1) { break; } System.out.println("请输入密码"); String passerword=sc.next(); flag=passerword(passerword,flag); if(flag==1) { break; } System.out.println("请输入手机号"); String phone=sc.next(); flag=phone(phone,flag); if(flag==1) { break; } System.out.println("注册成功"); break; } } private static int phone(String phone, int flag) { if(phone.charAt(0)!=1||phone.length()!=11) { System.out.println("请输入正确的手机号"); flag=1; } return flag; } private static int passerword(String passerword, int flag) { if(passerword.length()<8||passerword.length()>16) { System.out.println("密码格式错误"); flag=1; } return flag; } private static int user(String name,int flag) { if(name.equals("zhangsan")||name.equals("lisi")) { System.out.println("该用户名已存在"); flag=1; } return flag; } }
题目要求: 将输入的数字n(n>=0)分解,然后让分解的数字相乘,求相乘后的最大值。
例如:
输入: 5 输出: 6
import java.util.Scanner; public class demo03 { public static void main(String[] args) { //输入 Scanner sc=new Scanner(System.in); System.out.println("请输入一个数字"); long n=sc.nextLong(); //处理 if(n==0) { System.out.println(0); }else if(n%2==0) { long m=(n/2)*(n/2); System.out.println(m); }else { long m=(n/2)*(n/2+1); System.out.println(m); } } }
本文地址:https://blog.csdn.net/nzzynl95_/article/details/107684578