常用数据结构与方法

String

  • 公共方法 StartsWith(String) 确定此字符串实例的开头是否与指定的字符串匹配。
  • 公共方法 StartsWith(String, StringComparison) 确定在使用指定的比较选项进行比较时此字符串实例的开头是否与指定的字符串匹配。
  • 公共方法 StartsWith(String, Boolean, CultureInfo) 确定在使用指定的区域性进行比较时此字符串实例的开头是否与指定的字符串匹配。
  • 公共方法 Trim() 从当前 String 对象移除所有前导空白字符和尾部空白字符。
  • 公共方法 Trim(Char[]) 从当前 String 对象移除数组中指定的一组字符的所有前导匹配项和尾部匹配项。
  • 公共方法 TrimEnd 从当前 String 对象移除数组中指定的一组字符的所有尾部匹配项。
  • 公共方法 TrimStart 从当前 String 对象移除数组中指定的一组字符的所有前导匹配项。
  • 公共方法 IndexOf  从当前String的0索引开始查找第一次出现指定的字符与字符串,如果没有找到则返回-1。
  • Equals :确定两个String对象是否具有相同的值。String.Equals Method (System) | Microsoft Learn
  • ToCharArray  :将String实例中的字符复制到 Unicode 字符数组。
public char[] ToCharArray ();
//返回值:一个 Unicode 字符数组(Char数组),其元素是该实例的各个字符。如果此实例是空字符串,则返回的数组为空且长度为零。
public char[] ToCharArray (int startIndex, int length);
//startIndex:String实例中子字符串的起始位置。length:String实例中子字符串的长度。返回值:一个 Unicode 字符数组(Char数组),其元素是此实例中从字符位置 startIndex 开始的字符长度。
  • Join:已指定的Unicode字符(Char)和字符串(string)对目标字符串进行合并。返回一个字符串;String.Join Method (System) | Microsoft Learn
  • Format:根据指定的格式将对象值转换为字符串,并将其插入另一个字符串中。指定格式中的占位符只能小于或等于对应的对象值。  以object数组做参数:

Char

string[] words = { "Tuesday", "Вторник", "Τρίτη" };  转换为小写: tuesday  Вторник  Τρίτη 

public static char ToUpperInvariant (char c);
//返回值 :相当于参数c的大写字母,如果c已经是大写字母或不是字母,则是参数c。
public static char ToLowerInvariant (char c);
//返回值 :相当于参数c的小写字母,如果c已经是小写字母或不是字母,则是参数c。

System.Linq.Enumerable

  • 公共方法 静态成员  All<TSource> 确定序列中的所有元素(TSource)是否满足条件。
  • 公共方法 静态成员  Any<TSource>(IEnumerable<TSource>) 确定序列是否包含任何元素(TSource)。
  • 公共方法 静态成员  Any<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>) 确定序列中是否存在元素(TSource)满足条件。
