精华内容
下载资源
问答
  • 工作十五年 - 要有很强的业务和技术规划能力,在公司有影响力,可以影响团队和公司的技术发展方向。也可以尝试换下工作,去成长性好的公司做技术总监,扩展下技术视野。 十五年以上 - 这个我说不好,欢迎通过...

    做码农差不多十五年了,聊聊程序员十五年内职业生涯规划,共勉之

    前言

    很多人以为技术人员可以做一直做下去,但是最近我发现这个观点不完全正确,因为能一直做下去的技术人员非常稀少,因为不同的年龄段,公司对技术人员的要求会不一样,如最近传言华为计划裁掉40岁以上的程序员,首先我认为肯定不会裁掉所有40岁以上的技术人员,如CTO或高级技术专家不会被开,因为他们达到了40岁技术人员应该达到的能力,而那些没有达到该年龄段能力的技术人员会被淘汰。

    为什么现在各大公司招技术人员这么难还会有公司裁员呢?

    因为公司需要换血和降低成本。换血意味着希望进入一些新鲜或者优质血液,让团队能正向发展,新鲜的血液积极性高,潜力好,如刚毕业的学生或工作几年的技术人员。优质的血液,意味着技术能力强,能影响团队技术方向,如某个领域的技术专家,能影响团队事倍功半。

    如果你是公司老板,一个工作三年的技术人员和一个工作10年的技术人员能力差不多,而三年的更有技术激情,十年的还要照顾家庭,工资还比三年的多几倍,你会选择留下哪一个呢?是不是会开掉10年的技术人员,再招聘几个三年的呢?这就是现实的残酷。那个十几年工作经验的技术人员离职后开始找工作,但是找到合适的工作会非常困难,首先你的工资基数很大,你期望下家公司能给你更高的薪水,新公司也会考虑招聘你的投入产出比。

    所以技术人员需要居安思危,不要被眼前的高薪冲昏了头脑,小富则安是短暂的,逆水行舟才是技术人员走的路,所以我认为技术人员需要以五年为一个技术周期,每个技术周期上都要上升一个技术层级,否则随时可能会被淘汰掉,各层级建议和要求如下:

    • 应届生 - 扎实的技术基础,有技术热情。应届生技术人员我建议进入BAT这样的大型互联网公司,虽然辛苦点,但是工作几年后,技术能力和视野会大于很多工作10年的技术人员。

      注意点:系统化的学习技术,研究技术而不是使用技术。

    • 工作5年 - 在技术上做到知其然知其所以然,对用过的技术框架都能知道技术原理和优缺点,多实战少纸上谈兵,学会总结。具备独立分析和解决技术问题的能力。

      注意点:很多候选人用过N年JDK,就认为自己精通JAVA,但是面试的时候发现JDK的源码都没看过。我面试阿里的时候,也不明白为啥要问JDK源码或垃圾回收机制,但是当我去解决复杂的线上问题时,我才发现对源码或原理不熟,很难查到问题所在。如果你在小公司或非互联网公司没有这样的技术场景,可以尝试提高下业务架构能力或者利用业余时间实战并钻研技术。

    • 工作十年 - 有大型系统架构经验和技术亮点。架构经验需要在大公司有实战经验。技术亮点就是在某个技术上达到专家级别,当同事遇到某个技术问题会来咨询你,比如遇到Redis问题解决不了时会来找你。短短几句话要求非常高,招聘的时候很多技术人员都卡在这个阶段,需要有很好的技术积累和背景。

      注意点:很多技术人员开始转向管理,结果技术和管理都是半桶水,技术首先要达到一定的深度再考虑管理方向。小公司技术总监,技术停留在用,很多技术原理都不知道,如何做技术规划呢?

    • 工作十五年 - 要有很强的业务和技术规划能力,在公司内有影响力,可以影响团队和公司的技术发展方向。也可以尝试换下工作,去成长性好的公司做技术总监,扩展下技术视野。

    • 十五年以上 - 这个我说不好,欢迎通过评论提建议。

    如何进入BAT

    达到以上要求就可以进入BAT,但是我分析了下最简单进入BAT的方式是工作5年以内的技术人员,因为应届生要求TOP院校的TOP学生,工作八年以上的要求又非常高。

    展开全文
  • 【死磕JVM】五年 整整五年了 该知道JVM加载机制了!

    千次阅读 多人点赞 2021-02-27 10:04:36
    ,在Java虚拟机规范中没有进行强制约束,而是交给虚拟机的具体实现来进行把握,但是对于初始化阶段,虚拟机规范严格规定了 “有且只有” 种情况必须立即对类进行初始化(而加载、验证、准备自然需要在此之前开始)...

    类加载

    Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程

    和那些编译时需要连接工作的语言不同,在Java语言里,类型的加载,连接和初始化过程都是在程序 运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为java应用程序提供比较高的灵活性。

    当我们使用到某个类的时候,如果这个类还未从磁盘上加载到内存中,JVM就会通过三步走策略(加载、连接、初始化)来对这个类进行初始化,JVM完成这三个步骤的名称,就叫做类加载或者类初始化

    在这里插入图片描述

    类加载的时机

    什么情况下需要开始类加载的第一个阶段——加载 ,在Java虚拟机规范中没有进行强制约束,而是交给虚拟机的具体实现来进行把握,但是对于初始化阶段,虚拟机规范严格规定了 “有且只有” 五种情况必须立即对类进行初始化(而加载、验证、准备自然需要在此之前开始),具体情况如下所示:

    class文件的加载时机:

    序号内容
    1遇到 new、getstatic、putstatic、或invokestatic这四条字节码指令
    2使用 java.lang.reflect 包的方法对类进行反射调用的时候
    3初始化类时,父类没有被初始化,先初始化父类
    4虚拟机启动时,用户指定的主类(包含main()的那个类)
    5当使用JDK1.7动态语言支持的时,如果一个java.lang.invoke.MethodHandle 实例最后解析的结果REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄,并且这个方法句柄锁对应的类没有进行过初始化时

    关于序号1的详细解释:

    1. 使用 new 关键字实例化对象时
    2. 读取类的静态变量时(被 final修饰,已在编译期把结果放入常量池的静态字段除外)
    3. 设置类的静态变量时
    4. 调用一个类的静态方法时

    注意: newarray指令触发的只是数组类型本身的初始化,而不会导致其相关类型的初始化,比如,new String[]只会直接触发 String[]类的初始化,也就是触发对类[Ljava.lang.String的初始化,而直接不会触发String类的初始化。

    生成这四条指令最常见的Java代码场景是:

    对于这5种会触发类进行初始化的场景,虚拟机规范中使用了一个很强烈的限定语:“有且只有”,这5种场景中的行为称为对一个类进行主动引用。除此之外,所有引用类的方式都不会触发初始化,称为 被动引用

    需要特别指出的是,类的实例化和类的初始化是两个完全不同的概念:

    • 类的实例化是指创建一个类的实例(对象)的过程;
    • 类的初始化是指为类各个成员赋初始值的过程,是类生命周期中的一个阶段;

    被动引用的三个场景:

    1. 通过子类引用父类的静态字段,不会导致子类初始化
    /**
     * @program: jvm
     * @ClassName Test1
     * @Description:通过子类引用父类的静态字段,不会导致子类初始化
     * @author: 牧小农
     * @create: 2021-02-27 11:42
     * @Version 1.0
     **/
    public class Test1 {
    
        static {
            System.out.println("Init Superclass!!!");
        }
    
        public static void main(String[] args) {
                     int x = Son.count;
        }
    
    }
    
    class Father extends Test1{
        static int count = 1;
        static {
            System.out.println("Init father!!!");
        }
    }
    
    class Son extends Father{
        static {
            System.out.println("Init son!!!");
        }
    }
    

    输出:

    Init Superclass!!!
    Init father!!!
    

    对于静态字段,只有直接定义这个字段的类才会被初始化,因此通过其子类来引用父类中定义的静态字段,只会触发父类的初始化而不会触发子类的初始化。至于是否要触发子类的加载和验证,在虚拟机中并未明确规定,这点取决于虚拟机的具体实现。对于Sun HotSpot虚拟机来说,可通过-XX:+TraceClassLoading参数观察到此操作会导致子类的加载。

    上面的案例中,由于count字段是在Father类中定义的,因此该类会被初始化,此外,在初始化类Father的时候,虚拟机发现其父类Test1 还没被初始化,因此虚拟机将先初始化其父类Test1 ,然后初始化子类Father,而Son始终不会被初始化;

    1. 通过数组定义来引用类,不会触发此类的初始化
    /**
     * @program: jvm
     * @ClassName Test2
     * @description:
     * @author: muxiaonong
     * @create: 2021-02-27 12:03
     * @Version 1.0
     **/
    public class Test2 {
    
        public static void main(String[] args) {
            M[] m = new M[8];
        }
    
    }
    
    class M{
        static {
            System.out.println("Init M!!!");
        }
    }
    
    

    运行之后我们会发现没有输出 “Init M!!!”,说明没有触发类的初始化阶段

    1. 常量在编译阶段会存入调用类的常量池中,本质上并没有直接引用到定义常量的类,因此不会触发定义常量的类的初始化
    /**
     * @program: jvm
     * @ClassName Test3
     * @description:
     * @author: muxiaonong
     * @create: 2021-02-27 12:05
     * @Version 1.0
     **/
    public class Test3 {
    
        public static void main(String[] args) {
            System.out.println(ConstClass.COUNT);
        }
    
    }
    
    class ConstClass{
        static final int COUNT = 1;
        static{
            System.out.println("Init ConstClass!!!");
        }
    }
    

    上面代码运行后也没有输出 Init ConstClass!!!,这是因为虽然在Java源码中引用了ConstClass 类中的常量COUNT ,但其实在编译阶段通过常量传播优化,已经将常量的值 "1"存储到Test3 常量池中了,对常量ConstClass.COUNT的引用实际都被转化为Test3 类对自身常量池的引用了,也就是说,实际上Test3 的Class文件之中并没有ConstClass类的符号引用入口,这两个类在编译为Class文件之后就不存在关系

    类加载过程

    有一个名叫Class文件,它静静的躺在了硬盘上,吃香的喝辣的,他究竟需要一个怎么样的过程经历了什么,才能够从舒服的硬盘中到内存中呢?class进入内存总共有三大步。

    • 加载(Loading)
    • 连接(Linking)
    • 初始化(Initlalizing)

    1、加载

    加载 是 类加载(Class Loading) 过程的一个阶段,加载 是 类加载(Class Loading) 过程的一个阶段,加载是指将当前类的class文件读入内存中,并且创建一个 java.lang.Class的对象,也就是说,当程序中使用任何类的时候,系统都会创建一个叫 java.lang.Class对象

    在加载阶段,虚拟机需要完成以下三个事情:

    1. 通过一个类的全限定名类获取定义此类的二进制字节流(没有指明只能从一个Class文件中获取,可以从其他渠道,如:网络、动态生成、数据库等)
    2. 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
    3. 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口

    类加载器通常无须等到“首次使用”该类时才加载该类,Java虚拟机规范允许系统预先加载某些类。加载阶段与连接阶段的部分内容是交叉进行的,加载阶段尚未完成,连接阶段可能已经开始,但这些夹在夹在阶段之中进行的动作,仍然属于连接阶段的内容,这两个阶段的开始时间仍然保持着固定的先后顺序。

    2、连接

    当类被加载之后,系统会生成一个对应的Class对象,就会进入 连接阶段,连接阶段负责把类的二进制数据合并到JRE中,连接阶段又分为三个小阶段

    1.1 验证

    验证是连接阶段的第一步,这一阶段的主要目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。Java语言相对于 C/C++ 来说本身是相对安全的语言,验证阶段是非常重要的,这个阶段是否严谨,决定了Java虚拟机能不能承受恶意代码的攻击,当验证输入的字节流不符合Class文件格式的约束时,虚拟机会抛出一个 java.lang.VerifyError异常或者子类异常,从大体来说验证主要分为四个校验动作:文件格式验证、元数据验证、字节码验证、符号引用验证

    文件格式验证: 主要验证字节流是否符合Class文件格式的规范,并且能被当前版本的虚拟机处理。主要包含以下几个方面:

    • 文件格式是否以 CAFEBABE开头
    • 主次版本是否在虚拟机处理的范围内
    • 常量池的常量是否有不被支持的常量类型
    • 指向常量的各种索引值是否有指向不存在的常量或者不符合类型的常量
    • CONSTANT_Utf8_info 型的常量是否有不符合UTF8编码的数据
    • Class文件中各个部分及文件本身是否有被删除的活附件的信息

    元数据验证: 主要是对字节码描述的信息进行语义分析,主要目的是对类的元数据进行语义校验,分析是否符合Java的 语言语法的规范,保证不存在不符合Java语言的规范的元数据的信息,该阶段主要验证的方面包含以下几个方面:

    • 这个类是否有父类(除java.lang.Object)
    • 这个类的父类是否继承了不允许被继承的类(被final 修饰的类)
    • 如果这个类不是抽象类,是否实现了父类或接口之中要求的所有方法
    • 类中的字段、方法是否和父类产生矛盾

    字节码验证: 最重要也是最复杂的校验环节,通过数据流和控制流分析程序语义是否合法、符合逻辑的。主要针对类的方法体进行校验分析,保证被校验的类在运行时不会危害虚拟机安全的事情

    • 保证任何时候操作数栈的数据类型和指令代码序列都能配合工作(例如在操作栈上有一个int类型的数据,保证不会在使用的时候按照long类型来加载到本地变量表中)
    • 跳转指令不会条状到方法体以外的字节码指令上
    • 保证方法体中的数据转换是有效的,例如可以把一个子类对象赋值给父类数据类型,但是不能把父类赋值给子类数据类型

    符号引用验证: 针对符号引用转换直接引用的时候,这个装换工作会在第三阶段(字节码验证)解析阶段中发生。主要是保证引用一定会被访问到,不会出现类无法访问的问题。

    1.2 准备

    为类变量 分配内存并设置类变量初始值的阶段,这些变量所使用的内存都会在方法区进行分配,在准备阶段是把class文件静态变量赋默认值,注意:不是赋初始值,比如我们 public static int i = 8,在这个步骤 并不是把 i 赋值成8 ,而是先赋值为0

    基本类型的默认值:

    数据类型默认值
    int0
    long0L
    short(short)0
    char‘\u0000’
    byte(byte)0
    booleanfalse
    float0.0f
    double0.0d
    referencenull

    在通常情况下初始值是0,但是如果我们把上面的常量加一个final 类修饰的话,那么这个时候初始值就会编程我们指定的值 public static final int i = 8
    编译的时候Javac会把i的初始值变为8,

    1.3 解析

    把class文件常量池里面用到的符号引用转换为直接内存地址,直接可以访问到的内容
    符号引用:以一组符号来描述所引用的目标,符号可以是任何字面形式的字面量,只要不会出现冲突能够定位到就可以
    直接引用:可以是直接指向目标的指针、相对偏移量或是一个能间接定位到目标的句柄,如果有了直接引用,那引用的目标必定已经在内存中存在了

    3、初始化

    初始化是给类的静态变量赋正确的初始值,刚才我们有讲到准备阶段是复制默认值,而初始化是给静态变量赋值初始值,看下面的语句:
    public static int i = 8

    首先字节码文件被加载到内存后,先进行连接验证,通过准备阶段,给i分配内存,因为是static,所以这个时候i 等于int类型的默认初始值是0,所以i 现在是 0,到了初始化的时候,才会真正把i 赋值为8

    类加载器

    类加载器负责加载所有的类,并且为载入内存中的类生成一个 java.lang.Class实例对象,如果一个类被加载到JVM中后,同一个类不会再次被载入,就像对象有一个唯一的标识,同样载入的JVM的类也有一个唯一的标识。JVM本身有一个类加载器的层次,这个类加载器本身就是一个普通的Class,所有的Class都是被类加载器加载到内存中,我们可以称之为ClassLoader,一个顶级的父类,也是一个abstract抽象类。
    在这里插入图片描述
    Bootstrap: 类加载器的加载过程,分成不同的层次来进行加载,不同的类加载器加载不同的Class,作为最顶层的Bootstrap,它加载lib里JDK最核心的内容,比如说rt.jar charset.jar等核心类,当我们调用getClassLoader()拿到这个加载器结果是一个Null的时候,代表我们已经达到了最顶层的加载器

    Extension: Extension加载器扩展类,加载扩展包里的各种各样的文件,这些扩展包在JDK安装目录 jre/lib/ext下的jar

    App: 就是我们平时用到的application ,用来加载classpath指定的内容

    Custom ClassLoader: 自定义ClassLoader,加载自己自定义的加载器 Custom ClassLoader 的父类加载器是 application 的父类加载器是 Extension的父类加载器是Bootstrap

    注意:他们不是继承关系,而是委托关系

    public class ClassLoaderTest {
        public static void main(String[] args) {
            // 查看是谁Load到内存的,执行结果是null,因为Bootstrap使用C++实现的
            // 在Java里面没有class和它对应
            System.out.println(String.class.getClassLoader());
    
            //这个是核心类库某个包里的类执行,执行结果是Null,因为该类也是被Bootstrap加载的
            System.out.println(sun.awt.HKSCS.class.getClassLoader());
    
            //这个类是位于ext目录下某个jar文件里面,当我们调用他执行结果就是sun.misc.Launcher$ExtClassLoader@a09ee92
            System.out.println(sun.net.spi.nameservice.dns.DNSNameService.class.getClassLoader());
    
            // 这个是我们自己写的ClassLoad加载器,由sun.misc.Launcher$AppClassLoader@18b4aac2加载
            System.out.println(ClassLoaderTest.class.getClassLoader());
    
            // 是Exe的ClassLoader 调用它的getclass(),它本身也是一个class,调用它的getClassLoader,他的ClassLoader的ClassLoader就是我们的Bootstrap所以结果为Null
            System.out.println(sun.net.spi.nameservice.dns.DNSNameService.class.getClassLoader().getClass().getClassLoader());
            
        }
    }
    
    

    类加载器继承关系
    在这里插入图片描述
    这个图讲的是ClassLoader从语法上是从谁继承的,这个图只是单纯的一个语法关系,不是继承关系,大家可以记住,和上面的类加载没有一点关系,过分的大家其实可以忽略这个图

    双亲委派

    父加载器: 父加载器不是"类加载器的加载器",也不是"类加载器的父类加载器"
    双亲委派是一个孩子向父亲的方向,然后父亲向孩子方向的双亲委派过程

    当一个类加载器收到了类加载请求时候,他会先尝试从自定义里面去找,同时它内部还维护了缓存,如果在缓存中找到了就直接返回结果,如果没有找到,就向父类进行委托,父类再去缓存中找,一直到最顶级的父类,如果这个时候还没有从缓存中获取到我们想要的结果,这个时候父亲就说我你这个事情,我办不了,你要自己动,然后儿子就自己去查询对应的class类并加载,如果到了最小的一个儿子还是没有找到对应的类,就会抛出异常 Class Not Found Exception

    在这里插入图片描述
    为什么要弄双亲委派?

    这个是类加载器必问的一个面试题。

    主要为了安全,如果任何一个Class都可以把他load到内存中的话,那么我写一个 java.lang.String,如果我写入了有危险的代码,是不是就会发生安全问题,并且可以保证Java核心api中定义的类型不会被随意替换,可以防止API内库被随意更改,其次是效率问题,如果有缓存在,直接从缓存里面拿,就不用一遍一遍的去遍历查询我们的父类或者子类了。

    原创不易,一键三连是个好习惯!

    我是牧小农,怕什么真理无穷,进一步有进一步的欢喜,大家加油!!!

    展开全文
  • 我是0811月入行进入了一家10几个人,5、6程序员的公司,用了3个月就负责了项目,并且开始带组,因为公司也不太正规,我刚去时还用strut1+jdbc开发中,后来我把学spring、Ibatis等框架加入到项目中,并且自己摸索着...
  • 一名运维工程师的第一个五年

    万次阅读 多人点赞 2018-02-22 16:44:45
    一直以来,我都知道尊重他人的时间,明白人与人之间的差异很大。我希望别人理解自己,也常常花很长时间去了解、理解他人。...我不知道自己这一生能走过多少个这样的五年,尽量不要让每个五年留下太多的遗憾。每...

    一直以来,我都知道尊重他人的时间,明白人与人之间的差异很大。我希望别人理解自己,也常常花很长时间去了解、理解他人。从我的职业特性来讲,就好像计算机一样,通过不断迭代、升级概念与方法论来升级自己的操作系统。我偶尔也升级自己的硬件,始终相信通过学习来获得重生。
    时间过得飞快,眨眼之间已经大学毕业四年多,现在已经进入第五年。我不知道自己这一生能走过多少个这样的五年,尽量不要让每个五年留下太多的遗憾。每一个五年都要至少习得一个重要的技能,进而获得涅槃重生。我觉得,大学毕业第一年我们可以像无头的苍蝇一样横冲直撞,尽情地去体验生活、感受人生百态,在这个过程中一旦找到了突破口就要像蜜蜂一样,朝着百花盛开的地方不断飞行。

    我向往更加美好的生活,为了达成自己的理想和人生价值观,自学已经成为我生活中的一种习惯,学习学习再学习。某些情况下,我不太相信一个人先天就笨得不可理喻。我觉得后天的学习对一个人的成长影响深远,不愿意学习,不愿意改变这才是一个人最为致命的弱点。我相信一切的努力都遵循复利效应,只要有耐心,通过积累,就可以达到之前无法想象的效果。诸如财富、能力、魅力,以及抵御变故的能量。这一切都是靠积累获得的,都有复利效应。我相信惊喜(serendipity)其实是复利效应的终极体现,总是尝试着融会贯通。总是刻意地锻炼自己的类比思维,小心翼翼地使用类比理解新生事物,也乐于搜集、创造类比帮助别人理解新生事物。每天都要花时间认真考虑明天、明年、下一辈子要发生的事情,总是要腾出一点时间认真研究新事物。习得任何技能的过程中,我刻意训练并不依赖任何运气,想要有收获就必须有付出。越是早期,越应该花更多时间精力去学习。

    学习的核心只不过是深入理解最重要的概念,不断总结与之相关的方法论。这样的朴素总结,使得我们很容易量化自己的进步。看看自己过去一段时间里习得、打磨的概念与方法论数量就可以了。衡量学习效果的标准也很清楚:生活没有随之改变,就是没学会、没学好。实践是检验一切真理的唯一标准。不需要特定的榜样,要努力成为他人的榜样。要经常全无功利地学习,只有这样才有更多的意外好运。我们向任何人学习,只要他们有长处,我们知道研究别人的失败比研究别人的成功更有价值。

    我们中的绝大多数,一开始并不是全面的“进取型性格”,在很多方面都被“固守型性格”所拖累,但我们经过耐心的学习、练习、调整、互助,一点一点地从各个角度降低 X/Y 值 —— 使得进步阻力越来越小。在此基础上,我们不断磨练自己的逻辑思考能力,更重要的是,我们刻意磨练自己的理性决策能力,并肯于承担选择带来的后果。

    我珍爱家人,知道那是我们与这个世界最重要的关联。我们珍惜朋友,清楚他们的价值,也时时刻刻在寻找战友。我们寻找共同的价值取向,我渴望改变自己,也渴望与战友共同参与到这个世界的逐步变好的过程中。我们通过努力把学习变成乐趣,不仅是为了自己,更是为了下一代。聪明不能通过基因遗传,但绝对靠环境的潜移默化影响。

    我认真对待我们的周遭环境,我知道自己很容易被环境所影响、所塑造。又因为我一向是以主动为荣的人,所以会时时刻刻提防环境对我们的影响。我不花时间与他人争论,我只为了弄清楚事实而讨论。我不鄙视他人的能力。我自己曾经也能力不足,我们更愿意与那些欣赏我们的人共同成长。我懂得如何调整焦点,我会主动尝试从多个角度去看待问题;我们不会把时间浪费在无谓的情绪之中,我会用时间精力改变那些能够改变的事情。

    我不是圣人,肯定不小心会犯错。做错了事,我们不会逃避,我不会只用嘴道歉,但会想办法尽力用行动去弥补,只有这样做才能证明我是负责任的人。犯了错,我们会认错;若是当初选择错误,我会接受后果。我们量力而行,我知道自己不断进步是为了即便出了更大的错误或者麻烦,也依然有能力承担、承受。生活中我们早晚会遇到各式各样的问题,它也总是反复无常,在不同的情况下,我们可能会调整模式,在极端的逆境中,我也会想办法不被击败。

    事实上从毕业以来一路走来都是这样的,毕业第一年去了一家广告传媒公司,做的也是跟大学期间学习的专业相关的工作,简单、重复、身体上很累,那时候主要考虑的是如何活下去,没有考虑自己的兴趣、爱好、未来职业生涯等一系列问题,非常迷茫。半年后辞职了。之后去了云南本土的一家比较大的集团公司,数十家子公司,数千近万员工,原本以为这是一个很大的平台了,机会应该很多。记得当时是在信息部,与大学所学专业还是非常相关的,一段时间后发现这些工作还是一些比较基础的工作,无法往深入、专业的方向发展,长此以往肯定是不利于自己的成长的。工作一年多,毅然离开了。接下来去了一家全国性的的软件公司工作,薪资待遇各方面都有一定程度的提升,刚刚进去的时候感觉还是挺符合自己专业背景和兴趣爱好的,满怀激情,很快熟悉了各种工作内容。一年以后,各方面都十分熟悉了,公司又招了一位新同事,我手上的工作慢慢交过去了。那个时候我就知道自己是时候离开了,可是那时候正逢自己新房装修等各种杂事,又坚持了一段时间,直到2017年6月6日才正式离职,这时我搬到新家不到一个月。不知不觉在这里待了2年多,时间过得非常快。在这2年多,认真学习了Python、C#等编程语言还有一些乱七八糟的东西,由于没有使用,学会的东西很快忘记了。离职后修整了2天,加入了云南本土唯一一家互联网支付、金融企业。来到这边后,感觉比之前忙太多了,每天都很充实,工作上的挑战比较大,我非常喜欢这一份工作。我在这可以把我所学的东西应用到工作中,并且还需要学习很多新东西,几个月的时间我感觉到自己的成长还是蛮快的。到10月份左右我才开始重点对自己的工作做总结,并在CSDN作分享。从第二份工作开始,我觉得自己就找到了突破口,像一只小蜜蜂,朝着既定的方向不断飞行,在飞行的过程中不断修正方向。这个过程中往往伴随着跳槽、改变等各种剧痛(我每次跳槽中间间隔一般不超过一星期,但是这个过程也是十分痛苦的),一直在训练自己不依赖运气来生存。这就是我的第一个五年。
    (注:本文大量引用李笑来的《新生大学》内容,仅作学习交流使用。如有侵权请联系删除)

    展开全文
  • 目标检测】2020遥感图像目标检测综述

    万次阅读 多人点赞 2020-08-17 12:44:16
    目标检测】2020遥感图像目标检测综述本文禁止转载1. DOTA数据集:2. 待解决的问题:2.1 目标小而密集:2.2 任意旋转角:2.3 Anchor匹配问题:2.4 回归任务的边界问题:2.5 实例级噪声:3. ...
    展开全文
  • 做了五年Android,我顿悟了...

    万次阅读 多人点赞 2021-03-01 02:00:06
    两年前, 我写过一篇《我的三年Android开发总结》,时光流逝, 转眼间我已经从事Android开发已五年有余,很庆幸我依然从事着我热爱的Android开发. 我们做技术开发的人都有个习惯,那就是喜欢不定期地进行总结,当然我也不...
  • 2014终总结,我决定要实现的三个目标

    万次阅读 多人点赞 2014-12-31 09:09:24
    不知不觉,一年就这样又过去了。记得在去年的最后一天,我写了一篇年终总结,回顾了一年里...今天是2014的最后一天,在这一年当中,我的成长和收获也算是颇为丰富,下面就来回顾一下这一年所发生的事情吧。 ...
  • 数学规划模型():多目标规划模型

    千次阅读 多人点赞 2020-04-01 14:44:49
    目标规划模型多目标规划模型的基本知识多目标规划模型的绝对最优解多目标规划模型的有效解多目标规划模型的弱有效解多目标规划模型的常用解法介绍1. 主要目标法2. 分层序列法3.线性加权求和法多目标规划建模示例1...
  • 写给五年后的自己

    千次阅读 多人点赞 2020-10-05 10:34:25
    五年后的自己,你好!你是否已经达成自己的职业目标五年前的你,凭一腔热血选择互联网行业,并立志做出自己的成绩。 ​ 不管五年后的你如何,希望今天我写给你的话,可以让你想起当年下定决心。激励你继续努力...
  • 接下来我们进入Python图像识别第二阶段,该部分主要以目标检测、图像识别以及深度学习相关图像分类为主,将会分享近50篇文章,感谢您一如至往的支持。希望文章对您有所帮助,如果有不足之处,还请海涵~
  • Redmon, J., Divvala, S., Girshick, R., Farhadi, A.: You only look once: ...YOLO的全拼是You Only Look Once,顾名思义就是只看一次,把目标区域预测和目标类别预测合二为一,作者将目标检测任务看作目标区域预...
  •  从今天开始进入基于机器学习的目标检测,前几节虽然也接触了一些机器学习的方法,但它主要是做辅助工作,机器学习的方法和非机器学习的方法结合在一起使用,说到这想起来前几天看到一位博士师兄发的笑话,说的是...
  • 毕业三到五年,别让“努力”毁了你

    万次阅读 多人点赞 2018-05-29 15:33:45
     然而三到五年过去了,渐渐大家的差距就出来了。小伙伴A已经成了公司里的技术骨干,带领着自己的小团队,开始参与公司决策的事情;小伙伴B已经在业内小有名气,公众号、知乎、博客上粉丝众多...
  • 目标检测】Fast RCNN算法详解

    万次阅读 多人点赞 2016-04-12 13:05:42
    继2014的RCNN之后,Ross Girshick在15推出Fast RCNN,构思精巧,流程更为紧凑,大幅提升了目标检测的速度。
  • 我的五年工作总结。
  • 来北京五年

    千次阅读 2012-05-04 16:20:05
    偶然进入了自己五年前刚来北京的博客,那时的我也是正在准备离职,处于找工作的间隙,而现在的我也即将再次离职,下周到新单位上班。 总结这五年,自己的提高并不多。离自己的预期目标差距很多,期间有迷茫,有...
  • 第一章 绪论 1.1 研究背景与意义 当人类首次发明... 第章实现了一个基于深度网络的物体识别系统。首先介绍了系统的详细设计(包括架构,流程等),然后使用已有的数据集训练模型。最后对测试结果进行阐述和分析。
  • 机器视觉领域的核心问题之一就是目标检测(object detection),它的任务是找出图像当中所有感兴趣的目标(物体),确定其位置和大小。对于人类来说,目标检测是一个...
  • 一个互联网大佬的五年工作成长复盘

    万次阅读 多人点赞 2021-02-10 18:40:44
    对于一个有一定基础的人来说,他只要真正肯下功夫,在6个月就可以掌握任何一门学问。 6.提高软件知识和技术只是问题的表面,本质是要提高自己认识问题、分析问题、解决问题的思想高度。 7.坚持做自己懒得做但正确...
  • SSD算法对小目标不够鲁棒的最主要原因是浅层feature map的表征能力不够强 网络结构 DSSD vs SSD DSOD算法 2017ICCV提出的,SSD+DenseNet = DSOD DSOD可以从0开始训练数据,不需要预训练模型,...
  • 2016,毕业五年你为何还混得这么惨?

    万次阅读 多人点赞 2017-01-01 00:27:56
    年关将至,突然发现,毕业已经快五年了。而我现在看起来似乎还是一无所有,为什么我依然混的这么惨? 虽然说,现在都比较流行传递正能量,但是,我发现自己已经被正能量洗脑之后生活依然毫无改变,因为,我们大家似乎...
  • 2016之前目标跟踪算法总结

    万次阅读 2017-06-29 16:17:22
    作者:YaqiLYU ... 来源:知乎 著作权归作者所有。...相信很多来到这里的人和我第一次到这里一样,都是想找一种比较好的目标跟踪算法,或者想对目标跟踪这个领域有比较深入的了解,虽然这个问题是经典目标
  • 五年程序员人生的点点滴滴

    万次阅读 多人点赞 2012-06-18 10:26:27
    和大家一样,我也是一名普通的程序员,很快工作五年了。现在依然记得大学时软件工程老师曾说过的一句话,大概是这样的:“工作五年之后,就基本可以分出大家的区别了”,这句话大概有两层意思,第一,大家都基本确定...
  • 2021的第一个小目标:软考高级

    万次阅读 多人点赞 2021-04-12 10:28:46
      准备考试第一步,就是买一本官方教材,如下图所示:   大家2021还有什么目标吗?欢迎留言分享。一起加油进步。   文章最后给自己打个广告。先做个自我介绍:我是herosunly。985院校硕士毕业,现担任算法...
  • 如题,这是一位读者 even 的提问,我想很有必要认真地回答一下,因为对于不少普通人来说,还真的有这个痛点,也许是两年,也许是三年,或者更长的五年,总之,后知后觉地发现,自己还是多年前的那个自己。...
  • 为了完成月入 3W 的目标,我都做了哪些准备?

    万次阅读 多人点赞 2018-10-31 08:11:50
    我觉得像我这般年纪的(29岁),有相对扎实技术功底的(就不自谦了),对赚钱有着强烈欲望的程序员,应该定一个切实的小目标——五年内月入三万!
  • 续接上篇:草根程序员转型做项目管理走过的点点滴滴之(十四、)人团队及2013团队的建设目标   面对最近繁杂的项目,在技术总监的指导下,我对2013的团队规划做了调整,总体思想是由之前的以人为中心的团队...
  • 首先推荐大家两篇目标检测综述论文,都是201811月的。 Recent Advances in Object Detection in the Age of Deep Convolutional Neural Networks Deep Learning for Generic Object Detection: A Survey CVPR2019...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 302,558
精华内容 121,023
关键字:

五年内的目标