首页 文章详情

这是周鸿祎的简历,600元的迈巴赫卖了990万

沉默王二 | 154 2024-05-03 10:11 0 0 0
UniSMS (合一短信)

大家好,我是二哥呀。

最近,互联网的早期网红周鸿祎又重新回到了大众的视野中心,600 元起拍的迈巴赫最终卖到了 990 万,这 10000 倍的溢价背后,是附送周老板的一次饭局,嘿嘿,有点当年巴菲特老爷子的味道(嗯,这饭这车都挺贵)。

并且周老板在各大短视频平台频繁出现,热度贼高,于是我去百度百科上看了一眼周老板的履历,竟然还是我们河南老乡,出生在驻马店市(他自己说籍贯是湖北省),后随父母在郑州上学读书,就读于第九中学,本科毕业于西安交通大学,因成绩优异,又保研成功。

e5b8a4fd2892e2cf46358d59ca9818c9.webp整理不易,简历请表明出处:百度百科

周老板在网上的风评也是褒贬不一,争议性很大,比如说鲁大师,比如说 3q 大战,比如说无法卸载的安全全家桶。。。

但不管怎么说,周老板是懂流量的,是懂网红的,这波既节省了巨额的广告费,又顺势拉一波公司股价,到时候随随便便就是几个小目标(厉害)。

360面经(八股吟唱开始)

言归正传。。

继续来看《Java 面试指南》中收录的 360 面经(大厂几乎都会有 Java 岗,别意外),以同学 3 为例,来看看 360 的 Web 服务器端面试官都喜欢问哪些问题。

4014b603e2741fbd1e6162d62b233a3a.webp二哥的Java 面试指南专栏

可以看得出,竟然还是二哥一直强调的 Java 后端四大件,还在冲刺春招和暑期实习的同学可以收藏起来,好做到知彼知己百战不殆。

说一下阻塞非阻塞IO -说了下BIO和NIO

BIO(Blocking I/O):采用阻塞式 I/O 模型,线程在执行 I/O 操作时被阻塞,无法处理其他任务,适用于连接数较少的场景。

06f90c0471fae985dd64d1823ca909fc.webp三分恶面渣逆袭:BIO

NIO(New I/O 或 Non-blocking I/O):采用非阻塞 I/O 模型,线程在等待 I/O 时可执行其他任务,通过 Selector 监控多个 Channel 上的事件,适用于连接数多但连接时间短的场景。

78445d7918b6d0737d0418d6d3ea04bc.webp三分恶面渣逆袭:NIO完整示意图

线程安全,说一个使用场景 -讲了下单例模式的双重检查锁定,懒汉式和饿汉式

线程安全是 Java 并发编程中一个非常重要的概念,它指的是多线程环境下,多个线程对共享资源的访问不会导致数据的不一致性。

一个常见的使用场景是在实现单例模式时确保线程安全。

单例模式确保一个类只有一个实例,并提供一个全局访问点。在多线程环境下,如果多个线程同时尝试创建实例,单例类必须确保只创建一个实例。

饿汉式是一种比较直接的实现方式,它通过在类加载时就立即初始化单例对象来保证线程安全。

      
      class Singleton {
    private static final Singleton instance = new Singleton();

    private Singleton() {
    }

    public static Singleton getInstance() {
        return instance;
    }
}