使用 All与Any来判断一个集合中是否包含另一个集合:
questGuideTrackData是否包含_curTrackTaskIdList
_curTrackTaskIdList.All(delegate(int i) { return questGuideTrackData.Any(i1 => i == i1); });//_curTrackTaskIdList中的全部元素是否都满足与questGuideTrackData中的任意元素相等
*** 当集合是空集时,Any方法和All方***忽略条件判断语句,以空集的意义返回判断结果。即当集合为空集时:Any方法返回false,All方法返回true。
List<string> list = new List<string>();
bool b1 = list.All(c => false);//true
bool b2 = list.All(c => true);//true
bool b3 = list.Any(c => false);//false
bool b4 = list.Any(c => true);//false
  • 公共方法 静态成员 Cast<TResult> 将 IEnumerable 的元素强制转换为指定的类型(TResult)。 
  • 公共方法 静态成员 SequenceEqual(TSource)(IEnumerable(TSource), IEnumerable(TSource), IEqualityComparer(TSource)) 使用指定的 IEqualityComparer(T) 对两个序列的元素进行比较,以确定序列是否相等。 
  • 公共方法 静态成员 Where(TSource)(IEnumerable(TSource), Func(TSource, Boolean)) 基于谓词筛选值序列。 查找满足条件的元素
  • 公共方法 静态成员 Where(TSource)(IEnumerable(TSource), Func(TSource, Int32, Boolean)) 基于谓词筛选值序列。 将在谓词函数的逻辑中使用每个元素的索引。 查找满足条件的元素
  • 公共方法 静态成员 Concat<TSource> 连接两个序列。 
  • 公共方法 静态成员 Distinct<TSource>(IEnumerable<TSource>) 通过使用默认的相等比较器对值进行比较返回序列中的非重复元素。 
  • 公共方法 静态成员 SelectMany 具体用法: [C#] LINQ之SelectMany - cnxy - 博客园 (cnblogs.com)
  • 返回最后一个位置的值: Last()
  • 获取最小值:Min()
  • 在序列的开头添加一个值:Prepend()
  • Intersect()  :通过使用默认的相等比较器来比较值,生成两个序列的交集。返回值:包含形成两个序列的集合交集的元素的序列。
  •  IOrderedEnumerable<Tsource>.ThenByDescending() :按降序对序列中的元素进行后续排序。您可以应用任意数量的 ThenBy(按升序对序列中的元素进行后续排序。) 或 ThenByDescending 方法来指定多个排序条件。
        实例:
public class CaseInsensitiveComparer : IComparer<string>
{
    public int Compare(string x, string y)
    {
        return string.Compare(x, y, true);
    }
}

public static void ThenByDescendingEx1()
{
    string[] fruits = { "apPLe", "baNanA", "apple", "APple", "orange", "BAnana", "ORANGE", "apPLE" };

    // Sort the strings first ascending by their length and
    // then descending using a custom case insensitive comparer.
    IEnumerable<string> query =
        fruits
        .OrderBy(fruit => fruit.Length)//返回值类型IOrderedEnumerable<TSource>
        .ThenByDescending(fruit => fruit, new CaseInsensitiveComparer());

    foreach (string fruit in query)
    {
        Console.WriteLine(fruit);
    }
}

/*
    This code produces the following output:

    apPLe
    apple
    APple
    apPLE
    orange
    ORANGE
    baNanA
    BAnana
*/
  • 求两个集合之间的交集:Enumerable.Intersect<TSource>(IEnumerable<Tsource> first,IEnumerable<TSource> second);异常:first或者second为空
  • First<TSource>(this IEnumerable<TSoure> soure,Func<TSoure,Boolean> predicate) :返回第一个满足条件的元素;异常:source或者predicate为空。如果没有找到匹配的元素将会引发异常。要在未找到匹配元素时返回默认值,可以使用 FirstOrDefault 方法。

List<T>

List的底层实现:

当实例话List时如果没有给定容量(capacity)默认为长度为0的数组,否则以给定的容量为长度的数组。

List的扩容核心操作是Array.copy方法,以新的容量重新创建一个数组,并将原始数据复制到新的数组中,最后将新数组的引用给老数组。
List的容量扩充是以4个空间起步(_defaultCapacity)之后都是*2的扩容。
实际代码:

List扩容后如何压缩(节省占用的内存空间)使用Add方法后将List的Count赋值给Capacity ;使Capacity与Count平齐,数组多余的虚占空间就给清掉了。



  • 公共方法  Insert 将元素插入 List<T> 的指定索引处。 


  • 公共方法  FindAll (Predicate<T> match),参数:match:委托,用于定义要搜索的元素应满足的条件。(返回的集合的前后顺序与初始的前后顺序相同)
  • 公共方法  CopyTo(T[]) 从目标数组的开头开始,将整个 List<T> 复制到兼容的一维数组(目标数组 T[])。 
  • 公共方法  CopyTo(T[], Int32) 从目标数组的指定索引处(Int32)开始,将整个 List<T> 复制到兼容的一维数组(目标数组 T[])。 
  • 公共方法  CopyTo(Int32,T[], Int32, Int32) 从目标数组的指定索引处(第二个Int32)开始,将元素的范围(第一个Int32表示索引,第三个Int32表示长度)从 List<T> 复制到兼容的一维数组。 
一个 List<T> 的字符串创建并填充 5 个字符串。创建一个空字符串数组 15 个元素,
与 CopyTo(T[]) 方法重载可用于将列表的所有元素都复制到数组的第一个元素开始的数组。 
CopyTo(T[], Int32) 方法重载可用于所有的元素复制到数组索引 6 开头数组列表 (将索引 5 留为空)。
最后, CopyTo(Int32,T[], Int32, Int32) 使用方法重载来复制从列表中,索引 2 开始的 3 个元素,使用到数组开头的数组索引 12 (将索引 11 留为空)。然后显示该数组的内容。
using System;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        List<string> dinosaurs = new List<string>();

        dinosaurs.Add("Tyrannosaurus");
        dinosaurs.Add("Amargasaurus");
        dinosaurs.Add("Mamenchisaurus");
        dinosaurs.Add("Brachiosaurus");
        dinosaurs.Add("Compsognathus");

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        // Declare an array with 15 elements.
        string[] array = new string[15];

        dinosaurs.CopyTo(array);
        dinosaurs.CopyTo(array, 6);
        dinosaurs.CopyTo(2, array, 12, 3);

        Console.WriteLine("\nContents of the array:");
        foreach(string dinosaur in array)
        {
            Console.WriteLine(dinosaur);
        }
    }
}

/* This code example produces the following output:

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Brachiosaurus
Compsognathus

Contents of the array:
Tyrannosaurus
Amargasaurus
Mamenchisaurus
Brachiosaurus
Compsognathus

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Brachiosaurus
Compsognathus

Mamenchisaurus
Brachiosaurus
Compsognathus
 */

  • Clear() : 移除集合中的全部元素。List<T>.Clear Method (System.Collections.Generic) | Microsoft Learn
  • Count 设置为 0,同时释放集合元素对其他对象的引用。但是list的容量不变;更改容量通过调用 TrimExcess 方法或直接设置 Capacity 属性。
  • Find(Predicate<T> match) : 搜索与指定谓词定义的条件相匹配的元素,并返回整个 List<T> 中的第一个匹配项。
                                参数:Predicate<T>委托,它定义了要搜索的元素的条件。    返回值:匹配指定谓词定义的条件的第一个元素(如果找到);否则,类型 T 的默认值。异常情况:参数空异常:match=null
  • AddRange : 将指定集合的元素添加到List<T>的末尾

Dictionary<TKey,TValue>

  • TryAdd(Tkey key,TValue value): 
参数:key:要添加的元素的键;value:要添加元素的值,可以为空
返回值:如果键值对被成功添加返回true;否则返回false.
与 Add 方法不同,如果字典中存在具有给定键的元素,此方法不会引发异常。与字典索引器不同,如果字典中存在具有给定键的元素,TryAdd 不会覆盖该元素。如果键已经存在,TryAdd 什么都不做并返回 false。
  •  GetValueOrDefault(Tkey key,TValue defaultValue): 
参数:key:要获取的值的键;value:没有找到值时返回的默认值
返回值:如果找到对应键的值返回找到的值,如果没有找到返回设置的默认值。

Int32

  • TryParse(string s ,out int result);将数字的字符串表示转换为 32 位有符号整数。返回值表示操作是否成功。
    当此方法返回时,如果转换成功,则包含与 s 中包含的数字等效的 32 位有符号整数值;如果转换失败,则包含零。如果 s 参数为 null 或 Empty、格式不正确或者表示的数字小于 Int32.MinValue 或大于 Int32.MaxValue,则转换将失败。该参数在未初始化的情况下传递;结果中最初提供的任何值都将被覆盖。如果 s 参数为 null 或 Empty、格式不正确或者表示的数字小于 Int32.MinValue 或大于 Int32.MaxValue,则转换将失败。
  • ToString(IFormatProvider)  使用指定的区域性特定格式信息将此实例的数值转换为其等效的字符串表示形式。
    IFormatProvider 参数:提供区域性特定的格式设置信息的对象。是实现IFormatProvider接口的对象。Int32.ToString 方法 (System) | Microsoft Learn

Enum

  • GetHashCode() ;返回此实例值的哈希码。32 位有符号整数哈希码。
GetHashCode方法与获取Enum名称的方法做对比:
public enum CharachterSysSubTabType
{
    Attributes_MenuMain = 0,
    Inventory_MenuMain = 1,
    Skill_MenuMain = 2,
    Pets_MenuMain = 3,
}
CharachterSysSubTabType sysSubTabType = CharachterSysSubTabType.Attributes_MenuMain;
Console.WriteLine("----------Enum-------");
Console.WriteLine(sysSubTabType.GetHashCode()); // 打印结果: 0
Console.WriteLine(sysSubTabType);//打印结果:Attributes_MenuMain
Console.WriteLine(sysSubTabType.ToString());//打印结果:Attributes_MenuMain
Console.WriteLine(Enum.GetName(typeof(CharachterSysSubTabType),sysSubTabType));//打印结果:Attributes_MenuMain
Console.WriteLine("----------Enum -- end -------");
对应的IL:
		// CharachterSysSubTabType charachterSysSubTabType = CharachterSysSubTabType.Attributes_MenuMain;
		IL_0944: ldc.i4.0
		IL_0945: stloc.s 34
		// Console.WriteLine("----------Enum-------");
		IL_0947: ldstr "----------Enum-------"
		IL_094c: call void [System.Console]System.Console::WriteLine(string)
		// Console.WriteLine(charachterSysSubTabType.GetHashCode());		--打印结果: 0
		IL_0951: nop
		IL_0952: ldloca.s 34
		IL_0954: constrained. CharachterSysSubTabType
		IL_095a: callvirt instance int32 [System.Runtime]System.Object::GetHashCode()
		IL_095f: call void [System.Console]System.Console::WriteLine(int32)
		// Console.WriteLine(charachterSysSubTabType);		--打印结果:Attributes_MenuMain
		IL_0964: nop
		IL_0965: ldloc.s 34
		IL_0967: box CharachterSysSubTabType  //装箱
		IL_096c: call void [System.Console]System.Console::WriteLine(object)
		// Console.WriteLine(charachterSysSubTabType.ToString());		--打印结果:Attributes_MenuMain
		IL_0971: nop
		IL_0972: ldloca.s 34
		IL_0974: constrained. CharachterSysSubTabType
		IL_097a: callvirt instance string [System.Runtime]System.Object::ToString() // 实例化一个String对象
		IL_097f: call void [System.Console]System.Console::WriteLine(string)
		// Console.WriteLine(Enum.GetName(typeof(CharachterSysSubTabType), charachterSysSubTabType));		--打印结果:Attributes_MenuMain
		IL_0984: nop
		IL_0985: ldtoken CharachterSysSubTabType
		IL_098a: call class [System.Runtime]System.Type [System.Runtime]System.Type::GetTypeFromHandle(valuetype [System.Runtime]System.RuntimeTypeHandle)
		IL_098f: ldloc.s 34
		IL_0991: box CharachterSysSubTabType   //装箱
		IL_0996: call string [System.Runtime]System.Enum::GetName(class [System.Runtime]System.Type, object)
		IL_099b: call void [System.Console]System.Console::WriteLine(string)
		// Console.WriteLine("----------Enum -- end -------");
		IL_09a0: nop
		IL_09a1: ldstr "----------Enum -- end -------"
		IL_09a6: call void [System.Console]System.Console::WriteLine(string)
		// }
		IL_09ab: nop
		IL_09ac: ret
