一,Java的通信编程,编程题(或问答),用JAVA SOCKET编程,读服务器几个字符,再写入本地显示?



Server端程序: 

package test;

import java.net.*;

import java.io.*; public class Server{

  private ServerSocket ss;

  private Socket socket;

  private BufferedReader in;

  private PrintWriter out;

 public Server() {

  try {

   ss=new ServerSocket(10000);

   while(true) {

    socket = ss.accept();

    String RemoteIP = socket.getInetAddress().getHostAddress();

    String RemotePort = ":"+socket.getLocalPort();

    System.out.println("A client come in!IP:"+RemoteIP+RemotePort);

    in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

    String line = in.readLine();

    System.out.println("Cleint send is :" + line);

    out = new PrintWriter(socket.getOutputStream(),true);

    out.println("Your Message Received!");

    out.close();

    in.close();

    socket.close();

   }

  }catch (IOException e) {

   out.println("wrong");

  }

 }  public static void main(String[] args) {

  new Server();

 }

}   



Client端程序: 


package test;

import java.io.*;

import java.net.*; public class Client {

 Socket socket;

 BufferedReader in;

 PrintWriter out;

 public Client() {

  try {

   System.out.println("Try to Connect to 127.0.0.1:10000");

   socket = new Socket("127.0.0.1",10000);

   System.out.println("The Server Connected!");

   System.out.println("Please enter some Character:");

   BufferedReader line = new BufferedReader(new InputStreamReader(System.in));

   out = new PrintWriter(socket.getOutputStream(),true);

   out.println(line.readLine());

   in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

   System.out.println(in.readLine());

   out.close();

   in.close();

   socket.close();

  }catch(IOException e) {

   out.println("Wrong");

  }

 }  public static void main(String[] args) {

  new Client();

 }

二、用JAVA实现一种排序,JAVA类实现序列化的方法(二种)? 如在COLLECTION框架中,实现比较要实现什么样的接口?



用插入法进行排序代码如下: 

package test;

import java.util.*;

class  InsertSort {

 ArrayList al;  public InsertSort(int num,int mod) {

  al = new ArrayList(num);

  Random rand = new Random();

  System.out.println("The ArrayList Sort Before:");

  for (int i=0;i<num ;i++) {

   al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1));

   System.out.println("al["+i+"]="+al.get(i));

  }

 }  public void SortIt() {

  Integer tempInt;

  int MaxSize=1;

  for(int i=1;i<al.size();i++) {

   tempInt = (Integer)al.remove(i);

   if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue()) {

    al.add(MaxSize,tempInt);

    MaxSize++;

    System.out.println(al.toString());

   } else {

    for (int j=0;j<MaxSize ;j++ ) {

     if (((Integer)al.get(j)).intValue()>=tempInt.intValue()) {

      al.add(j,tempInt);

      MaxSize++;

      System.out.println(al.toString());

      break;

     }

    }

   }

  }   System.out.println("The ArrayList Sort After:");

  for(int i=0;i<al.size();i++) {

   System.out.println("al["+i+"]="+al.get(i));

  }

 }  public static void main(String[] args) {

  InsertSort is = new InsertSort(10,100);

  is.SortIt();

 }

}

三、文件读写,实现一个计数器



public int getNum(){

        int i = -1;

        try{

            String stri="";

            BufferedReader in = new BufferedReader(new FileReader(f));

            while((stri=in.readLine())!=null){

                i = Integer.parseInt(stri.trim());

            }

            in.close();

        }catch(Exception e){

            e.printStackTrace();

        }

        return i;

    }

    public void setNum(){

        int i = getNum();

        i++;        

        try{

            PrintWriter out=new PrintWriter(new BufferedWriter(new 

FileWriter(f,false)));  

            out.write(String.valueOf(i));            

//可能是编码的原因,如果直接写入int的话,将出现java编码和windows编码的混乱,因此此处写入的是String

            out.close() ;

        }catch(Exception e){

            e.printStackTrace();

        }

    }

四、编程题:设有n个人依围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个人又出列,…,如此反复到所有的人全部出列为止。设n个人的编号分别为1,2,…,n,打印出出列的顺序;要求用java实现。(Core Java)



代码如下:

package test;

public class CountGame {

private static boolean same(int[] p,int l,int n){

for(int i=0;i<l;i++){

if(p[i]==n){

return true;

}

}

return false;

}

public static void play(int playerNum, int step){

int[] p=new int[playerNum];

int counter = 1;

while(true){

if(counter > playerNum*step){

break;

}

for(int i=1;i<playerNum+1;i++){

while(true){

if(same(p,playerNum,i)==false) break;

else i=i+1;

}

if(i > playerNum)break;

if(counter%step==0){

System.out.print(i + " ");

p[counter/step-1]=i;

}

counter+=1;

}

}

System.out.println();

}

public static void main(String[] args) {

play(10, 7);

}

}

五、写一个方法1000的阶乘。(C++)


(了解一下,变态公司会问C的问题)


C++的代码实现如下:

#include <iostream>

#include <iomanip>

#include <vector>

using namespace std;

class longint {

private:

vector<int> iv;

public:

longint(void) { iv.push_back(1); }

longint& multiply(const int &);

friend ostream& operator<<(ostream &, const longint &);

};

ostream& operator<<(ostream &os, const longint &v) {

vector<int>::const_reverse_iterator iv_iter = v.iv.rbegin();

os << *iv_iter++;

for ( ; iv_iter < v.iv.rend(); ++iv_iter) {

os << setfill('0') << setw(4) << *iv_iter;

}

return os;

}

longint& longint::multiply(const int &rv) {

vector<int>::iterator iv_iter = iv.begin();

int overflow = 0, product = 0;

for ( ; iv_iter < iv.end(); ++iv_iter) {

product = (*iv_iter) * rv;

product += overflow;

overflow = 0;

if (product > 10000) {

overflow = product / 10000;

product -= overflow * 10000;

}

*iv_iter = product;

}

if (0 != overflow) {

iv.push_back(overflow);

}

return *this;

}

  int main(int argc, char **argv) {

  longint result;

int l = 0;

  if(argc==1){

  cout << "like: multiply 1000" << endl;

exit(0);

  }

  sscanf(argv[1], "%d", &l);

  for (int i = 2; i <= l; ++i) {

  result.multiply(i);

  }

  cout << result << endl;

  return 0;


长按二维码

关注我们吧

Java面试系列17-编程题-读取服务器字符、实现序列化、计数器、1000阶乘、n出列问题等_java