❶ java框架Netty的io结构是什么这是面试题
主从Reactor多线程Nio结构,主从Reactor线程模型的特点是:服务端用于接收客户端连接的不再是个1个单独的NIO线程,而是一个独立的NIO线程池。Acceptor接收到客户端TCP连接请求处理完成后(可能包含接入认证等),将新创建的SocketChannel注册到IO线程池(sub reactor线程池)的某个IO线程上,由它负责SocketChannel的读写和编解码工作。Acceptor线程池仅仅只用于客户端的登陆、握手和安全认证,一旦链路建立成功,就将链路注册到后端subReactor线程池的IO线程上,由IO线程负责后续的IO操作。
利用主从NIO线程模型,可以解决1个服务端监听线程无法有效处理所有客户端连接的性能不足问题。
它的工作流程总结如下:
从主线程池中随机选择一个Reactor线程作为Acceptor线程,用于绑定监听端口,接收客户端连接;
Acceptor线程接收客户端连接请求之后创建新的SocketChannel,将其注册到主线程池的其它Reactor线程上,由其负责接入认证、IP黑白名单过滤、握手等操作;
步骤2完成之后,业务层的链路正式建立,将SocketChannel从主线程池的Reactor线程的多路复用器上摘除,重新注册到Sub线程池的线程上,用于处理I/O的读写操作。
❷ java面试考IO的多吗
IO文件流吗 还好,一般般。会有一些文件读写之类的面试题,主要出现在笔试上。
❸ Java语言考题试题,请大家帮我做做。高分160分!主要用到多线程 字符串拆分 IO流,这个题目我没有做出来
主体由两个类来完成,一个服务器类,监听连接,并将来自客户端的连接加到一个队列中
另一个是处理线程类,从队列中获取到连接,并从连接中读取数据写文件,然后响应客户端
服务器类
packagett;
importjava.net.ServerSocket;
importjava.net.Socket;
importjava.util.concurrent.ArrayBlockingQueue;
importjava.util.concurrent.BlockingQueue;
publicclassSimpleHttpServer{
//监听的服务器
privateServerSocketsoc;
//监听的端口
privateintport;
//待处理队列
privateBlockingQueue<Socket>queue;
//创建服务器
publicSimpleHttpServer(intport){
this.port=port;
this.queue=newArrayBlockingQueue<Socket>(200);
}
//启动服务器
publicvoidstartServer()throwsException{
this.soc=newServerSocket(port);
System.out.println("服务器启动,监听"+this.port+"端口");
//启动处理线程
DealThreadthread=newDealThread(this.queue);
thread.start();
//开始获取来自客户端的连接,将接收到的连接加入到队列中,供处理线程处理
while(true){
//接受到新的连接
SocketclientSocket=this.soc.accept();
//加入到队列中
queue.put(clientSocket);
}
}
publicstaticvoidmain(String[]args)throwsException{
SimpleHttpServersh=newSimpleHttpServer(80);
sh.startServer();
}
}
处理线程类
packagett;
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.InputStreamReader;
importjava.net.Socket;
importjava.util.HashMap;
importjava.util.Map;
importjava.util.Properties;
importjava.util.concurrent.BlockingQueue;
{
privateBlockingQueue<Socket>queue;
publicDealThread(BlockingQueue<Socket>queue){
super();
this.queue=queue;
}
publicvoidrun(){
while(true){
SocketclientSocket=null;
BufferedReaderbr=null;
Map<String,String>paramMap=newHashMap<String,String>(); //用来保存上传参数的map,键名为参数名,键值为参数值,例如user=Clientl1,将保存为user键名,Clientl1为键值
try{
//从队列中获取到新的连接
clientSocket=queue.take();
//从连接中读取数据
br=newBufferedReader(newInputStreamReader(clientSocket.getInputStream()));
Stringinput=br.readLine(); //读取客户端的输入,按题目要求,应为:GET/?user=Clientl1&name=xxx&pwd=xxxHTTP/1.1
String[]inputArray=input.split(""); //使用空格将字符串转为数组,第一项为GET/第二项为?user=Clientl1&name=xxx&pwd=xxx,第三项为HTTP/1.1
Stringstr=inputArray[1]; //str即为?user=Clientl1&name=xxx&pwd=xxx
//去掉问号,即去掉首字母
str=str.substring(1);
//用“&”分隔符,再次将字符串转为数组,转化的结果为user=Clientl1,name=xxx,pwd=xxx
String[]strArray=str.split("&");
for(Strings:strArray){
//等号前面的部份作为键名,等号后面的部份作为键值 如user=Clientl1则user为键名,Clientl1为键值
paramMap.put(s.substring(0,s.indexOf("=")),s.substring(s.indexOf("=")+1));
}
Stringuser=paramMap.get("user");
Stringname=paramMap.get("name");
Stringpwd=paramMap.get("pwd");
//user或name或pwd任一项为空,则响应“报文格式不正确”给客户端
if(user==null||name==null||pwd==null){
//响应客户端
clientSocket.getOutputStream().write("报文格式不正确".getBytes());
clientSocket.getOutputStream().flush();
}
else
{
//写perperties文件
Propertiesprop=newProperties();
prop.setProperty("name",name);
prop.setProperty("pwd",pwd);
//创建文件
Filefile=newFile("D:\"+user+".perperties");
prop.store(newFileOutputStream(file),null);
//响应客户端
clientSocket.getOutputStream().write("处理成功".getBytes());
clientSocket.getOutputStream().flush();
}
}catch(Exceptione)
{
e.printStackTrace();
}finally{
//关闭资源
try{
if(br!=null)
br.close();
if(clientSocket!=null)
clientSocket.close();
}catch(Exceptione)
{
e.printStackTrace();
}
}
}
}
}
❹ JAVA试题,请哪位大哥帮忙看看.
1.C 楼上d错, applet 的执行过程:
init()->start()<->stop()->destroy() 所以最后是destroy方法. 其中start和stop是可以相互转化的,比如你的浏览器是当前窗口的时候,刚进入的时候就调用start方法了,当切换为非当前窗口的时候,就调用stop方法,当浏览器被关闭的时候,就调用destroy方法.
2.D 接口只能是公共的.
3.D 楼上的误会short是对表达式结果的强制转换,其实它只是强制转换了一个x而已,不是对整体表达式的转换.由于y是float类型的,所以计算出来的值也只能是float类型的,再说,如果计算结果是short类型的,我返回为值float或者int也是没有问题的,java会帮你做隐式的转换为相应的类型,因为short的精度没有float和int高.所以答案是D
4.B 只要return score;在花括号里面就是对的(不知道lz打题目的时候打对了没有),否则是错的. 别以为错,题目在定义一个内部类而已.
5.B 楼上的只是想用japplet而已,要用applet应该要应用java.applet.*包
用japplet用 javax.swing.JApplet包
6.A java大小写敏感所以a不是关键字,其他的this代表当前对象,void修饰为无返回值函数,都是关键字,const为保留字,在c++中用于定义常量.
7.C 对于类的变量是基本类型来说,默认值都是0,boolean类型都为false.如果是数值数组的话,默认的都是0.所以是c.
❺ java Io流练习题大佬帮忙做一下啊/* * 使用扫描器接收键盘输入模拟用户登陆注册 * 要
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
importjava.util.Map.Entry;
importjava.util.Iterator;
importjava.util.Properties;
importjava.util.Scanner;
publicclassIoTest{
staticScannersc=newScanner(System.in);
staticPropertiespro=newProperties();
staticFilefile=newFile("K:\IO测试\Bai\登陆.properties");
staticStringid=null,pass=null,num=null;
staticBufferedReaderbr;
staticBufferedWriterbw;
publicstaticvoidmain(String[]args)throwsIOException{
if(!file.exists()){
bw=newBufferedWriter(newOutputStreamWriter(newFileOutputStream(file)));
pro.store(bw,"ID/Pass");
}else{
br=newBufferedReader(newInputStreamReader(newFileInputStream(file)));
pro.load(br);
}
while(true){
System.out.println("1.注册 2.登陆 请选择...");
num=sc.nextLine();
System.out.println("输入ID:");
id=sc.nextLine();
System.out.println("输入密码:");
pass=sc.nextLine();
if(num.equals("1"))
reg(id,pass);
else
sig(id,pass);
}
}
privatestaticvoidreg(Stringd,Stringp)throwsIOException{//注册
if(pro.getProperty(d)!=null){
System.out.println("用户存在不能注册,请直接登陆");
return;
}
pro.setProperty(d,p);
bw=newBufferedWriter(newOutputStreamWriter(newFileOutputStream(file)));
pro.store(bw,"ID/Pass");
System.out.println("-->注册成功");
}
privatestaticvoidsig(Stringd,Stringp)throwsIOException{//登陆
booleanb=false;
for(Iterator<Entry<Object,Object>>it=pro.entrySet().iterator();it.hasNext();){
Stringkey=(String)it.next().getKey();
if(key.equals(d)){
b=true;
break;
}
}
if(b){
if(!pro.getProperty(d).equals(p))
System.out.println("密码错误");
else
System.out.println("登陆成功<----");
}else{
System.out.println("用户不存在,请去注册");
}
}
}
❻ java IO练习题
希望对你有用~~嘿嘿~~(我写的是控制台的程序,没用SWING做界面)
import java.io.*;
import java.util.Arrays;
import java.util.Scanner;
public class AbsenteeNote {
public static void main(String[] args) throws IOException {
int select = 0;
select = welcome();
if (select == 1 || select == 2) {
writeLetter(select);
} else {
viewLetter();
}
}
private static int welcome() {
int num = 0;//用于第一层菜单的选择
int num1 = 0;//用于第二层菜单的选择
do {
System.out.println("1:编写请假条");
System.out.println("2:查看请假条");
System.out.print("请选择功能号:");
Scanner in = new Scanner(System.in);
num = in.nextInt();
} while (num != 1 && num != 2);//若输出的数字不为1或2,则继续选择
if (num == 1) {
do {
System.out.println("1:病假");
System.out.println("2:事假");
System.out.print("请选择功能号:");
Scanner in = new Scanner(System.in);
num1 = in.nextInt();
} while (num1 != 1 && num1 != 2);
return num1;
} else {//当输入的是2(查看请假条),则任意返回一个值。
return 0;
}
}
private static void viewLetter() {//查看请假条
File letter = new File("c:\\Letter\\Letter.txt");
try {
FileInputStream view = new FileInputStream(letter);
byte b[] = new byte[view.available()];
while (view.read(b) != -1) {
FilterOutputStream viewContain=new FilterOutputStream(System.out);
System.out.println("假条内容如下:");
viewContain.write(b);
viewContain.close();
}
view.close();
} catch (FileNotFoundException e) {
System.out.println("文件不存在!!!");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void writeLetter(int num1) {//写请假条
String str = new String();
if (num1 == 1)
str = "我因发烧,请假一天 ";
else
str = "参加婚礼,于4.10请假一天";
File letter = new File("c:\\Letter\\Letter.txt");
StringBuilder contain = new StringBuilder();
Scanner in = new Scanner(System.in);
System.out.print("寄信人地址:");
contain.append("寄信人地址:" + in.nextLine() + "\r\n");
System.out.print("收件人地址:");
contain.append("收件人地址:" + in.nextLine() + "\r\n");
System.out.print("签名:");
contain.append("签名:" + in.nextLine() + "\r\n");
System.out.print("日期:");
contain.append("日期:" + in.nextLine() + "\r\n");
contain.append(str);
byte[] input = contain.toString().getBytes();
try {
FileOutputStream out = new FileOutputStream(letter);
out.write(input, 0, input.length);
System.out.println("请假条生成成功!!!");
out.close();
} catch (FileNotFoundException e) {
System.out.println("文件不存在!!!");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
❼ 本人初学java想找些编程例子,巩固前面所学,最好关于面向对象三大思想方面和多线程、IO等。不要选择题。
【试题1】任务一:求阶乘
l 接受一个输入,输出这个数的阶乘
l 用长整型计算
任务二:输出阶梯形式的9*9口诀表,如图1.1所示。
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
图1.1 阶梯形式的9*9口诀表
要求:使用循环结构语句实现。
任务三:编程实现判断一个整数是否为“水仙花数”。所谓“水仙花数”是指一个三位的整数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=13+53+33。
要求:用带有一个输入参数的方法或函数实现,返回值类型为布尔类型。
【试题2】
任务一:已知某个班有M个学生,学习N门课程,已知所有学生的各科成绩,编程:分别求每个学生的平均成绩,并输出。
要求:
l 定义一个二维数组,用于存放M个学生的N门成绩。定义一个一维数组,用于存放每个学生的平均成绩。
l 做二重循环,将每个学生的成绩输入到该二维数组中。
l 做二重循环,对已经存在于二维数组的中的值进行平均分计算,将结果保存到一个一维数组中。
l 做循环输出该一维数组(即平均分)的值。
任务二:编写一个程序找出100~1000之间的所有姐妹素数。
注:姐妹素数是指相邻两个奇数均为素数。
要求:使用循环结构语句实现。
任务三:求n以内(不包括n)同时能被3和7整除的所有自然数之和的平方根s,并作为函数值返回,最后结果s输出到文件out.txt中。例如若n为1000时,函数值应为:s=153.909064。
【试题3】
任务一:求2!+3!+4!+5!
任务二:编写一个程序,对用户输入的任意一组数字字符如{3,1,4,7,2,1,1,2,2},输出其中出现次数最多的字符,并显示其出现次数。如果有多个字符出现次数均为最大且相等,则输出最先出现的那个字符和它出现的次数。例如,上面输入的字符集合中,“1”和“2”都出现了3次,均为最大出现次数,因为“1”先出现,则输出字符“1”和它出现的次数3次。
任务三:中华人民共和国2011年新的个人所得税草案规定,个税的起征点为3000元,分成7级,税率情况见表1.3, 从键盘上输入月工资,计算应交纳的个人所得税。
表1.3税率情况表
级数
全月应纳税所得额
税率 (%)
1
不超过1500元的(即3000-4500之间)
5
2
超过1500元至4500元的部分
10
3
超过4500元至9000元的部分
20
4
超过9000元至35000元的部分
25
5
超过35000元至55000元的部分
30
6
超过55000元至80000元的部分
35
7
超过80000元的部分
45
注意:超出部分按所在税的级数计算,如:一个人的月收入为6000,应交个人所得税为:1500*0.05 +((6000-3000)-1500)*0.1=225
请在键盘上输入一个人的月收入,编程实现该公民所要交的税。
例如:输入“4000”,则输出“你要交的税为:50”。
【试题4】
任务一:请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数个位和十位上,b数的十位和个位数依次放在c数的百位和千位上。例如,当a=16,b=35,调用该函数后,c=5361。
任务二:孙悟空在大闹蟠桃园的时候,第一天吃掉了所有桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。这下可把神仙们心疼坏了,请帮忙计算一下,第一天开始吃的时候桃园一共有多少个桃子。
要求:用循环语句实现,从键盘随机输入参数n
任务三:输入一个5位正整数,输出它是不是回文数。回文数是这样一种数,它的逆序数和它本身相等。例如,12321的逆序数是12321,和它本身相等,所以它是回文数。又例如25128的逆序数是82152,所以它不是回文数。
要求:使用分支或循环结构语句实现。
【试题5】
任务一:判断一个年份N闰年;
输入:年份N
任务二:一个球从100m高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第十次落地时,共经过多少米?第十次反弹多高?
任务三:Redraiment的老家住在工业区,日耗电量非常大。是政府的眼中钉肉中刺,但又没办法,这里头住的可都是纳税大户呀。
今年7月,又传来了不幸的消息,政府要在7、8月对该区进行拉闸限电。但迫于压力,限电制度规则不会太抠门,政府决定从7月1日停电,然后隔一天到7月3日再停电,再隔两天到7月6日停电,依次下去,每次都比上一次晚一天。
Redraiment可是软件专业的学生,怎么离得开计算机。如果停电,就“英雄无用武之地”了。所以他开始盘算起自己回家的日子了,他想知道自己到家后到底要经历多少天倒霉的停电。你能帮他算一算吗?
要求:从键盘输入放假日期,开学日期,日期限定在7、8月份,且开学日期大于放假日期。
提示:可以用数组标记停电的日期
【试题6】
任务一:定义一个电脑类,包含电脑的品牌,价格,型号。
任务二:某班同学上体育课,从1开始报数,共38人,老师要求按1,2,3重复报数,报数为1的同学往前走一步,而报数为2的同学往后退一步,试分别将往前走一步和往后退一步的同学的序号打印出来。
要求:用循环语句实现
任务三:一个人很倒霉,不小心打碎了一位妇女的一篮子鸡蛋。为了赔偿便询问篮子里有多少鸡蛋。那妇女说,她也不清楚,只记得每次拿两个则剩一个,每次拿3个则剩2个,每次拿5个则剩4个,若每个鸡蛋1元,请你帮忙编程,计算最少应赔多少钱?
要求:用循环语句实现,直接打印出结果不给分
【试题7】
任务一:从键盘接收一个整数N,统计出1~N之间能被7整除的整数的个数,以及这些能被7整除的数的和。
屏幕提示样例:
请输入一个整数:20
1~20之间能被7整除的数的个数:2
1~20之间能被7整除的所有数之和:21
任务二:从键盘输入一个整数N,打印出有N*2-1行的菱形。
例如输入整数4,则屏幕输出如下菱形。
要求:使用循环结构语句实现。
任务三:编程实现判断一个整数是否为素数。所谓素整是一个大于1的正整数,除了1和它本身,该数不能被其它的正整数整除。
要求:用带有一个输入参数的方法或函数实现,返回值类型为布尔类型。
【试题8】
任务一:设计一个学生类,包括学号,姓名,班次,系别,联系电话,并包含一个构造方法。
要求:构造方法必须有5个参数,能对学生类中的属性进行赋初值。
任务二:使用冒泡排序法对数组中的整数按升序进行排序,如下所示:
原始数组:a[]={1,9,3,7,4,2,5,0,6,8}
排序后: a[]={0,1,2,3,4,5,6,7,8,9}
要求:使用循环结构语句实现。
任务三:编程实现以下要求。n个人围坐成一卷,从第一个人开始计数,数到m,第m个人出列,接下来继续计数,直到所有人都出列。例如:共有5个人,数到3出列,则顺序为3,1,5,2,4。
要求:用带有两个输入参数(一个总人数n,一个为计数m)的方法或函数实现,返回值类型为数组。
【试题9】
任务一:输入一行字符,输出其中的数字的个数。例如输入“fwEt2f44F2k8”,输出结果为5。
任务二:用循环打印杨辉三角到N层
输入:自然数N
任务三:删去一维数组中相同的数
输入 2 3 3 3 4 5 2 9 10 9 3 2 4
输出2 3 4 5 9 10
【试题10】
任务一:定义一个矩形类,包括长,宽两个属性,计算周长方法和计算面积方法。
任务二:编写程序实现:输入一个整数,判断它能否被3、5、7整除,并输出以下信息之一:
能同时被3、5、7整除
能同时被3、5整除
能同时被3、7整除
能同时被5、7整除
只能被3、5、7中的一个整除
不能被3、5、7任一个整除
要求:使用分支结构语句实现。
任务三:寻找最大数经常在计算机应用程序中使用。例如:确定销售竞赛优胜者的程序要输入每个销售员的销售量,销量最大的员工为销售竞赛的优胜者,写一个程序:从键盘输入10个数,打印出其中最大的数。
要求:程序应正确使用如下两个变量:number:当前输入程序的数,largest:到目前为止的最大数。
给你30个题 慢慢做吧
❽ [急](明天面试题)java.io流习题
public class stringtest {
public static void main(String[] args) {
String a="i love game";
String[] aa=a.split(" ");
for(int i=aa.length-1;i>=0;i--){
System.out.print(aa[i]+" ");
}
}
}
❾ java IO一道练习题.麻烦大神们帮做一下.越简单越好
这几点都是最基本的IO操作,多练练,对你有好处的