懒汉式单例则在第一次使用时初始化,这种方式需要使用双重检查锁定来确保线程安全,volatile 用来保证可见性,syncronized 用来保证同步。

      
      public class LazySingleton {
    private static volatile LazySingleton instance;

    private LazySingleton() {}

    public static LazySingleton getInstance() {
        if (instance == null) { // 第一次检查
            synchronized (LazySingleton.class{
                if (instance == null) { // 第二次检查
                    instance = new LazySingleton();
                }
            }
        }
        return instance;
    }
}

volatile关键字,说说别的你知道的关键字

当一个变量被声明为 volatile 时,Java 内存模型会确保所有线程看到该变量时的值是一致的。

360a1500c6463a9bf6fe946cfdad413c.webp深入浅出 Java 多线程:Java内存模型

也就是说,当线程对 volatile 变量进行写操作时,JMM 会在写入这个变量之后插入一个 Store-Barrier(写屏障)指令,这个指令会强制将本地内存中的变量值刷新到主内存中。

78ddb9840c62c9f7b8c18f1c75fe0d60.webp三分恶面渣逆袭:volatile写插入内存屏障后生成的指令序列示意图

当线程对 volatile 变量进行读操作时,JMM 会插入一个 Load-Barrier(读屏障)指令,这个指令会强制让本地内存中的变量值失效,从而重新从主内存中读取最新的值。

9706acb789bf9552623e858fc01ac8d4.webp三分恶面渣逆袭:volatile写插入内存屏障后生成的指令序列示意图

synchronized 用过吗?怎么使用?

在 Java 中,synchronized 是最常用的锁,它使用简单,并且可以保证线程安全,避免多线程并发访问时出现数据不一致的情况。

随着 JDK 版本的进化,synchronized 的性能也得到了进一步的提升,不再像以前样重量级了。

synchronized 可以用在方法和代码块中。

①、修饰方法

      
      public synchronized void increment() {
    this.count++;
}

当在方法声明中使用了 synchronized 关键字,就表示该方法是同步的,也就是说,线程在执行这个方法的时候,其他线程不能同时执行,需要等待锁释放。

如果是静态方法的话,锁的是这个类的 Class 对象,因为静态方法是属于类级别的。

      
      public static synchronized void increment() {
    count++;
}

②、修饰代码块

      
      public void increment() {
    synchronized (this) {
        this.count++;
    }
}

同步代码块可以减少需要同步的代码量,颗粒度更低,更灵活。synchronized 后面的括号中指定了要锁定的对象,可以是 this,也可以是其他对象。

final的用处

①、当 final 修饰一个类时,表明这个类不能被继承。比如,String 类、Integer 类和其他包装类都是用 final 修饰的。

394c2a7e62b2b07e8a977913d8faa7ac.webp二哥的 Java 进阶之路

②、当 final 修饰一个方法时,表明这个方法不能被重写(Override)。也就是说,如果一个类继承了某个类,并且想要改变父类中被 final 修饰的方法的行为,是不被允许的。

③、当 final 修饰一个变量时,表明这个变量的值一旦被初始化就不能被修改。

如果是基本数据类型的变量,其数值一旦在初始化之后就不能更改;如果是引用类型的变量,在对其初始化之后就不能再让其指向另一个对象。

2d5d4f757e550210be08c3513cb12ebe.webp二哥的 Java 进阶之路

但是引用指向的对象内容可以改变。

278ebb451519092f2958a7b35dbc1e72.webp三分恶面渣逆袭:final修饰变量

java的基本类型

Java 的数据类型分两种:基本数据类型引用数据类型

cfb23a606599f5c8029cc3cc5c04c3ec.webp二哥的 Java 进阶之路:Java数据类型

基本数据类型有哪些?

  • 数值型
    • 整数类型(byte、short、int、long)
    • 浮点类型(float、double)
  • 字符型(char)
  • 布尔型(boolean)

Java 基本数据类型范围和默认值:

数据类型 默认值 大小
boolean false 1 比特
char '\u0000' 2 字节
byte 0 1 字节
short 0 2 字节
int 0 4 字节
long 0L 8 字节
float 0.0f 4 字节
double 0.0 8 字节

java有哪些集合

Java 集合框架可以分为两条大的支线:

①、Collection,主要由 List、Set、Queue 组成:

  • List 代表有序、可重复的集合,典型代表就是封装了动态数组的 ArrayList 和封装了链表的 LinkedList;
  • Set 代表无序、不可重复的集合,典型代表就是 HashSet 和 TreeSet;
  • Queue 代表队列,典型代表就是双端队列 ArrayDeque,以及优先级队列 PriorityQueue。

②、Map,代表键值对的集合,典型代表就是 HashMap。

5d2bbb6e6ee41cb6eca10c2fdcabe1c8.webp二哥的 Java 进阶之路:Java集合主要关系

用过哪些数据库

我经常使用的数据库是 MySQL,它是一个开源的关系型数据库管理系统,现在隶属于 Oracle 旗下。

也是我们国内使用频率最高的一种数据库,我在本地安装的 MySQL 的社区版,最新的 8.0 版本。

ea7291d0d6b480305ee8d2dab7060355.webpMySQL 官网

mysql的索引用过哪些

①、主键索引: 表中每行数据唯一标识的索引,强调列值的唯一性和非空性。

当创建表的时候,可以直接指定主键索引:

      
      CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255NOT NULL,
    email VARCHAR(255)
);

id 列被指定为主键索引,同时,MySQL 会自动为这个列创建一个聚簇索引(主键索引一定是聚簇索引)。

