2024年最新【(2),2024年最新小红书大数据开发面试题目

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

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

const int streamBufferSize =  1000;
const int numberOfLoops    = 10000;

static void Main(string[] args)
{
    // Check that an argument was specified when the
    // program was invoked.
    if(args.Length == 0)
    {
        Console.WriteLine("Error: The name of the host computer" +
            " must be specified when the program is invoked.");
        return;
    }

    string remoteName = args[0];

    // Create the underlying socket and connect to the server.
    Socket clientSocket = new Socket(AddressFamily.InterNetwork,
        SocketType.Stream, ProtocolType.Tcp);

    clientSocket.Connect(new IPEndPoint(
        Dns.Resolve(remoteName).AddressList[0], 1800));

    Console.WriteLine("Client is connected.\n");

    // Create a NetworkStream that owns clientSocket and
    // then create a BufferedStream on top of the NetworkStream.
    // Both streams are disposed when execution exits the
    // using statement.
    using(Stream
        netStream = new NetworkStream(clientSocket, true),
        bufStream =
              new BufferedStream(netStream, streamBufferSize))
    {
        // Check whether the underlying stream supports seeking.
        Console.WriteLine("NetworkStream {0} seeking.\n",
            bufStream.CanSeek ? "supports" : "does not support");

        // Send and receive data.
        if(bufStream.CanWrite)
        {
            SendData(netStream, bufStream);
        }
        if(bufStream.CanRead)
        {
            ReceiveData(netStream, bufStream);
        }

        // When bufStream is closed, netStream is in turn
        // closed, which in turn shuts down the connection
        // and closes clientSocket.
        Console.WriteLine("\nShutting down the connection.");
        bufStream.Close();
    }
}

static void SendData(Stream netStream, Stream bufStream)
{
    DateTime startTime;
    double networkTime, bufferedTime;

    // Create random data to send to the server.
    byte[] dataToSend = new byte[dataArraySize];
    new Random().NextBytes(dataToSend);

    // Send the data using the NetworkStream.
    Console.WriteLine("Sending data using NetworkStream.");
    startTime = DateTime.Now;
    for(int i = 0; i < numberOfLoops; i++)
    {
        netStream.Write(dataToSend, 0, dataToSend.Length);
    }
    networkTime = (DateTime.Now - startTime).TotalSeconds;
    Console.WriteLine("{0} bytes sent in {1} seconds.\n",
        numberOfLoops * dataToSend.Length,
        networkTime.ToString("F1"));

    // Send the data using the BufferedStream.
    Console.WriteLine("Sending data using BufferedStream.");
    startTime = DateTime.Now;
    for(int i = 0; i < numberOfLoops; i++)
    {
        bufStream.Write(dataToSend, 0, dataToSend.Length);
    }
    bufStream.Flush();
    bufferedTime = (DateTime.Now - startTime).TotalSeconds;
    Console.WriteLine("{0} bytes sent in {1} seconds.\n",
        numberOfLoops * dataToSend.Length,
        bufferedTime.ToString("F1"));

    // Print the ratio of write times.
    Console.WriteLine("Sending data using the buffered " +
        "network stream was {0} {1} than using the network " +
        "stream alone.\n",
        (networkTime/bufferedTime).ToString("P0"),
        bufferedTime < networkTime ? "faster" : "slower");
}

static void ReceiveData(Stream netStream, Stream bufStream)
{
    DateTime startTime;
    double networkTime, bufferedTime = 0;
    int bytesReceived = 0;
    byte[] receivedData = new byte[dataArraySize];

    // Receive data using the NetworkStream.
    Console.WriteLine("Receiving data using NetworkStream.");
    startTime = DateTime.Now;
    while(bytesReceived < numberOfLoops * receivedData.Length)
    {
        bytesReceived += netStream.Read(
            receivedData, 0, receivedData.Length);
    }
    networkTime = (DateTime.Now - startTime).TotalSeconds;
    Console.WriteLine("{0} bytes received in {1} seconds.\n",
        bytesReceived.ToString(),
        networkTime.ToString("F1"));

    // Receive data using the BufferedStream.
    Console.WriteLine("Receiving data using BufferedStream.");
    bytesReceived = 0;
    startTime = DateTime.Now;

    int numBytesToRead = receivedData.Length;

    while (numBytesToRead > 0)
    {
        // Read may return anything from 0 to numBytesToRead.
        int n = bufStream.Read(receivedData,0, receivedData.Length);
        // The end of the file is reached.
        if (n == 0)
            break;
        bytesReceived += n;
        numBytesToRead -= n;
    }

    bufferedTime = (DateTime.Now - startTime).TotalSeconds;
    Console.WriteLine("{0} bytes received in {1} seconds.\n",
        bytesReceived.ToString(),
        bufferedTime.ToString("F1"));

    // Print the ratio of read times.
    Console.WriteLine("Receiving data using the buffered network" +
        " stream was {0} {1} than using the network stream alone.",
        (networkTime/bufferedTime).ToString("P0"),
        bufferedTime < networkTime ? "faster" : "slower");
}

}


