2024年Android最全Android——套接字Socket(1),2024年最新应届毕业生硬件工程师面试题目

最后

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。

最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

【算法合集】

【延伸Android必备知识点】

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

}

}

// 创建一个检查结果的接收处理器

private Handler mHandler = new Handler() {

// 在收到结果消息时触发

public void handleMessage(Message msg) {

tv_host_name.setText(“主机检查结果如下:\n” + msg.obj);

}

};

// 定义一个主机检查线程

private class CheckThread extends Thread {

private String mHostName; // 主机名称

public CheckThread(String host_name) {

mHostName = host_name;

}

public void run() {

// 获得一个默认的消息对象

Message message = Message.obtain();

try {

// 根据主机名称获得主机名称对象

InetAddress host = InetAddress.getByName(mHostName);

// 检查该主机在规定时间内能否连上

boolean isReachable = host.isReachable(5000);

String desc = (isReachable) ? “可以连接” : “无法连接”;

if (isReachable) { // 可以连接

desc = String.format(“%s\n主机名为%s\n主机地址为%s”,

desc, host.getHostName(), host.getHostAddress());

}

message.what = 0; // 消息类型

message.obj = desc; // 消息描述

} catch (Exception e) {

e.printStackTrace();

message.what = -1; // 消息类型

message.obj = e.getMessage(); // 消息描述

}

// 向接收处理器发送检查结果消息

mHandler.sendMessage(message);

}

}

检查网络地址连通性的效果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

​ 检测域名的连通性结果图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

​ 检测IP的连通性结果图

####二.Socket通信

计算机网络有一个大名鼎鼎的TCP/IP协议,TCP/IP是一个协议组,分为3个层次:

  • 网络层:包括IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。

  • 传输层:包括TCP协议和UDP协议。

  • 应用层:包括HTTP、FTP、TELNET、SMTP、DNS等协议

Socket属于传输层的技术, API实现TCP协议后即可用于HTTP通信,实现UDP协议后即可用于FTP通信,当然也可以直接在底层进行点对点通信。

Android的Socket编程主要使用Socket和ServerSocket两个类:

1.Scoket

Socket是最常用的工具,客户端和服务端都要用到,描述了两边对套接字(Socket)处理的一般行为。主要方法如下:

  • connect:连接指定IP和端口。该方法用于客户端连接服务端。

  • getInputStream:获取输入流,即自身收到对方发过来的数据。

  • getOutputStream:获取输入流,即自身向对方发送的数据。

  • getInetAddress:获取网络地址对象。

  • isConnected:判断socket是否连上。

  • isClosed:判断socket是否关闭。

  • close:关闭socket。

2.ServerSocket

ServerSocket仅用于服务端,在运行时不停地侦听指定端口。主要方法如下:

  • 构造函数:指定侦听哪个端口。

  • accept:开始接收客户端的连接。有客户端连上时就返回一个Socket对象,若要持续侦听连接,则在循环语句中调用该函数。

  • getInetAddress:获取网络地址对象。

  • isClosed:判断socket服务器是否关闭。

  • close:关闭socket服务器。

####3.Scoket通信案例

举个Socket通信的案例,详细步骤说明如下:

(1)首先在客户端与服务端之间建立Socket连接。

(2)然后在Activity中启动Socket连接的线程,等待界面向Socket服务器发送消息,并准备接收消息。

(3)最后启动Socket服务器(其实一开始就要启动,这样App运行时才能马上连上后端服务器)。

下面是在客户端与服务端之间建立Socket连接的详细代码:

public class MessageTransmit implements Runnable {

// 以下为Socket服务器的ip和端口,根据实际情况修改

private static final String SOCKET_IP = “192.168.0.212”;

private static final int SOCKET_PORT = 51000;

private BufferedReader mReader = null; // 声明一个缓存读取器对象

private OutputStream mWriter = null; // 声明一个输出流对象

@Override

public void run() {

// 创建一个套接字对象

Socket socket = new Socket();

try {

// 命令套接字连接指定地址的指定端口

socket.connect(new InetSocketAddress(SOCKET_IP, SOCKET_PORT), 3000);

// 根据套接字的输入流,构建缓存读取器

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

// 获得套接字的输出流

mWriter = socket.getOutputStream();

// 启动一条子线程来读取服务器的返回数据

new RecvThread().start();

// 为当前线程初始化消息队列

Looper.prepare();

// 让线程的消息队列开始运行,之后就可以接收消息了

Looper.loop();

} catch (Exception e) {

e.printStackTrace();

}

}

// 创建一个发送处理器对象,让App向后台服务器发送消息

public Handler mSendHandler = new Handler() {

// 在收到消息时触发

public void handleMessage(Message msg) {

// 换行符相当于回车键,表示我写好了发出去吧

String send_msg = msg.obj.toString() + “\n”;

try {

// 往输出流对象中写入数据

mWriter.write(send_msg.getBytes(“utf8”));

} catch (Exception e) {

e.printStackTrace();

}

}

};

// 定义消息接收子线程,让App从后台服务器接收消息

private class RecvThread extends Thread {

@Override

总结

算法知识点繁多,企业考察的题目千变万化,面对越来越近的“金九银十”,我给大家准备好了一套比较完善的学习方法,希望能帮助大家在有限的时间里尽可能系统快速的恶补算法,通过高效的学习来提高大家面试中算法模块的通过率。

这一套学习资料既有文字档也有视频,里面不仅仅有关键知识点的整理,还有案例的算法相关部分的讲解,可以帮助大家更好更全面的进行学习,二者搭配起来学习效果会更好。

部分资料展示:




有了这套学习资料,坚持刷题一周,你就会发现自己的算法知识体系有明显的完善,离大厂Offer的距离更加近。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

661388)]
[外链图片转存中…(img-suRE6pnX-1715610661388)]

有了这套学习资料,坚持刷题一周,你就会发现自己的算法知识体系有明显的完善,离大厂Offer的距离更加近。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值