其中 直接对枚举实例获取名称操作与通过Enum.GetName方法获取名称都进行了装箱操作。使用ToString方法没有装箱操作。
GetHashCode返回32 位有符号整数哈希码

Queue 队列

主要字段:
object[] _array  用于存储数据
int _head 存储队头位置,对应队列的第一个值
int _tail 存储队尾位置,对应队列的最后一个值
int _size 队列中数据的长度
 int _growFactor 队列扩容时的增长因子

入队操作 :

源码:
public virtual void Enqueue(object obj)
    {
      if (this._size == this._array.Length)
      {
        int capacity = (int) ((long) this._array.Length * (long) this._growFactor / 100L);
        if (capacity < this._array.Length + 4)
          capacity = this._array.Length + 4;
        this.SetCapacity(capacity);
      }
      this._array[this._tail] = obj;
      this._tail = (this._tail + 1) % this._array.Length;
      ++this._size;
      ++this._version;
    }
解读:
判断_size的值与数组_array长度是否相同
    当_size的值与数组_array长度相同时 需要对_array数组扩容
    在队尾的位置插入元素【_array[_tail]】,重置队尾值:队尾数据 _tail + 1后与数组长度取余(%); 队列长度_size加一

出队操作:

源码:
public virtual object Dequeue()
    {
      if (this.Count == 0)
        throw new InvalidOperationException("Queue empty.");
      object obj = this._array[this._head];
      this._array[this._head] = (object) null;
      this._head = (this._head + 1) % this._array.Length;
      --this._size;
      ++this._version;
      return obj;
    }
解读:
判断_array容量是否为0;
不为0:取队头的值【_array[_head]】,重置队头值:队头数据 _head + 1后与数组长度取余(%); 队列长度_size减一

取队头元素:

源码:
public virtual object Peek()
    {
      if (this.Count == 0)
        throw new InvalidOperationException("Queue empty.");
      return this._array[this._head];
    }
解读:
判断_array容量是否为0;
不为0:取队头的值【_array[_head]】

判断某个值是否处于队列中:

public virtual bool Contains(object obj)
    {
      int index = this._head;
      int size = this._size;
      while (size-- > 0)
      {
        if (obj == null)
        {
          if (this._array[index] == null)
            return true;
        }
        else if (this._array[index] != null && this._array[index].Equals(obj))
          return true;
        index = (index + 1) % this._array.Length;
      }
      return false;
    }
解读
从队头开始变量队列元素
首先将队头位置(tempHead)和队列中数据的长度(tempSize)用临时变量储存,不能直接对原始数据做操作。
使用While循环查找:
循环条件:
        每次循环tempSize减一 直到小于等于0;
循环体:
        如果要查找的数据为空,并且_array[tempSize]的值也为空 返回true ,标记找到了元素。
        如果要查找的数据不为空,获取_array[tempSize]的值与要找到值做比较,判断是否相同,相同就是找到了。
        最后重置tempHead :tempHead + 1后与数组长度取余(%)
在循环体中还没找到则证明该值不存在与队列中

获取元素:

    internal object GetElement(int i) => this._array[(this._head + i) % this._array.Length];
(索引为队列的索引 从 0 开始) 对头位置与要查找元素的索引和 与_array.Length 取余 获取对应_array数组的实际索引值。

Stack 栈

主要字段 :
object[] _array  用于存储数据
int _size 栈中数据的长度

进栈操作:

public virtual void Push(object obj)
    {
      if (this._size == this._array.Length)
      {
        object[] destinationArray = new object[2 * this._array.Length];
        Array.Copy((Array) this._array, 0, (Array) destinationArray, 0, this._size);
        this._array = destinationArray;
      }
      this._array[this._size++] = obj;
      ++this._version;
    }
解读:
判断_size的值与数组_array长度是否相同
当_size的值与数组_array长度相同时 需要对_array数组扩容
在_array[_size]中插入元素后 _size加一。

出栈操作:

public virtual object Pop()
    {
      if (this._size == 0)
        throw new InvalidOperationException("Stack empty.");
      ++this._version;
      object obj = this._array[--this._size];
      this._array[this._size] = (object) null;
      return obj;
    }
解读:
_size是否为0,不为0:
取_size前一个元素:_array[--_size]并置空,因为_size表示数据长度,始终比_array中的索引值大一;

取栈顶元素:

public virtual object Peek()
    {
      return this._size != 0 ? this._array[this._size - 1] : throw new InvalidOperationException("Stack empty.");
    }
解读:
_size不为0:取_size前一个元素_array[_size-1],否则报错。 不能使用 _size的自减操作,会对实际数值产生影响

判断某个值是否处于栈中:

public virtual bool Contains(object obj)
    {
      int size = this._size;
      while (size-- > 0)
      {
        if (obj == null)
        {
          if (this._array[size] == null)
            return true;
        }
        else if (this._array[size] != null && this._array[size].Equals(obj))
          return true;
      }
      return false;
    }
解读:
首先将栈中数据的长度(tempSize)用临时变量储存,不能直接对原始数据做操作。
使用While循环查找:
循环条件:
    每次循环tempSize减一 直到小于等于0;
循环体:
    如果要查找的数据为空,并且_array[tempSize]的值也为空 返回true ,标记找到了元素。
    如果要查找的数据不为空,获取_array[tempSize]的值与要找到值做比较,判断是否相同,相同就是找到了。
在循环体中还没找到则证明该值不存在与栈中







全部评论

相关推荐

2025-12-16 22:19
已编辑
南昌市第三中学 Java
个人背景:27届本科&nbsp;江西普通一本院校个人经历:小厂->用友->蔚来->美团->腾讯不知不觉已经有了五段实习经历,也快在外面漂泊一年半了,在今年也完成了两年前自己想进大厂的目标,可能在别人看来确实就是一段比较传奇的过程,一步一步都在向上走,也会有很多人来问我相关学习实习的一些问题,我看到了也会尽量去回复,但现在我想给大家说的并不是千篇一律的学习路线,而是我认为更为重要的——勇气与抉择。下面我来分享一下这些年的心路历程最初学习背景:我跟很多人一样,都是刚进入大学才开始接触计算机,也刚刚拥有自己的电脑,在刚开始学习的过程没有任何人来帮助我,给予我相关的指导,完全是自己摸索出来的一条学习路线,不会有如今这样有很多完善好的速成路线,而家里人都在想让我考研,似乎本科以我的学历就业是不现实的。我也很早意识到了学历对于我的限制,所以萌生出了大一就开始实习的想法,但这个想法在当时基本上是不存在。所有人都在抨击我(这里感兴趣的话可以看我最早发的帖子),有的人说本科想进大厂痴人说梦,有的人劝我以我的学历考研才是上策,有的人说我屁都不懂就来卷,总之我很难说去看到有支持的。我大一的时候还没卷成如今这样很多大一实习,当我想找到是否有跟我一样下定决心一步一步往上走的人,我当时是没有找到的,要么是秋招的哀嚎,要么就直接是零实习进大厂(现在我知道,这里所谓的普通学历0实习进大厂的水分有很多,排除真正意义上的运气和实力,其他基本上全是造假作弊,大家自己心知肚明,也要放平心态)这就导致了一个没有先例的情况,很多人也都是拿没有先例来抨击我,包括家里人也不支持我去实习,可能很多人的积极性就会下降,但我从来不会信所谓的不可能,如果没有先例,那我就会是第一个,他们不行,是因为他们没能力,他们坚持不下去。勇气是很重要的,当你发现你身边没有人像你一样,就很少会有人相信你,看好你,但好在,我不在乎。最初实习阶段:在最初3000沟通只有零星几个面试的时候,那感觉确实很不好受,沉没成本太大,得到的正反馈却太少,当时基本上都是一天学八个小时从来不间断,没有周末没有节假日,甚至过年我都在学习,这就导致我现在都会因为我周末偶尔休息的时候会有负罪感,我感觉已经是种病了,我也知道我也可以休息会但控制不了。当时我出去实习口袋里有1w块(这是我高中三年加大一一年存下来的,基本上是很抠很抠,一个月生活费有时候有一千多有时候就五六百,但也算得上是成功攒了一点钱)但第一次总会是很害怕,担心租房被骗,担心工作能力不行,担心被公司坑,担心学校原因导致不能实习等等,基本上在前面几段实习是根本不攒钱的,代课已经花了一万多,加上租房来回,基本上只能说堪堪不负支出,后来远赴北京,作为一个南方人,有很多不适应的地方,但现在回过头来一想,已经在北京呆了一年多了。我知道很多人要么担心学校因素,要么担心赚的还没花的多,种种因素导致了实习的困难,我也很害怕,我的钱会不会最终全部打水漂,学校会不会爆雷,我以后还能顺利实习吗等等。但对于我来说,我能对自己狠下心,我能接受通勤时间一个半小时只为节省那么几百块的房租钱,我能控制自己的消费的欲望,我能每个月大把大把把钱给代课,这可能就是我能够初期实习顺利的原因,这需要勇气,也需要对自己狠。实习中的抉择:在有了两段实习经历后,我的目标就朝着大厂进发,在去蔚来的中途,我oc了七八家中小厂公司,这里面不乏一些待遇极其优越的公司(有一家我真的差点就去了),但我最终还是都拒了,因为我清楚的明白想往上走的,只有公司title会帮你说话,没有人有义务理解你的困难你的坚持,好在最后去了蔚来,也算如愿以偿。从蔚来到美团倒是没有过多纠结,因为在最开始的梦中情厂就是美团,但从美团去腾讯这个决定或许是我人生中的转折点。美团多次挽留我,帮我沟通问hr,基本上就是一定能转暑期然后成功转正,仿佛这年薪40w的工作已经触手可得,所以在拿到腾讯offer的那一刻并没有多高兴,因为我意识到这可能是我此生最接近大厂的一次机会,可能大部分人都会选择留在美团,我也认为这一定是一个好的选择。我能够走到如今,是永远相信自己的判断,我的每一步都是在赌一个好的未来,只不过,这次赌注大了点而已,或许未来我再也进不了这些所谓的大厂,但我赌的不是选择错对,我赌我不后悔。所谓信念支撑:都说人要为自己而活,但我或许做不到,毕竟我身处人情社会,有许多爱我的人在等着我成长,我也不能接受因为能力而再次放弃一段感情,最近喜欢一段歌词:爱我的人相信我我一直在努力改变所有失败为你们而存在爱我的人感谢你你们的爱就算人生不是精彩我也要勇敢的姿态最后的最后,我想给大家传递的从来都不是一个普通学历进入大厂的意气风发,我想给大家传递的,是一股相信自己能够向上的信念和可能性。在没有打比赛能力,没有开源能力,没有学历等各个限制下,我帮大家试出了一条能够向上的路。如果没有先例,那我会是第一个。我们不需要弄虚作假,只靠自己一步一步脚踏实地,哪怕慢一点,不赌自己是否成功,只赌自己不后悔,问心无愧。最后送给大家,也送给自己一段话结束2025:生活可能没你想的那么好,也不会像你想的那么糟,人的脆弱和坚强,都超乎了你的想象,有时候可能脆弱的一句话就泪流满面,有时候你发现自己咬咬牙已经走了很长的路了
等闲_:感觉咱们双非的同学都有一个共性,想证明双非也是能进大厂的,我之前所有的标签都喜欢带着双非,仿佛这样可以像别人证明自己的实力,现在我却不再想证明双非到底能不能进大厂,我的生活的所有者是我自己,享受生活,接受结果
2025年终总结
点赞 评论 收藏
分享
2025-12-30 16:42
同济大学 C++
仁狂躁使者:哎呀,不用担心,我当时配环境配了两天,项目捋不清就问问导师能不能用ai,慢慢就清了,会好起来的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务