**示例 2:在服务器上运行的代码**



using System;
using System.Net;
using System.Net.Sockets;

public class Server
{
static void Main()
{
// This is a Windows Sockets 2 error code.
const int WSAETIMEDOUT = 10060;

    Socket serverSocket;
    int bytesReceived, totalReceived = 0;
    byte[] receivedData = new byte[2000000];

    // Create random data to send to the client.
    byte[] dataToSend = new byte[2000000];
    new Random().NextBytes(dataToSend);

    IPAddress ipAddress =
        Dns.Resolve(Dns.GetHostName()).AddressList[0];

    IPEndPoint ipEndpoint = new IPEndPoint(ipAddress, 1800);

    // Create a socket and listen for incoming connections.
    using(Socket listenSocket = new Socket(
        AddressFamily.InterNetwork, SocketType.Stream,
        ProtocolType.Tcp))
    {
        listenSocket.Bind(ipEndpoint);
        listenSocket.Listen(1);

        // Accept a connection and create a socket to handle it.
        serverSocket = listenSocket.Accept();
        Console.WriteLine("Server is connected.\n");
    }

    try
    {
        // Send data to the client.
        Console.Write("Sending data ... ");
        int bytesSent = serverSocket.Send(
            dataToSend, 0, dataToSend.Length, SocketFlags.None);
        Console.WriteLine("{0} bytes sent.\n",
            bytesSent.ToString());

        // Set the timeout for receiving data to 2 seconds.
        serverSocket.SetSocketOption(SocketOptionLevel.Socket,
            SocketOptionName.ReceiveTimeout, 2000);

        // Receive data from the client.
        Console.Write("Receiving data ... ");
        try
        {
            do
            {
                bytesReceived = serverSocket.Receive(receivedData,
                    0, receivedData.Length, SocketFlags.None);
                totalReceived += bytesReceived;
            }
            while(bytesReceived != 0);
        }
        catch(SocketException e)
        {
            if(e.ErrorCode == WSAETIMEDOUT)
            {
                // Data was not received within the given time.
                // Assume that the transmission has ended.
            }
            else
            {
                Console.WriteLine("{0}: {1}\n",
                    e.GetType().Name, e.Message);
            }
        }
        finally
        {
            Console.WriteLine("{0} bytes received.\n",
                totalReceived.ToString());
        }
    }
    finally
    {
        serverSocket.Shutdown(SocketShutdown.Both);
        Console.WriteLine("Connection shut down.");
        serverSocket.Close();
    }
}

}


##### ♉ 构造函数


###### BufferedStream(Stream) 使用默认的缓冲区大小 4096 字节初始化 BufferedStream 类的新实例



public BufferedStream (System.IO.Stream stream);


**参数**



> 
> `stream`
> 
> 
> [Stream](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)
> 
> 
> 当前流。
> 
> 
> 



> 
> 首次使用此构造函数初始化对象时 `BufferedStream` 分配共享读/写缓冲区。 如果所有读取和写入大于或等于 `bufferSize`,则不使用共享缓冲区。
> 
> 
> 


###### BufferedStream(Stream, Int32) 使用指定的缓冲区大小初始化 BufferedStream 类的新实例



public BufferedStream (System.IO.Stream stream, int bufferSize);


**参数**



> 
> `stream`
> 
> 
> [Stream](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)
> 
> 
> 当前流。
> 
> 
> `bufferSize`
> 
> 
> [Int32](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)
> 
> 
> 缓冲区大小(以字节为单位)。
> 
> 
> 


