Java Socket发送方与接收方得到的数据不一致 5C

[做电子白板时,服务器端收到的消息和客户端发送的消息不同。
Server类为服务器,运行时首先打开Server。Server中有ClientThread线
程组,其中的每个元素用来保存和每个客户通信的线程。LoginFrame为登录界面,点击登录后,选择教师登录,登录成功后,再继续登录学生端。教师和学生均为客户端,教师端上画的点先传给服务器,再由服务器利用线程组ClientThread传给学生。问题是:教师端发送点的消息后,服务器端的教师对应的ClientThread中接收到的消息和发送的不一致。
服务器端:
图片说明
教师端:图片说明
]源代码,下载积分比较少的那一个([图片]https://download.csdn.net/my "")

2个回答

服务器端的教师对应的ClientThread中接收到的消息和发送的不一致。 这个要调试下

帮你调试,总不能我先垫付下载分吧。不然你先采纳了,我得到下载分再帮你调试。

js传文件流,后台获取js传文件流,后台获取js传文件流,后台获取js传文件流,后台获取js传文件流,后台获取js传文件流,后台获取js传文件流,后台获取

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
往socket发送大量数据,接收方无法读取到完整数据

大家有没有遇到一种情况,客户端往服务器的socket发送了一个很大的数据(3万+byte),在服务器那边read socket的时候没有读到所有的数据,服务器用while去读但是都无法读到客户端发过来的所有数据,读取socket fd的代码如图 ![图片说明](https://img-ask.csdn.net/upload/201504/26/1430034961_507939.png)

请问一下,c++ socket接收到数据长度和实际不一致

![图片说明](https://img-ask.csdn.net/upload/201902/24/1550993325_415320.png) ![图片说明](https://img-ask.csdn.net/upload/201902/24/1550993333_995105.png) 如图所示,图一未返回的接收到的字节长度20,但是实际上revData里面的数据为"1234",请问这是什么原因?

JAVA的Socket为什么会自动关闭。跪了,求解

问题描述: 这里有一个服务器和一个带图形界面客户端。当的用户账号密码正确时,客户端会向服务器提出连接请求,也就是new Sicket(..., ...); 可是为什么客户端这个Socket会在成功连接7秒左右自动关闭。 我判断客户端的Socket已经关闭的原因有两个。 1.客户端的socket不停调用s.sendUrgentData方法,但在运行7秒左右时会抛出异常。 2 服务器一直在等待客户端的消息,但是在运行7秒左右服务器却抛出connection reset异常,在抛异常之前客户端可以正常发送数据,异常之后不能再发送了,在百度上知道这是因为发送方(也就是客户端)的socket已经关闭,而接收方还在等待接受而抛出的异常。 相关代码: // 客户端代码 public class LoginFrame extends JFrame { private Socket s ; if (log()) { // log是连接数据库的函数,会返回boolean表示用户名密码对不对 s = Client.requst(nameTF.getText()); // 为s赋值,将返回的Socket保存在s中, 类的静态方法requst } else { System.out.println("登陆失败"); } } // 主函数 public static void main(String[] args) throws InterruptedException { LoginFrame f = new LoginFrame(); Thread.sleep(2000);// 为了给输入用户名和密码时间 while (true) { try { f.s.sendUrgentData(0xFF); System.out.println("发送成功"); } catch (IOException e) { System.out.println("因发送心跳包出现异常" + e.getMessage()); break } } } // 客户端的连接请求代码 public class Client { public static Socket requst(String name) { Socket s = null; try { // 发出连接请求 s = new Socket("127.0.0.1", 8888); PrintWriter writer = new PrintWriter(s.getOutputStream()); // 告诉服务器是谁刚刚连接 writer.write(name + "\n"); writer.flush(); } catch (UnknownHostException e) { System.out.println(e.getMessage()); } catch (IOException e) { System.out.println(e.getMessage()); } return s; } 相关截图 客户端异常 ![图片说明](https://img-ask.csdn.net/upload/201906/16/1560659211_996428.jpg) 服务器异常(提问时,异常变成这个,但之前都是Connection reset) ![图片说明](https://img-ask.csdn.net/upload/201906/16/1560659224_174504.jpg) 请各位朋友帮忙了。 这次是JAVA课程设计,但老师并没有讲Socket,Socket的一些细节我也不清楚。所以拜托了帮我找找Bug。 ---------------------------------------------------------------------- 各位我实在是充不起C币。 要是问题解决了, 你支付宝二维码或者微信发过来, 我给你6块行不行。 拜托了,帮帮我吧。

socket编程write和read方式对应

1.NumberConverter.java public interface NumberConverter { public int toInt(byte[] b,int x,int y); } 2.MyServer.java import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class MyServer { private int lengthOffset; private int lengthSize; private int lengthAddtive; public int getLengthOffset() { return lengthOffset; } public void setLengthOffset(int lengthOffset) { this.lengthOffset = lengthOffset; } public int getLengthSize() { return lengthSize; } public void setLengthSize(int lengthSize) { this.lengthSize = lengthSize; } public int getLengthAddtive() { return lengthAddtive; } public void setLengthAddtive(int lengthAddtive) { this.lengthAddtive = lengthAddtive; } public void setNumberConverter(NumberConverter numberConverter){ this.numberConverter = numberConverter; } private NumberConverter numberConverter = new NumberConverter(){ public int toInt(byte[] b, int i, int i_0_) { String temp = ""; int i_1_ = 0; for(int i_2_=0;i_2_<i_0_;i_2_++){ temp = Byte.toString(b[i+i_2_]); if(!("32").equals(temp)){ i_1_ = i_1_*10 + ((b[i+i_2_] & 0xff) - 48); } } return i_1_; } }; public byte[] getBytesByLength(InputStream in0,int off,int len,NumberConverter converter,int addtive) throws IOException{ DataInputStream in1 = new DataInputStream(in0); byte[] lengthBytes = new byte[off+len]; in1.readFully(lengthBytes); int length = converter.toInt(lengthBytes, off, len); length+=addtive; System.out.println("接收客户端传输的字符长度为:"+length); return lengthBytes; } private byte[] resolve(InputStream in) throws IOException { lengthOffset = 0; lengthSize = 7; if(lengthSize>0){ return (getBytesByLength(in, lengthOffset, lengthSize, numberConverter, lengthAddtive)); }else{ throw new IllegalArgumentException("length size must > 0"); } } public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(9999); System.out.println("我是服务器,等待客户端连接..."); Socket ssoc = null; String sendStr = "你好,我是服务器。"; while(true){ ssoc = server.accept(); //测试--重要步骤,关键 MyServer ms = new MyServer(); ms.resolve(ssoc.getInputStream()); //读取客户端的请求信息 InputStream in = ssoc.getInputStream(); DataInputStream din = new DataInputStream(in); String receiveStr = null; byte[] rBuf = new byte[7]; din.read(rBuf); receiveStr = new String(rBuf,0,7); System.out.println("我是服务器,客户端请求的信息:"+receiveStr); //响应客户端的请求 OutputStream out = ssoc.getOutputStream(); DataOutputStream dout = new DataOutputStream(out); byte[] buf = sendStr.getBytes(); out.write(buf); //关闭资源 out.close(); in.close(); ssoc.close(); } } } 3.MyClient.java import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class MyClient { public static void main(String[] args) throws IOException{ Socket soc = new Socket("127.0.0.1",9999); System.out.println("我是客户端,连接中..."); String sendStr = "<ap></ap>"; //向服务器发送消息 OutputStream out = soc.getOutputStream(); DataOutputStream dout = new DataOutputStream(out); byte[] buf = sendStr.getBytes(); out.write(buf); //读取服务器响应消息 InputStream in = soc.getInputStream(); DataInputStream din = new DataInputStream(in); String receiveStr = null; byte[] rBuf = new byte[1024]; din.read(rBuf); receiveStr = new String(rBuf); System.out.println("我是客户端,服务器响应的信息:"+receiveStr); //关闭资源 in.close(); out.close(); soc.close(); } } 疑问:System.out.println("接收客户端传输的字符长度为:"+length);接收客户端传输的字符长度为:17555239; 怎样通过修改MyClient.java,让此长度正确读取后转换为正确的字符串长度。 MyServer中resolve方法相关都不可以变更。因为这部分是框架中的内容,包括toInt方法都不可变。 请教一下,大神。万分感谢!

网络二层通信 raw socket

两主机使用二层通信。 两主机均有一个物理接口ethlan,一个逻辑接口br0,ethlan同时均在桥在 br0下且br0均使用ethlan的mac地址。 当发送方使用接口ethlan或br0时,无差异,均可成功发送。 但接收方使用接口ethlan时,无法通过recv接收到对方发送的数据(端口tcpdump可抓到包);使用接口br0时,一切正常,为什么呢?

NIO中的SocketChannel多次write之后 用read如何做到区分多次的数据

例如socketChannel.write(ByteBuffer) buteBuffer的长度可能随时变更,但是接收的时候read方法是以一个固定的长度接收的 发送方 ```java byte[] outData = new byte[2048]; ByteBuffer outByteBuffer = ByteBuffer.wrap(outData); toWriteNrBytes = 获取数据返回一个长度; outByteBuffer.limit(toWriteNrBytes); socketChannel.write(outByteBuffer); ``` 接收方 ```java byte[] inData = new byte[2048]; ByteBuffer inByteBuffer = ByteBuffer.wrap(inData); readNrBytes = socketChannel.read(inByteBuffer); ``` 可是这个readNrBytes并不能实时的到每次写入的长度,请问怎么解决

java 中用多线程实现 UDP 传输的问题

我用多线程实现了发送数据和接收数据的 UDP 传输 但是结果很奇怪,第一次键盘输入后传输过来的数据是正常的 但往后的数据传输结果就开始变得很奇怪,总是莫名其妙多出很多字母![图片说明](https://img-ask.csdn.net/upload/201909/10/1568129293_920283.png) 但是我是跟着视频写的代码,我把视频里的代码复制过来也是这么回事,是不是 java 版本的问题??我的java是最新版的 以下是代码部分,请各位大神不吝赐教,谢谢! ``` public class Demo5_Thread { public static void main(String[] args) { new Receive().start(); new Socket().start(); } } //发送方 class Socket extends Thread { public void run() { try { Scanner sc = new Scanner(System.in); DatagramSocket socket = new DatagramSocket(); while (true) { String line = sc.nextLine(); if ("quit".equals(line)) { break; } DatagramPacket packet = new DatagramPacket(line.getBytes(), line.getBytes().length, InetAddress.getByName("10.24.3.58"), 666); socket.send(packet); } socket.close(); } catch (IOException e) { e.printStackTrace(); } } } //接收方 class Receive extends Thread{ public void run() { try { DatagramSocket socket = new DatagramSocket(666); DatagramPacket packet = new DatagramPacket(new byte[1024], 1024); while (true) { socket.receive(packet); String ip = packet.getAddress().getHostAddress(); int port = packet.getPort(); byte[] arr = packet.getData(); int len = packet.getLength(); System.out.println(ip + ":" + port + ":" + new String(arr, 0, len)); } } catch (IOException e) { e.printStackTrace(); } } } ```

javaSocket in.readLine()读取响应的多行记录问题

重要部分代码: String line=null; StringBuffer strbf=new StringBuffer(); while((line=bf.readLine())!=null){ strbf.append(line+"\n"); System.out.print(strbf.toString()); } 我发现每次连接之后服务端控制台在不断的响应信息,但是这里只能读取到第一行出来,每次响应都只能取出第一行,剩余的几行为啥取不到,我怀疑是响应的问题,当执行一条命令之后,第一句是已经执行完毕,然后响应客户端,剩余的几行属于反馈信息范围内了,但是我用cmd的Telnet没问题,一样能接收到剩余的几行反馈,不知道啥原理,需要大神指点一下. .

Socket UDP 聊天,双方各创建4个Pthreads, 各线程的分配

因为使用Socket UDP 实现双方(A方和B方)聊天,sendto 和 receivefrom,现在每方有4个Pthreads, 第1个thread等待键盘输入,输入后存入list 第2个thread等输入以后,发送给对方 第3个thread等待接收信息,并存入list 第4个thread将接收的信息,从list里提取并打印出来 现在问题是当第一个thread等待输入的时候,如果现在A方不准备输入,而要等待B方的信息, 请问怎么继续走下面的线程 或者当B方不准备输入,等待A方的信息的时候,怎么继续让下面的线程继续走呢 刚开始学多线程,搞不太清楚,请大神指点

用mina 客户端向第三方服务器发送消息时收不到返回报文

package com.demo.single; import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.core.service.IoConnector; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.LineDelimiter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.filter.logging.LoggingFilter; import org.apache.mina.transport.socket.nio.NioSocketConnector; import com.demo1.BaseConfig; import com.demo1.ProviderClientHander; public class ToolSendClient { public static void main(String[] args) { String msg = "0000003076<?xml version=\"1.0\" encoding=\"UTF-8\"?><service><sys-header><data name=\"SYS_HEAD\"><struct><data name=\"APPR_USER_ID\"><field length=\"30\" scale=\"0\" type=\"string\"/></data><data name=\"SEQ_NO\"><field length=\"14\" scale=\"0\" type=\"string\">9095256682051</field></data><data name=\"TRAN_CODE\"><field length=\"8\" scale=\"0\" type=\"string\"/></data><data name=\"TRAN_DATE\"><field length=\"8\" scale=\"0\" type=\"string\">20150720</field></data><data name=\"MESSAGE_CODE\"><field length=\"4\" scale=\"0\" type=\"string\">0407</field></data><data name=\"MODULE_ID\"><field length=\"2\" scale=\"0\" type=\"string\">RB</field></data><data name=\"TRAN_TYPE\"><field length=\"20\" scale=\"0\" type=\"string\"/></data><data name=\"USER_ID\"><field length=\"30\" scale=\"0\" type=\"string\">V0016</field></data><data name=\"MESSAGE_TYPE\"><field length=\"4\" scale=\"0\" type=\"string\">1400</field></data><data name=\"AUTH_PASSWORD\"><field length=\"0\" scale=\"0\" type=\"string\"/></data><data name=\"PROGRAM_ID\"><field length=\"20\" scale=\"0\" type=\"string\">FM144D</field></data><data name=\"SERVICE_CODE\"><field length=\"30\" scale=\"0\" type=\"string\">SVR_INQUIRY</field></data><data name=\"SERVER_ID\"><field length=\"30\" scale=\"0\" type=\"string\">127.0.0.1</field></data><data name=\"BRANCH_ID\"><field length=\"6\" scale=\"0\" type=\"string\">50801</field></data><data name=\"SOURCE_BRANCH_NO\"><field length=\"50\" scale=\"0\" type=\"string\">000011</field></data><data name=\"REVERSAL_TRAN_TYPE\"><field length=\"0\" scale=\"0\" type=\"string\"/></data><data name=\"WS_ID\"><field length=\"200\" scale=\"0\" type=\"string\">01</field></data><data name=\"SOURCE_TYPE\"><field length=\"2\" scale=\"0\" type=\"string\">HB</field></data><data name=\"DEST_BRANCH_NO\"><field length=\"6\" scale=\"0\" type=\"string\">000002</field></data><data name=\"USER_LANG\"><field length=\"100\" scale=\"0\" type=\"string\">CHINESE</field></data><data name=\"TRAN_TIMESTAMP\"><field length=\"9\" scale=\"0\" type=\"string\">165745418</field></data><data name=\"AUTH_FLAG\"><field length=\"4\" scale=\"0\" type=\"string\">N</field></data><data name=\"TRAN_MODE\"><field length=\"1\" scale=\"0\" type=\"string\">ONLINE</field></data><data name=\"AUTH_USER_ID\"><field length=\"30\" scale=\"0\" type=\"string\"/></data><data name=\"APPR_FLAG\"><field length=\"1\" scale=\"0\" type=\"string\"/></data></struct></data></sys-header><app-header><data name=\"APP_HEAD\"><struct><data name=\"PGUP_OR_PGDN\"><field length=\"15\" scale=\"0\" type=\"string\">1</field></data><data name=\"TOTAL_NUM\"><field length=\"15\" scale=\"0\" type=\"string\">10</field></data><data name=\"CURRENT_NUM\"><field length=\"15\" scale=\"0\" type=\"string\">0</field></data><data name=\"PAGE_START\"><field length=\"30\" scale=\"0\" type=\"string\">1</field></data><data name=\"PAGE_END\"><field length=\"15\" scale=\"0\" type=\"string\">10</field></data></struct></data></app-header><local-header/><body><data name=\"BASE_ACCT_NO\"><field length=\"50\" scale=\"0\" type=\"string\">6236220599200002847</field></data><data name=\"CARD_NO\"><field length=\"20\" scale=\"0\" type=\"string\"/></data><data name=\"PASSWORD\"><field length=\"50\" scale=\"0\" type=\"string\"/></data><data name=\"IC_CARD_SEQ\"><field length=\"3\" scale=\"0\" type=\"string\"/></data></body></service>"; send2(msg); } public static void send2(String message) { TextLineCodecFactory lineCodec = new TextLineCodecFactory( Charset.forName("UTF-8"), LineDelimiter.UNIX.getValue(), LineDelimiter.UNIX.getValue()); lineCodec.setDecoderMaxLineLength(1024 * 1024); // 1M lineCodec.setEncoderMaxLineLength(1024 * 1024); // 1M IoConnector connector = new NioSocketConnector(); connector.getFilterChain().addLast("logger", new LoggingFilter()); connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(lineCodec)); connector.setHandler(new ProviderClientHander()); // ConnectFuture connectFuture = connector.connect(new InetSocketAddress("127.0.0.1",BaseConfig.ESB_PORT)); ConnectFuture connectFuture = connector.connect(new InetSocketAddress("10.129.34.215", BaseConfig.ESB_PORT)); // 等待建立连接 connectFuture.awaitUninterruptibly(); System.out.println("连接成功"); IoSession session = connectFuture.getSession(); session.write(message); // 关闭 if (session != null) { if (session.isConnected()) { session.getCloseFuture().awaitUninterruptibly(); } connector.dispose(); } } }

netty消息转发中client端循环推送的问题

接触netty不久,开发时遇到一个问题,求帮忙 流程:page——> java ——> 第三方server ——>java——>page 单写client向第三方循环发送没有问题,该处打印ctx.channel [id: 0x5916337a, L:/xxx.xxx.x.xxx:55041 - R:/xxx.xxx.x.xxx:4002] ``` public void run(String host, int port) throws Exception { EventLoopGroup group = new NioEventLoopGroup(); try { Bootstrap bootstrap = new Bootstrap().group(group).channel(NioSocketChannel.class); // 有数据立即发送 bootstrap.option(ChannelOption.TCP_NODELAY, true); // 保持连接 bootstrap.option(ChannelOption.SO_KEEPALIVE, true); bootstrap.handler(new ChannelInitializer<SocketChannel>() { @Override public void initChannel(SocketChannel ch) throws Exception { // 自定义解码工具(含拆包粘包处理) ch.pipeline().addLast(new SelfDefineEncodeHandler()); // 自定义方法处理 ch.pipeline().addLast(new HttpClientHandler()); } }); Channel channel = bootstrap.connect(host, port).sync().channel(); System.out.println(channel.toString()); while (true) { ByteBuf bytebuf = Unpooled.buffer(1); bytebuf.writeByte(0xff); channel.writeAndFlush(bytebuf); Thread.sleep(10000); } } catch (Exception e) { e.printStackTrace(); } finally { group.shutdownGracefully(); } } ``` 我先写一个server端接收page传过来的请求 ``` public void run(int port) throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class) .childHandler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { ChannelPipeline pipeline = ch.pipeline(); pipeline.addLast("http-codec", new HttpServerCodec()); pipeline.addLast("aggregator", new HttpObjectAggregator(65536)); pipeline.addLast("http-chunked", new ChunkedWriteHandler()); pipeline.addLast("handler", new DataServerHandler()); } }); Channel ch = b.bind(port).sync().channel(); ch.closeFuture().sync(); } finally { bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } } ``` 然后再 DataServerHandler中的channelRead0中嵌入了netty的client端 ``` // 把外层channel的eventLoop挂接在内层上 Bootstrap bootstrap = new Bootstrap().group(ctx.channel().eventLoop()).channel(NioSocketChannel.class); // 有数据立即发送 bootstrap.option(ChannelOption.TCP_NODELAY, true); // 保持连接 bootstrap.option(ChannelOption.SO_KEEPALIVE, true); bootstrap.handler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { // 自定义解码工具(含拆包粘包处理) ch.pipeline().addLast(new SelfDefineEncodeHandler()); // 自定义方法处理 ch.pipeline().addLast(new ChannelInboundHandlerAdapter() { // 内层建立的连接,从这里接收内层的应答,在这里是服务端的应答 @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { //... } @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { super.channelActive(ctx); } }); } }); connectFuture = bootstrap.connect("xxx.xxx.x.xxx", 7789); System.out.println(connectFuture.channel().toString()); while(true){ ByteBuf bytebuf = Unpooled.buffer(1); bytebuf.writeByte(0xff); connectFuture.channel().writeAndFlush(bytebuf); System.out.println("发送请求"); Thread.sleep(10000); } ``` 因为要向connectFuture连接的路径发送,所以调用connectFuture.channel(),但是该处拿到的connectFuture.channel()为[id: 0x71e6e0dc],因此在测试工具中并没有收到ff的消息 将循环写到channelActive以后,测试工具可以不停的接收传过来的ff,但是java无法接收返回的消息 ``` @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { // outerCnl = ctx.channel(); System.out.println(ctx.channel().toString()); while (true) { ByteBuf bytebuf = Unpooled.buffer(1); bytebuf.writeByte(0xff); ctx.channel().writeAndFlush(bytebuf); Thread.sleep(10000); } // super.channelActive(ctx); } ``` 如果未使用循环,返回的信息可以正确的接收解析并传送给page 刚接触netty,有些东西不太懂,有人有过类似的错误么,望解答

objectinputstream readobject 为何只能读取第一次写入的值

public class TransEntity implements Serializable//传输信息实体封装类 { private static final long serialVersionUID = 1L; private String operaType;//用户操作类型;如发送文本消息,发送语音消息,发送音频消息 private String responseTags;//网络响应状态;如“登录成功”、“登录失败”、“注册成功”、“注册失败” private String requestTags;//网络请求标记;请求发送文本消息,语音消息,音频消息 private User sender;//发送方; private User receiver;//接收方; private ArrayList<HashMap<String,Object>> buddylist;//好友列表信息; private String time;//系统时间; private ArrayList<HashMap<String,String>> inputGeneralMsgList;//通用信息 private HashMap<String,Object> outGeneralMsgMap; private String path; public String getUserOperaType() { return operaType; } public void setUserOperaType(String operaType) { this.operaType = operaType; } public String getResponseTags() { return responseTags; } public String setResponseTags(String responseTags) { return this.responseTags = responseTags; } public void setRequestTags(String requestTags) { this.requestTags = requestTags; } public String getRequestTags() { return requestTags; } public User getSender() { return sender; } public void setSender(User sender) { this.sender = sender; } public User getReceiver() { return receiver; } public void setReceiver(User receiver) { this.receiver = receiver; } public ArrayList<HashMap<String,Object>> getList() { return buddylist; } public void setList(ArrayList<HashMap<String,Object>> buddylist) { this.buddylist = buddylist; } public String getImagePath() { return path; } public void setImagePath(String path) { this.path = path; } public void setGeneralMessagefrom(ArrayList<HashMap<String,String>> inputGeneralMsgList) { this.inputGeneralMsgList = inputGeneralMsgList; } public ArrayList<HashMap<String,String>> getGeneralMessagefrom() { return inputGeneralMsgList; } public void setGeneralMessageto(HashMap<String,Object> outGeneralMsgMap) { this.outGeneralMsgMap = outGeneralMsgMap; } public HashMap<String,Object> getGeneralMessageto() { return outGeneralMsgMap; } public void setSysTime(String time) { this.time = SysTime.getDateTime(); } public String getSysTime() { return time; } } 服务端核心代码 public class ServerThread extends Thread { private static ObjectInputStream ois = null; private static ObjectOutputStream oos = null; private ArrayList<HashMap<String,Object>> list = null; private ArrayList<HashMap<String,String>> outgeneralMsgList = null; private Socket socket = null; private TransEntity trans = null; private boolean FLAGS_IsFirstLogin = true; private boolean FLAGS_LoginSucess = false; private boolean FLAGS_RegisterSucess = false; private boolean FLAGS_OnLine = false; private User user = null; private User receiver = null; private Timer timer = new Timer(); public ServerThread(Socket socket) { this.socket = socket; try { oos = new ObjectOutputStream(socket.getOutputStream()); ois = new ObjectInputStream(socket.getInputStream()); } catch (IOException e) { e.printStackTrace(); } } public void run() { try { while(true) { if(socket.isClosed() == false && socket.isConnected() == true) { try { if(ois!=null) { trans = (TransEntity) ois.readObject(); } } catch(java.net.SocketException e) { System.out.println("客户端已经关闭。。。。。。。"); break; } catch(ClassNotFoundException e) { System.out.println("--------空指针异常---------"); } catch(java.io.EOFException e) { System.out.println("客户端已经关闭。。。。。。。"); } } if(trans!=null) { user = trans.getSender(); receiver = trans.getReceiver(); if(trans.getUserOperaType()!=null) { System.out.println("----------trans.getUserOperaType() :------------"+(trans.getUserOperaType())); if(FLAGS_IsFirstLogin == true&&(UserOperaType.LOGIN.equals(trans.getUserOperaType()))) { //首次登录,一般情形下的客户端发过来的登录操作请求做处理,非掉线后的自动登录; System.out.println("--------server---socket :------"+(socket)); FLAGS_LoginSucess = setLogin(); } if(FLAGS_LoginSucess) { FLAGS_IsFirstLogin = false; System.out.println("----------trans.getUserOperaType() :------------"+(trans.getUserOperaType())); ......为何此次只能输出第一次读入的数据 if(UserOperaType.SEND_MESSAGE.equals(trans.getUserOperaType())) { System.out.println("-------UserOperaType.SEND_MESSAGE ---------"); System.out.println(trans.getGeneralMessageto().get("outMsg").toString()); if(trans.getGeneralMessageto()!=null)//若getGeneralMessageto()返回值不为空,则可以向数据库写入信息; { System.out.println("-------服务端:---发送方 写入普通信息到数据库,如文字消息;-----------"); SysCtlVar.dbBasicOperation.writeGeneralMessage(trans);// 发送方 写入普通信息到数据库,如文字消息; //trans.setGeneralMessageto(null); } trans.setUserOperaType(null); } oos.writeObject(trans); oos.flush(); } } } } } catch (Exception e) { e.printStackTrace(); } finally { } } } 客户端核心代码 while(SysCtlVar.FlAGS_LoginSuccess) { // System.out.println("--------------while SysCtlVar.FlAGS_LoginSuccess -------------"); try { try { SysCtlVar.trans = (TransEntity)SysCtlVar.ois.readObject(); if(SysCtlVar.inputGeneralMsgList!=null) synchronized(SysCtlVar.inputGeneralMsgList) { SysCtlVar.inputGeneralMsgList = SysCtlVar.trans.getGeneralMessagefrom(); SysCtlVar.inputGeneralMsgList.notify(); } synchronized(SysCtlVar.outGeneralMsgMap) { try { System.out.println("------- SysCtlVar.outGeneralMsgMap.wait----------"); SysCtlVar.outGeneralMsgMap.wait(); //等待直到有输入的时候,才把消息发送出去 System.out.println("---------------客户端: 正在发送消息。。。。。。------------------"); System.out.println("------- SysCtlVar.outGeneralMsgMap:----------"+(SysCtlVar.outGeneralMsgMap.get("outMsg").toString())); SysCtlVar.trans.setUserOperaType(UserOperaType.SEND_MESSAGE); SysCtlVar.trans.setGeneralMessageto(SysCtlVar.outGeneralMsgMap); System.out.println("------- SysCtlVar.trans.getGeneralMessageto():----------"+(SysCtlVar.trans.getGeneralMessageto().get("outMsg").toString())); try { SysCtlVar.oos.writeObject(SysCtlVar.trans); SysCtlVar.oos.flush(); } catch (IOException e) { e.printStackTrace(); } } catch (InterruptedException e) { e.printStackTrace(); } } } catch (ClassNotFoundException e) { e.printStackTrace(); } } catch (StreamCorruptedException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } } 客户端 数据输入部分 /** 调试过程中,你将看到客户端输入的消息为h(第一条消息),www(第二条消息),a(第三条消息) 但是服务端只有第二条消息的值; */ //------------------发送消息 ---------- //客户端当前会话任务中,选中的消息接收者; new Thread() { public void run() { synchronized(SysCtlVar.outGeneralMsgMap) { System.out.println("------- 客户端:正在输入要发送的消息----------"); SysCtlVar.outGeneralMsgMap.clear(); SysCtlVar.outGeneralMsgMap.put("outMsg",outMsg); SysCtlVar.outGeneralMsgMap.put("msgRecver", selectedAccount); SysCtlVar.outGeneralMsgMap.put("dateTime",SysTime.getDateTime().toString()); SysCtlVar.outGeneralMsgMap.notify(); //输入完毕,通知发送任务执行 } } }.start(); 调试信息(服务器端) 服务器已启动,正在监听1345端口 ----------trans.getUserOperaType() :------------0 --------server---socket :------Socket[addr=/127.0.0.1,port=38516,localport=1345] ------- list!=null : ---------true [qq]上线了! ----------qq---------- ----------trans.getUserOperaType() :------------0 ----------trans.getUserOperaType() :------------6 ----------trans.getUserOperaType() :------------6 -------------UserOperaType.GET_AVATARS------------6 我想从服务器获取头像 ----------trans.getUserOperaType() :------------7 ----------trans.getUserOperaType() :------------7 -------UserOperaType.SEND_MESSAGE --------- www -------服务端:---发送方 写入普通信息到数据库,如文字消息;----------- insert into chat(sender,recver,message,sendtime) values('qq','在水一方','www','2015-04-24 16:15:13') ----------trans.getUserOperaType() :------------7 ----------trans.getUserOperaType() :------------7 -------UserOperaType.SEND_MESSAGE --------- www -------服务端:---发送方 写入普通信息到数据库,如文字消息;----------- insert into chat(sender,recver,message,sendtime) values('qq','在水一方','www','2015-04-24 16:15:13') ----------trans.getUserOperaType() :------------7 ----------trans.getUserOperaType() :------------7 -------UserOperaType.SEND_MESSAGE --------- www -------服务端:---发送方 写入普通信息到数据库,如文字消息;----------- insert into chat(sender,recver,message,sendtime) values('qq','在水一方','www','2015-04-24 16:15:13') ----------trans.getUserOperaType() :------------7 ----------trans.getUserOperaType() :------------7 -------UserOperaType.SEND_MESSAGE --------- www -------服务端:---发送方 写入普通信息到数据库,如文字消息;----------- insert into chat(sender,recver,message,sendtime) values('qq','在水一方','www','2015-04-24 16:15:13') ---------------问题补充--------------- 单步调试,客户端的输出流正确发送了每一次的客户端输入数据(36分钟前)删除 对于单步调试追踪的结果:客户端每一次发送的trans(它是TransEntity的实例,被序列化的消息实体对象)都是正确的(即,与客户端输入值相同)。但是服务端有ObjectInputStream读入的trans(它也是TransEntity的实例,被序列化的消息实体对象)却没有改变始终是第一次的值

使用eclipse用TCP协议创建服务器和客户端,从客户端向服务器传文件

服务器代码: package com.xfr.test; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; public class Test2_UpLoadServer { /**  * @param args  * @throws IOException   */ public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(6666); //创建服务器,绑定端口号777 System.out.println("启动服务器,端口号为6666!!!"); while(true){ final Socket socket = server.accept();  //接收客户端的请求,有可能接收多个客户端的请求,所以用多线程 new Thread(){ public void run(){ try { InputStream  is = socket.getInputStream(); //拿到客户端的流 BufferedReader br = new BufferedReader(new InputStreamReader(is)); //用Buffer缓冲区更好读取 PrintStream ps = new PrintStream(socket.getOutputStream()); //用PrintStream的好处是可以写字符也可以写字节 String fileName = br.readLine();//接收到要上传的文件的名字 File dir = new File("upload"); //创建一个文件夹来存放文件 dir.mkdir(); File file = new File(dir,fileName); //对文件名字进行封装来进行判断操作 if(file.exists()){ ps.println("存在"); //若文件在服务器中存在,给与客户端提示 socket.close(); }else{ //文件在服务器中没有,则开始接收 FileOutputStream fos = new FileOutputStream(file); byte[] arr = new byte[8192]; int len; while(( len = is.read(arr)) != -1){ fos.write(arr, 0, len); } fos.close(); //记得关流和关端口 socket.close(); } } catch (IOException e) { e.printStackTrace(); } } }.start(); } } } 客户端代码: package com.xfr.test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class Test2_UploadClient { /**  * 向服务器上传文件,文件路径从键盘获取  * @param args  * @throws IOException   * @throws UnknownHostException   */ public static void main(String[] args) throws UnknownHostException, IOException { Socket socket = new Socket("169.254.33.252",6666);//创建客户端 File file = getFile();//获取文件 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintStream ps = new PrintStream(socket.getOutputStream()); ps.println(file.getName()); //将文件名字传给服务器,服务器再对其进行判断 String result = br.readLine(); if("存在".equals(result)){ System.out.println("该文件在服务器中已经存在,请不要重复上传!"); socket.close(); return; } else { //文件不存在的话,开始读取该文件 FileInputStream fis = new FileInputStream(file); byte[] arr = new byte[8192];  int len; while((len = fis.read(arr)) != -1){ ps.write(arr, 0, len);//向服务器传 } fis.close(); socket.close();//F:\Test\aaa.txt } } public static File getFile() { Scanner sc = new Scanner(System.in); while(true){ String s = sc.nextLine(); File file = new File(s); if(!file.exists()){ System.out.println("您要上传的文件不存在!重新输入文件路径:"); } else if(file.isDirectory()){ System.out.println("您输入的是文件夹路径!重新输入文件路径:"); } else{ return file; } } } } ###执行后输入路径,路径正确的话程序不会停下来,红方块一直在 ![图片说明](https://img-ask.csdn.net/upload/201710/25/1508926710_596979.png) 手动点掉红方块后刷新项目 ![图片说明](https://img-ask.csdn.net/upload/201710/25/1508926743_190021.png) 可以看到eclipse当前路径多了要拷贝的文件,可是文件字节大小为0 ![图片说明](https://img-ask.csdn.net/upload/201710/25/1508926754_412742.png) 更多

请教一下高手,ObjectOutputStream 类的 writeObject 方法

我在学习网络编程的过程中发现,ObjectOutputStream 类的 writeObject 方法,如果每次都重新 new 一个对象写入,则没有问题; 但如果是最初 new 一个对象,而在每次写入前,改写对象的属性,然后再写入,则每次接收方收到的都是第一次的内容。 本人初学 java ,研究了半天也没搞懂,所以特来向高手请教,示例代码如下: /** 对象类 MsgData.java **/ import java.io.Serializable; public class MsgData implements Serializable { private String from; private String to; private String msg; public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public String getTo() { return to; } public void setTo(String to) { this.to = to; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String toString() { return from + " 对你说:" + msg; } } /** 发送方(客户端)ClientTest.java **/ import java.io.IOException; import java.io.ObjectOutputStream; import java.net.Socket; import java.util.Scanner; public class ClientTest { public static void main(String[] args) { try { Socket s = new Socket("localhost", 9002); ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream()); MsgData iMsg = new MsgData(); iMsg.setFrom("A"); iMsg.setTo("server"); while (true) { Scanner in = new Scanner(System.in); // 如果每次在这里重新 new 对象就是正确的 // MsgData iMsg = new MsgData(); // iMsg.setFrom("A"); // iMsg.setTo("server"); String msg = in.nextLine(); iMsg.setMsg(msg); out.writeObject(iMsg); out.flush(); } } catch (IOException e) { e.printStackTrace(); } } } /** 接收方(服务端)ServerTest.java **/ import java.io.IOException; import java.io.ObjectInputStream; import java.net.ServerSocket; import java.net.Socket; public class ServerTest { public static void main(String[] args) { try { ServerSocket server = new ServerSocket(9002); Socket s = server.accept(); ObjectInputStream in = new ObjectInputStream(s.getInputStream()); while (true) { MsgData iMsg = (MsgData)in.readObject(); System.out.println(iMsg); } } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } 如果使用上面的代码,先运行Server端,再运行Client端,然后在Client端输入123,回车,再输入456,则Server端会显示: A 对你说:123 A 对你说:123 如果按我代码中注释部分所述,把创建对象放到循环里面,再次运行,同样的输入,则Server端会正常显示: A 对你说:123 A 对你说:456 我无法确认究竟是 writeObject 方法的问题,还是 readObject 方法的问题,所以特求助高手,非常感谢!

java web项目。每个用户登录都会开启几个线程,这样登录用户多了会不会导致线程太多

使用的socket通讯,一个用户登录都开启一个socket并无限接收或发送报文信息,如果登录用户超过一定数量线程是否会达到服务器可开启的线程数?,如果会,该怎么优化?实在没有分了,求各位帮忙

欢迎进来讨论,,,一起进步

设备通信存在以下特性: 1、单线程,同时只支持一个socket通信 2、采用一问一答(连续发送的指令时,需要前一条指令响应回来,才能发第二条),有一种特殊情况设备随时从udp通道会给我发来告警的信息,如设备上一些异常操作,这个不需要发送指令的 3、现在与设备通信指令有四十种左右,可以理解成api,只不过是异步的 4、每个指令的格式大体相同 ,请求的数据体有区别,响应也是一样。针对不同的响应我们实现了不同的响应处理类。主要是对响应的十六进制的数据进行解析成我们认识的java封装的对象。 下面是楼主面临的问题: 场景:通过各种指令的组合,去完成一个业务工单,比如拆纤的业务工单,在页面发起一个拆纤动作,设备上会以慢闪提示(发了两条慢闪的指令),然后现场操作人员会将慢闪的端口的纤拔了,此时那个端口会有拔出的告警。根据告警会再次发送 灭灯指令,当需要拔的端口都操作完了,这个拆纤业务也就结束了。 楼主的方案: 第一阶段:整个方案没有第三方框架的介入,所有逻辑是自己设计的。首先发送指令和接收指令的核心代码用数据库表设计的队列,启动收发两个线程,发送线程每50毫秒去扫描发送队列表,有数据就进行发送。收线程不停接收,将接收的数据拼成一个完整的响应后分发给不同响应的处理类。 第一阶段的问题很多,主要有: 1、首先用数据库实现队列,50ms去扫描,增加数据库的压力,同时效率不能满足 2、发送和接收核心代码实现了很好封装,但是响应处理类跟业务耦合性太高,而且响应处理类需要根据不同的业务类型做不同的业务,也就是响应处理类后期代码分之会非常多,不便维护 第二阶段:重新选择了方案:用redis内存数据库代替了db数据库,同时引入了activiti流程的概念,收发核心代码跟方案一类似,lz很快实现了。但是activiti是我另一个同事在研究(我们项目大都是一到两年工作经验,lz三年了算是最老了,但是技术还是菜),本来打算用流程来解决不同的工单,但是在尝试过程中结合到实际的业务还是不能很好的满足。而且把流程搞得变味了,工单业务也复杂多了 小弟在这里先谢谢大家,能耐心的看完我对目前工作的理解。有些地方描述的不好,各位多多包涵,希望大神们指导一下,给出一些建议或者技术选型。再次谢谢 更多 0

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

ArrayList源码分析(入门篇)

ArrayList源码分析 前言: 写这篇博客的主要原因是,在我上一次参加千牵科技Java实习生面试时,有被面试官问到ArrayList为什么查找的速度较快,插入和删除的速度较慢?当时我回答得不好,很大的一部分原因是因为我没有阅读过ArrayList源码,虽然最后收到Offer了,但我拒绝了,打算寒假学得再深入些再广泛些,下学期开学后再去投递其他更好的公司。为了更加深入理解ArrayList,也为

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

玩转springboot启动banner定义所得

最近接手了一个springboot项目,不是不熟悉这个框架,启动时打印的信息吸引了我。 这不是我熟悉的常用springboot的打印信息啊,我打开自己的项目: 还真是的,不用默认的感觉也挺高大上的。一时兴起,就去研究了一下源代码,还正是有些收获,稍后我会总结一下。正常情况下做为一个老程序员,是不会对这种小儿科感兴趣的,不就是一个控制台打印嘛。哈哈! 于是出于最初的好奇,研究了项目的源代码。看到

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

你打算用Java 8一辈子都不打算升级到Java 14,真香

我们程序员应该抱着尝鲜、猎奇的心态,否则就容易固步自封,技术停滞不前。

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。 但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。 那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。 “淡黄的长裙~蓬松的头发...

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

立即提问
相关内容推荐