可以通过 show index from table_name 查看索引信息,比如前面创建的 users 表:

296f341f3fe8b09ea23113d9461398c0.webp二哥的 Java 进阶之路:索引信息
  • Non_unique 如果索引不能包含重复词,则为 0;如果可以,则为 1。这可以帮助我们区分是唯一索引还是普通索引。
  • Key_name 索引的名称。如果索引是主键,那么这个值是 PRIMARY。
  • Column_name 索引所包含的字段名。
  • Index_type 索引的类型,比如 BTREE、HASH 等。

②、唯一索引: 保证数据列中每行数据的唯一性,但允许有空值。

可以通过下面的语句创建唯一索引:

      
      CREATE UNIQUE INDEX idx_username ON users(username);

同样可以通过 show index from table_name 确认索引信息:

b689a31b0d52496d6a81559004013dd6.webp二哥的 Java 进阶之路:唯一索引

Non_unique 为 0,表示这是一个唯一索引。

③、普通索引: 基本的索引类型,用于加速查询。

可以通过下面的语句创建普通索引:

      
      CREATE INDEX idx_email ON users(email);

这次我们通过下面的语句一起把三个索引的关键信息查出来:

      
      SELECT `TABLE_NAME` AS `Table``NON_UNIQUE``INDEX_NAME` AS `Key_name``COLUMN_NAME` AS `Column_name``INDEX_TYPE` AS `Index_type`
FROM information_schema.statistics
WHERE `TABLE_NAME` = 'users' AND `TABLE_SCHEMA` = DATABASE();
42ea9d72597b821e995475d2cb5c24b2.webp二哥的 Java 进阶之路:普通索引

可以确定 idx_email 是一个普通索引,因为 Non_unique 为 1。

④、全文索引:特定于文本数据的索引,用于提高文本搜索的效率。

假设有一个名为 articles 的表,下面这条语句在 content 列上创建了一个全文索引。

      
      CREATE FULLTEXT INDEX idx_article_content ON articles(content);

数据库隔离级别有哪些

事务的隔离级别定了一个事务可能受其他事务影响的程度,MySQL 支持的四种隔离级别分别是:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。

0fe71948e3e259a3c0ed21513247a0de.webp三分恶面渣逆袭:事务的四个隔离级别

mysql是属于哪个隔离级别

可重复读是 MySQL 默认的隔离级别,避免了“脏读”和“不可重复读”,也在很大程度上减少了“幻读”问题。

用过redis吗 用来干什么

Redis 是 Remote Dictionary Service 三个单词中加粗字母的组合,是一种基于键值对(key-value)的 NoSQL 数据库。

4cdf2848e397df587655231af8d2611a.webp三分恶面渣逆袭:Redis图标

在技术派实战项目中,很多地方都用到了 Redis,比如说用户活跃排行榜、作者白名单、常用热点数据(文章标签、文章分类)、计数统计(文章点赞收藏评论数粉丝数)等等。

ff49402193bae6c45ab9ab61e72ec2a9.webp技术派专栏

像用户活跃榜,主要是基于 Redis 的 Zset 实现的,可以根据 score(分值)进行排序,实时展示用户的活跃度。

cb89d3db3c21e5b6c099a02046dc00dc.webp技术派阅读活跃榜

当然了,这块也可以使用 Redis 的 zrevrange,直接倒序展示前 8 名用户。

参考链接

  • 三分恶的面渣逆袭:https://javabetter.cn/sidebar/sanfene/nixi.html
  • 二哥的 Java 进阶之路:https://javabetter.cn

ending

一个人可以走得很快,但一群人才能走得更远。二哥的编程星球已经有 5100 多名球友加入了,如果你也需要一个良好的学习环境,戳链接 🔗 加入我们吧。这是一个编程学习指南 + Java 项目实战 + LeetCode 刷题的私密圈子,你可以阅读星球专栏、向二哥提问、帮你制定学习计划、和球友一起打卡成长。

c9c7d1bdc2d1341c8695902789a67cab.webp

两个置顶帖「球友必看」和「知识图谱」里已经沉淀了非常多优质的学习资源,相信能帮助你走的更快、更稳、更远

欢迎点击左下角阅读原文了解二哥的编程星球,这可能是你学习求职路上最有含金量的一次点击。

16f0ff87119d2f66c060f0483c434494.webp

最后,把二哥的座右铭送给大家:没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟。共勉 💪。

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter