腾讯一面总结

本文记录了腾讯Web开发岗位一面的面试经历,涵盖了Java、操作系统、Linux、计算机网络、Web等多个领域的常见问题,包括Java的访问控制修饰符、多态、线程实现方式、String与StringBuffer的区别、进程与线程、TCP/IP协议、AJAX原理以及数据结构等相关知识点。作者反思了自己的不足,旨在分享面试经验并自我提升。
摘要由CSDN通过智能技术生成

腾讯 web开发 一面挂

投了腾讯web开发岗,本来以为是后端,结果今天面试的是前端。自己基础也太差,所以直接挂了。在此记录一下面试的问题,也正好可以分享给大家。
大概问的问题有:

Java

  1. java访问控制修饰符哪有几种?各自的特性?
    有四种。
    • private类型成员,只能在定义它的类的内部被访问。
    • 默认类型成员(也叫做包访问权限),类的内部,包中的其他类 可以访问。
    • protected类型成员,类的内部,包中的其他类,包外的子类 可以访问。
    • public类型成员,任何类都可以访问。
      从开放的上程度讲:private < 默认 < protected < public
      下面摘自阿里java开发手册:
      【推荐】类成员与方法访问控制从严:
      1) 如果不允许外部直接通过new来创建对象,那么构造方法必须是private。
      2) 工具类不允许有public或default构造方法。
      3) 类非static成员变量并且与子类共享,必须是protected。
      4) 类非static成员变量并且仅在本类使用,必须是private。
      5) 类static成员变量如果仅在本类使用,必须是private。
      6) 若是static成员变量,必须考虑是否为final。
      7) 类成员方法只供类内部调用,必须是private。
      8) 类成员方法只对继承类公开,那么限制为protected。
      说明:任何类、方法、参数、变量,严控访问范围。过于宽泛的访问范围,不利于模块解耦。 思考:如果是一个 private 的方法,想删除就删除,可是一个 public 的 service 方法,或者 一个 public 的成员变量,删除一下,不得手心冒点汗吗?变量像自己的小孩,尽量在自己的 视线内,变量作用域太大,如果无限制的到处跑,那么你会担心的。
  2. java可以多重继承吗?可以实现多个接口吗?
    不可多重继承,可以实现多个接口。

  3. java多态

    • 静态多态 函数重载实现(overload)。
    • 动态多态 父类引用指向子类对象,并通过该引用调用子类成员。
  4. Java多线程实现方式

    • 继承Thread
      编写一个类,继承Thread类;
      重写Thread类中的run函数,将需要做的事情放在该函数内;
      实例化该类,并调动start方法启动线程
    • 实现Runnable接口
      编写一个类,实现Runnable接口;
      重写Runnable接口中的run函数,将需要做的事情放在该函数内;
      实例化该类,并新建一个Thread类,将该该类传入Thread中,用start函数启动线程。
  5. String、StringBuffer、StringBuilder类的区别
    下面是Java文档中的介绍

    • String
      The String class represents character strings.Strings are constant; their values cannot be changed after they are created.
    • StringBuffer
      A thread-safe, mutable sequence of characters. A string buffer is like a String, but can be modified. At any point in time it contains some particular sequence of characters, but the length and content of the sequence can be changed through certain method calls.
    • StringBuilder
      A mutable sequence of characters. This class provides an API compatible with StringBuffer, but with no guarantee of synchronization. This class is designed for use as a drop-in replacement for StringBuffer in places where the string buffer was being used by a single thread (as is generally the case). Where possible, it is recommended that this class be used in preference to StringBuffer as it will be faster under most implementations.
      显然可以知道:
      String是不可变字符串(字符串常量),它一旦创建之后值不会再改变。每次对String进行改变的时候其实都是生成了一个新的String,并将引用指向新的String。旧的String过后会作为垃圾被GC回收掉。
      StringBuffer是可变字符串(字符串变量),且是线程安全的。
      StringBuilder是可变字符串(字符串变量),但是线程不安全。适用于单线程的情况,它的效率要比StringBuffer高。
  6. 为什么 说:java一次编译,到处运行。
    因为不同的操作系统上面可以装上不同的Java运行环境(JRE),不同的JRE中包含了不同的Java虚拟机(JVM), .java文件编译为.class文件之后,在不同的JVM上运行即可。

  7. 对Java虚拟机有什么了解?了解Java垃圾回收是如何进行的。
    这一部分我之前没接触过,完全不懂。等以后学完之后再来补充。
  8. Java中多线程有哪些状态?就绪状态和阻塞状态有何不同?阻塞的原因有哪些?
    这一题也不会。查找资料后知道分为:

操作系统

  1. 进程和线程区别
  2. 多进程之间的通信方式

Linux

因为我一点都不会。。所以不记得面试官问了什么

计算机网络

  1. 七层协议是哪七层?
    OSI的七层体系结构:物理层、数据链路层、网络层、运输层、会话层、表示层、应用层。
    TCP/IP的四层体系结构:网络接口层、网际层IP、运输层、应用层
    五层协议的体系结构:物理层、数据链路层、网络层、运输层、应用层
  2. TCP和UDP的区别,TCP错误重传机制是怎样的?TCP报文段的首部格式是怎么样的?
    区别:
    (1)UDP是无连接的,即发送数据前不需要建立连接;TCP是面向连接的,发送数据前要先建立连接。
    (2)UDP尽最大努力交付,即不能保证可靠交付;TCP提供可靠交付,即通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达。
    (3)UDP面向报文;TCP面向字节流。
    (4)UDP支持一对一、一对多、多对一、多对多的交互通信;TCP只能一对一通信。
    (5)UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低;TCP有拥塞控制。
    (6)UDP首部开销比TCP小,UDP首部8个字节,TCP首部20个字节。

  3. TCP在哪一层?该层的作用是什么?IP所在的层是哪一层,该层的作用是什么?
    TCP在运输层,运输层的作用是为应用程序提供端到端的逻辑通信。
    IP在网络层,网络层是为主机之间提供逻辑通信(面向主机,承担路由功能,即主机寻址及有效的分组交换)。

  4. 对网络IO有多了解吗?因为我不知道。。就没聊了
    牛客网上一个帖子包含了此问题:http://m.nowcoder.com/discuss/26356
  5. 服务器端有很多 长连接,这些连接有只有间歇性的通信,那么服务器端如何维护这些Socket?(因为这个我不懂,所以具体是什么题我也有点懵,大概就是这么一个意思)
    牛客网上一个帖子总结计算机网络常考的题:http://m.nowcoder.com/discuss/1937

web

这一部分我也很多不会,自己太水,很多都没听过,所以很多问题都记不清了。
1. ajax实现原理
2. http头
3. JavaScript
4. web安全,跨站脚本、SQL注入的原理和解决方案(因为上了安全编程技术,这个懂一些)

  • 跨站脚本(XSS)
    原理:三方
    攻击方、受害方、网站
    (1)攻击方向网站放置(发送)了含有一些脚本的内容,网站接收。
    (2)受害者访问网站,因为某些原因运行了脚本,使其受害(如隐私泄露)。
    解决方法:
    (1)可以过滤脚本中的特殊字符,如将特殊字符转化为文本,如’<’ 转化为 ‘&lt’;

  • SQL注入
    原理:所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。(来自百度)
    解决方案:采用相对安全的参数传递方法
    如Java中的PreparedStatement,.net中的SQLParameter等,它们会自动规避一些SQL语言的关键符号。
    如Java中的PreparedStatement,它可以对SQL语句进行预编译,它不允许插入的字符串改变SQL语句原本的逻辑结构,而且会对 插入的字符串 中的特殊字符进行转义。

数据结构

  1. 常用的排序算法,时间复杂度,讲解其中几种的思想。
  2. 贪心算法的思想
  3. 动态规划的思想
  4. 动态规划 和 分治法 的区别
  5. 有20G大小的文件,其中保存的都是QQ号,现在只有10M的内存,要求出 出现次数最多的QQ号。如果是要求出 出现次数最多的前1000个QQ号,又该怎么做呢?

现在先写这么多,等以后有时间,我再把其中的问题研究清楚,然后再来修改这篇文章吧。
希望自己每次面试后,都可以发现自己的不足,从而去弥补自己的不足,每次都有进步就好。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值