**示例**


此代码示例是为 [BufferedStream](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) 类提供的一个更大示例的一部分。



// Create a NetworkStream that owns clientSocket and
// then create a BufferedStream on top of the NetworkStream.
// Both streams are disposed when execution exits the
// using statement.
using(Stream
netStream = new NetworkStream(clientSocket, true),
bufStream =
new BufferedStream(netStream, streamBufferSize))


##### ♊ 属性


###### BufferSize 获取此缓冲流的缓冲区大小(以字节为单位)



public int BufferSize { get; }


###### CanRead 获取一个值,该值指示当前流是否支持读取



public override bool CanRead { get; }


**示例**


此代码示例是为 [BufferedStream](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) 类提供的一个更大示例的一部分。



if(bufStream.CanRead)
{
ReceiveData(netStream, bufStream);
}


###### CanWrite 获取一个值,该值指示当前流是否支持写入



public override bool CanWrite { get; }


**示例**


此代码示例是为 [BufferedStream](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) 类提供的一个更大示例的一部分。



if(bufStream.CanWrite)
{
SendData(netStream, bufStream);
}


###### Length 获取流长度,长度以字节为单位



public override long Length { get; }


##### ♌ 常用方法


###### Close() 关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)



public virtual void Close ();



> 
> 注意:此方法调用 [Dispose](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) ,指定 `true` 以释放所有资源。 不需要专门调用 [Close](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) 方法。 请确保 [Stream](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) 已正确释放每个对象。 可以 [Stream](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) `using` `Using` 在 Visual Basic) 中 (或块中声明对象,以确保释放流及其所有资源,或者可以显式调用 [Dispose](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) 方法。
> 
> 
> 


###### CopyTo(Stream) 从当前流中读取字节并将其写入到另一流中



public void CopyTo (System.IO.Stream destination);


**参数**



> 
> `destination`
> 
> 
> **Stream**
> 
> 
> 当前流的内容将复制到的流。
> 
> 
> 


**示例**


下面的示例将的内容复制 [FileStream](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) 到 [MemoryStream](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) 中。



// Create the streams.
MemoryStream destination = new MemoryStream();

using (FileStream source = File.Open(@“c:\temp\data.dat”,
FileMode.Open))
{

Console.WriteLine("Source length: {0}", source.Length.ToString());

// Copy source to destination.
source.CopyTo(destination);

}

Console.WriteLine(“Destination length: {0}”, destination.Length.ToString());


###### CopyTo(Stream, Int32) 使用指定的缓冲区大小,从当前流中读取字节并将其写入到另一流中



public virtual void CopyTo (System.IO.Stream destination, int bufferSize);


**参数**



> 
> `destination`
> 
> 
> **Stream**
> 
> 
> 当前流的内容将复制到的流。
> 
> 
> `bufferSize`
> 
> 
> **Int**
> 
> 
> 缓冲区的大小。 此值必须大于零。 默认大小为 81920。
> 
> 
> 


###### CopyToAsync(Stream) 从当前流中异步读取字节并将其写入到另一个流中



public System.Threading.Tasks.Task CopyToAsync (System.IO.Stream destination);


**参数**



> 
> `destination`
> 
> 
> **Stream**
> 
> 
> 当前流的内容将复制到的流。
> 
> 
> 


**示例**


下面的示例演示如何使用两个 [FileStream](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) 对象将文件从一个目录异步复制到另一个目录。 [FileStream](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) 类是从 [Stream](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) 类派生的。 请注意, [Click](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) 控件的事件处理程序 [Button](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) 使用修饰符标记, `async` 因为它调用异步方法



using System;
using System.Threading.Tasks;
using System.Windows;
using System.IO;

namespace WpfApplication
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        string StartDirectory = @"c:\Users\exampleuser\start";
        string EndDirectory = @"c:\Users\exampleuser\end";

        foreach (string filename in Directory.EnumerateFiles(StartDirectory))
        {
            using (FileStream SourceStream = File.Open(filename, FileMode.Open))
            {
                using (FileStream DestinationStream = File.Create(EndDirectory + filename.Substring(filename.LastIndexOf('\\'))))
                {
                    await SourceStream.CopyToAsync(DestinationStream);
                }
            }
        }
    }
}

}



