面试

TCP三次握手与四次挥手

馋奶兔 提交于 2021-01-13 22:13:31
TCP是什么 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、 基于IP的传输层协议。 TCP有6种标示:SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) RST(重置) URG(紧急) TCP的三次握手 第一次握手:客户端向服务器发送请求报文,这时报文首部中的同部位SYN=1,并生成一个随机序列值seq=n。客户端进入syn-sent(同步已发送)状态,等待服务器确认 第二次握手:TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号ACK=n+1,同时自己也随机生成一个seq=m,此时服务器进入SYN-RCVD(同步收到)状态。 第三次握手:TCP客户端进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=m+1, TCP的三次握手抓包 使用nc -l localhost 8088 监听8088端口 客户端使用nc -v localhost 8088 连接8088端口 再开个终端使用 tcpdump -i lo -vv -nnn tcp port 8088 抓包8088 端口tcp连接 抓包数据 为什么需要三次握手 端口 client发送了一个请求连接的报文,但是网络不好,这个请求没有立即达到服务端

Java基础-Day02

浪尽此生 提交于 2021-01-13 21:13:33
进制 : 是一种进位的方式,x进制,表示逢x进1 计算机的电子原件的状态;开 关 那么,我们表达数据的时候,也是按照开 关的状态来表示的 如果我们表达数据仅仅用这两种状态,那么能够表达的数据是比较少的,而我们常见的数据,英文字面,数字,标点符号。这就很多了,两种状态是不够的。为了能够表示更多的数据,国际化标准组织就规定: 用8个这样的信号来表示一个数据,这个数据的单位叫:字节 。 后来,我们就通过数字1,0分别来表示开和关。 变量 变量概述:在程序执行过程中,在某个范围内其值可以发生改变的量 理解:如同数学中的未知数 格式:数据类型 变量名 = 初始化值 注意:格式是固定的,记住格式,以不变应万变 数据类型 Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间 1 package com.itheima.demo01; 2 /* 3 * 数据类型:Java是一种强类型的数据语言,针对每一种数据都定义了明确的数据类型 4 * 5 * 数据类型分类 6 * 基本数据类型 7 * 引用数据类型(类 接口 数组) 8 * 9 * 基本数据类型:4类8种 10 * 整数:byte1 short2 int4 long8 11 * 浮点:float 4 double8 12 * 字符:char 2 13 * 布尔:boolean1 14 * 15

面试官:插入 100 条数据用时最短的方法是?

故事扮演 提交于 2021-01-13 19:59:01
作者 | 孤独键客 链接 | juejin.im/post/5d255ab9e51d454f73356dcd 最近群里的学习氛围又浓厚了起来。 群友又抛出了一道面试题,有人给出了答案,看完后,是否还有改进的地方,留言评论,一起精进吧! 多线程插入(单表) 问:为何对同一个表的插入多线程会比单线程快?同一时间对一个表的写操作不应该是独占的吗? 答:在数据里做插入操作的时候,整体时间的分配是这样的: 链接耗时 (30%) 发送query到服务器 (20%) 解析query (20%) 插入操作 (10% * 词条数目) 插入index (10% * Index的数目) 关闭链接 (10%) 从这里可以看出来,真正耗时的不是操作,而是链接,解析的过程。 MySQL插入数据在写阶段是独占的,但是插入一条数据仍然需要解析、计算、最后才进行写处理,比如要给每一条记录分配自增id,校验主键唯一键属性,或者其他一些逻辑处理,都是需要计算的,所以说多线程能够提高效率。 多线程插入(多表) 分区分表后使用多线程插入。 预处理SQL 普通SQL,即使用Statement接口执行SQL 预处理SQL,即使用PreparedStatement接口执行SQL 使用PreparedStatement接口允许数据库预编译SQL语句,以后只需传入参数,避免了数据库每次都编译SQL语句,因此性能更好。 String

Java多线程学习(吐血超详细总结)

↘锁芯ラ 提交于 2021-01-13 19:01:50
林炳文Evankaka 原创作品。转载请注明出处 http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢?如果你觉得此文很简单,那推荐你看看Java并发包的的线程池( Java并发编程与技术内幕:线程池深入理解 ),或者看这个专栏: Java并发编程与技术内幕 。你将会对Java里头的高并发场景下的线程有更加深刻的理解。 目录 (?) [-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。在这之前,首先让我们来了解下在操作系统中进程和线程的区别:   进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程。(进程是资源分配的最小单位)   线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。(线程是cpu调度的最小单位)  

Windows 给力!可以扔掉 Linux 虚拟机了!

余生长醉 提交于 2021-01-13 18:35:56
点击上方蓝色“ 方志朋 ”,选择“设为星标” 回复“ 666 ”获取独家整理的学习资料! Linux 在程序员中属于高逼格的存在,当然安装了图形界面的程序员要减分,毕竟你需要用鼠标了!程序员的桌面不能比谁的更酷更炫,要比谁的屏幕多,桌面颜色少! Windows向来是没有这种光圈的,因为它的目标是白痴用户。当然它的cmd命令从始至终充满了科技的味道,一直都是黑白两色。 微软最近几年终于要照顾一下苦逼的开发者了。两个拿得出手的产品,一个是 vscode ,另外一个就是 Windows Terminal 。 为什么终端这么重要呢?对于一个程序员来说,没有了命令行相当于少了半条手臂。这条手臂到底美不美,壮不壮,要看命令行终端好不好用。 以至于微软的员工,很长一段时间在公司都抱着一台Mac,这多打脸啊。 现在,终于不用这么纠结了。Windows和Linux终于合体了。在同一个系统下,你既可以玩游戏,又可以开开心心的写命令行了,而且有了海量的Linux工具支持。 安装Windows Terminal 在远程连接其他Linux的时候,我通常使用 Xshell ,就因为它长得比较漂亮耐看。 在Windows上,就可以安装 Windows Terminal 。有点类似于MacOS上的 iTerm ,可以说是Windows下最舒适的终端。 安装 Windows Terminal 需要从应用商店去获取

突发,英国宣布禁用华为!公司回应来了...

邮差的信 提交于 2021-01-13 17:52:35
点击“ 开发者技术前线 ”,选择“星标🔝” 在看|星标|留言, 真爱 中国基金报 泰勒 英国终究还是“封杀”华为 英国决定停止在5G建设中使用华为 据路透社消息,英国文化大臣奥利弗·道登(Oliver Dowden)刚刚宣布,英国已决定停止在5G建设中使用华为设备。 另据英国天空新闻网消息,道登表示,英国政府将从2020年12月31日起停止购买新的华为设备。此外,英国5G网络中目前所使用的华为设备须在2027年前拆除。 7月14日,外交部发言人赵立坚主持例行记者会。有记者就英国首相即将就是否禁止华为技术参与5G建设一事作出决定等相关内容提问。 赵立坚表示,能否为在英中国企业提供开放、公平、非歧视的营商环境,是脱欧后英国市场走向的试金石,也是中国在英投资是否安全的风向标,中方将密切关注。 据《金融时报》报道,英国政府通信总部(GCHQ)下属的英国国家网络安全中心(NSCS)受政府委托撰写了一份有关美国制裁对华为影响的报告。14日,英国国家安全委员会(NSC)召开会议对该报告进行讨论。《每日电讯报》此前报道称,GCHQ的报告认为,使用华为的技术和设备存在“安全风险”。路透社13日引述英国反对党工党的推文称,英国数字化、文化、媒体和体育大臣道登14日将就华为问题发表声明。 今年1月,英国政府宣布允许华为有限度参与英国5G网络建设。然而,新冠肺炎疫情发生后,英国政界的反华情绪逐步高涨

2020年度最常见的Spring Boot面试题【附解析】

无人久伴 提交于 2021-01-13 17:11:40
前言 Spring Boot 是一套快速开发框架,随着微服务架构应用不断普及,Spring Boot 的研发技术的掌握已经成为研发人员必会技能。与此同时,Spring Boot 开源生态建设能力非常强大,提供了很多应用组件,让Spring Boot 有丰富的三方开源软件的使用。 基于上面的情况,Spring Boot 基本上成为了大中型互联网公司面试的必考题。 本篇小编根据大厂的一些面试题库的梳理,将核心的面试提供分享给大家 1、什么是 Spring Boot? Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。 2、Spring Boot 主要有如下优点: 容易上手,提升开发效率,为 Spring 开发提供一个更快、更广泛的入门体验。 开箱即用,远离繁琐的配置。 提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。 没有代码生成,也不需要XML配置。 避免大量的 Maven 导入和各种版本冲突。 3、Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的? 启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解

彻底理解JAVA动态代理

走远了吗. 提交于 2021-01-13 16:56:56
代理设计模式 定义:为其他对象提供一种代理以控制对这个对象的访问。 代理模式的结构如下图所示。代理模式 动态代理使用 java动态代理机制以巧妙的方式实现了代理模式的设计理念。动态代理类图 代理模式示例代码 public interface Subject { public void doSomething(); } public class RealSubject implements Subject { public void doSomething() { System.out.println( "call doSomething()" ); } } public class ProxyHandler implements InvocationHandler { private Object proxied; public ProxyHandler( Object proxied ) { this.proxied = proxied; } public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable { //在转调具体目标对象之前,可以执行一些功能处理 //转调具体目标对象的方法 return method.invoke( proxied, args); /

10 个冷门但又非常实用的 Docker 使用技巧!!

徘徊边缘 提交于 2021-01-13 16:55:51
简介 在平时的工作中,docker接触很多,除了经常使用的docker run ,docker stop等命令,docker还有很多十分有用但是却不经常使用的命令,下面我就总结一下。 整理了一份Java面试宝典完整版PDF 操作 1、docker top 这个命令是用来查看一个容器里面的进程信息的,比如你想查看一个nginx容器里面有几个nginx进程的时候,就可以这么做 ➜ ~ docker top 3b307a09d20d UID PID PPID C STIME TTY TIME CMD root 805 787 0 Jul13 ? 00:00:00 nginx: master process nginx -g daemon off; systemd+ 941 805 0 Jul13 ? 00:03:18 nginx: worker process 2、docker load && docker save 我一般使用这两个命令去下载打包k8s的镜像,因为你知道的中国的网速并不像国外那么快 docker save可以把一个镜像保存到tar文件中,你可以这么做 docker save registry:2.7.1 >registry-2.7.1.tar 同时docker load可以把镜像从tar文件导入到docker中 docker load < registry-2.7.1

我要悄悄学Java,然后惊艳所有人!

人盡茶涼 提交于 2021-01-13 16:40:52
作为一个历经无数风雨的编程语言,Java近些年好像拿到了悲惨的“人设剧本”,网络上对它的质疑越来越高,例如: “Java真的要凉了吗?” “Python的强势发展下,Java地位岌岌可危?” “Java的统治地位就要被推翻了?” 实际上,在1988-2020年的各大编程语言排行榜,Java语言一直都排在前几位。同时,Java凭借着其安全性、面向对象、分布式、多线程、动态性等多重特点, 坐拥着最大的市场需求,有着“常青树”一般的地位! 不论是大型网站的后端还是大型的企业级应用,甚至是在金融服务行业、网站应用等行业,都不可避免地需要Java开发。 最受欢迎的编程语言历史排行榜 不夸张的说,学 Java,你总能找到合适的工作岗位! 但是问题来了,现在很多人学习Java学的并不是工作需要的技术,网络上很多教学都已经过时了,找工作面试的时候毫不占优势;同时Java技术更新快,名企的招聘需求也在跟随着变化,很多人来不及学习新技术,只能“可望不可即”。 怎么系统地学习Java才是正确的姿势呢? 在这里,我给大家找来了 前腾讯高级Java工程师主讲的《Java极速突围特训营》 ,3天时间,从Java基础语法到项目实战,带你高效入门Java! 我们为什么有自信帮你快速入门? 从课程讲解模式到项目实践再到授课老师行业分享,全方位提高学习能力: 1、通过玩游戏理解专业语法概念