> 
> [CopyToAsync](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)方法使你可以在不阻塞主线程的情况下执行占用大量资源的 i/o 操作。
> 
> 
> 


###### Dispose() 释放由 Stream 使用的所有资源



public void Dispose ();


###### Read(Byte[], Int32, Int32) 将字节从当前缓冲流复制到数组



public override int Read (byte[] buffer, int offset, int count);


**参数**



> 
> `buffer`
> 
> 
> [Byte](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)[]
> 
> 
> 将字节复制到的缓冲区。
> 
> 
> `offset`
> 
> 
> [Int32](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)
> 
> 
> 缓冲区中的字节偏移量,从此处开始读取字节。
> 
> 
> `count`
> 
> 
> [Int32](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)
> 
> 
> 要读取的字节数。
> 
> 
> 


**返回**



> 
> [Int32](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)
> 
> 
> 读入 `array` 中的总字节数。 如果可用的字节没有所请求的那么多,总字节数可能小于请求的字节数;或者如果在可读取任何数据前就已到达流的末尾,则为零。
> 
> 
> 


**示例**


此代码示例是为 [BufferedStream](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) 类提供的一个更大示例的一部分。



// Receive data using the BufferedStream.
Console.WriteLine(“Receiving data using BufferedStream.”);
bytesReceived = 0;
startTime = DateTime.Now;

int numBytesToRead = receivedData.Length;

while (numBytesToRead > 0)
{
// Read may return anything from 0 to numBytesToRead.
int n = bufStream.Read(receivedData,0, receivedData.Length);
// The end of the file is reached.
if (n == 0)
break;
bytesReceived += n;
numBytesToRead -= n;
}

bufferedTime = (DateTime.Now - startTime).TotalSeconds;
Console.WriteLine(“{0} bytes received in {1} seconds.\n”,
bytesReceived.ToString(),
bufferedTime.ToString(“F1”));



> 
> `Read`仅当到达流的末尾时,该方法才会返回 0。 在所有其他情况下, `Read` 始终在返回之前从流中读取至少一个字节。 根据定义,如果在调用 `Read`时流中没有可用数据,该方法 `Read` 将返回 0 (到达流的末尾会自动) 。 即使尚未到达流的末尾,实现也可以返回比请求的字节少。
> 
> 
> 用于 [BinaryReader](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) 读取基元数据类型。
> 
> 
> 


###### ReadAsync(Byte[], Int32, Int32) 从当前流异步读取字节序列,并将流中的位置提升读取的字节数



public System.Threading.Tasks.Task ReadAsync (byte[] buffer, int offset, int count);


**参数**



> 
> `buffer`
> 
> 
> [Byte](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)[]
> 
> 
> 要写入数据的缓冲区。
> 
> 
> `offset`
> 
> 
> [Int32](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)
> 
> 
> `buffer` 中的字节偏移量,从该偏移量开始写入从流中读取的数据。
> 
> 
> `count`
> 
> 
> [Int32](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)
> 
> 
> 最多读取的字节数。
> 
> 
> 


**返回**



> 
> [Task](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)<[Int32](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)>
> 
> 
> 表示异步读取操作的任务。 `TResult` 参数的值包含读入缓冲区的总字节数。 如果当前可用字节数少于所请求的字节数,则该结果值可小于所请求的字节数;如果已到达流结尾时,则为 0(零)。
> 
> 
> 


**示例**


下面的示例演示如何以异步方式从文件读取。 该示例使用 [FileStream](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) 类,该类派生自 [Stream](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb) 类。



using System;
using System.Text;
using System.Threading.Tasks;

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

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

5ff00ff254613a03fab5e56a57acb)>

表示异步读取操作的任务。 TResult 参数的值包含读入缓冲区的总字节数。 如果当前可用字节数少于所请求的字节数,则该结果值可小于所请求的字节数;如果已到达流结尾时,则为 0(零)。

示例

下面的示例演示如何以异步方式从文件读取。 该示例使用 FileStream 类,该类派生自 Stream 类。

using System;
using System.Text;
using System.Threading.Tasks;


[外链图片转存中...(img-cUbit2bY-1715301973163)]
[外链图片转存中...(img-lxoBus5Q-1715301973163)]
[外链图片转存中...(img-EMWZONo9-1715301973163)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值