安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

Java基础(万字长文)

12月16日 遭人厌投稿
  前言
  本章节主要讲述java的一些基础语法,比如常见的数据类型,流程控制语句,类的一些属性和方法,帮助大家理解和快速入门。如果你已经对jav很熟悉了,可以跳过本章节的内容。java简单介绍
  Java是一门面向对象编程语言,Javas是静态语言。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
  这里简单说一下什么是静态语言,什么是动态语言?静态语言,比如java它需要编译成机器码,才能够被计算识别可运行,因为计算机只能看懂二进制。动态语言,不需要我们手动去编译,它可以直接去运行我们的代码文件,比较典型的python,js这种脚本语言。
  其实动态语言它本身内置了一个解释器,它通过解释器去完成我们的编译工作,所以我们感知不到。
  所谓工欲善其事,必先利其器,选择好的开发工具,能提升我们的开发体验。建议大家使用jetbrains的idea开发工具来开发java应用,目前大部分开发者都会选择使用它,非常的方便,后边我会出一篇文章专门来讲一下,如何配置我们的idea工具,使得它更加强大。下载idea
  进入官网后,直接点击download进行下载,浏览器会自动判断你的当前操作系统,选择Ultimate版本,另一个版本是社区版,我们选择专业版。下载完成后点击安装。
  默认它是一个纯英文的界面,我们也可以通过安装汉化插件,点击设置插件搜索(Chinese(Simplified)LanguagePack中文语言包)进行安装即可,重启后会看到中文界面了。配置JDK
  我们可以直接通过idea来下载jdk,也可以通过官网来下载,这里我们使用idea来下载jdk,官网下载现在好像要注册账号了,有点小麻烦。打开idea,点击新建项目,我们选择maven来新建项目,maven是java的一种包管理工具,能够很方便的帮助我们构建项目,我们开发项目可能会引用一些成熟的第三方库,这时候我们就可以用简单的配置就可以把库引进来,想了解更多,可以到它的官网。选择好了以后,跟着以下步骤来搭建我们的环境:点击项目sdk,这时候会发现是空的点击下载jdk,版本我们选择1。8,供应商我们选择亚马逊Corretto,位置我们可以默认。下载好了以后,会自动帮我们选择刚刚下载的jdk点击下一步,项目名和项目所在位置可以自定义,好了以后点击完成,会自动打开项目目录结构说明pom。xml这个文件存在于根目录,主要用于配置maven的构建信息,学习基础部分,我们可以暂时不用管它。src这个目录主要用于放我们编写的源码,下边有一个java和resource的目录,java存放我们的代码,resource主要放一些资源,比如配置文件这些,暂时可以不用管它。
  为了规范,这些目录和文件不要去重命名或者其它更改,如果改动,idea已经足够智能提醒我们不要乱改命名。JDK是什么?
  jdk(JavaDevelopmentKit),从字面意思翻译过来就是java开发的工具。打个比喻,我们打游戏之前需要安装一个软件,然后我们才能打开和操作它。那么jdk你也可以理解是一个软件,它用来帮助我们编写代码。这里还好引申另外两个名词,JRE和JVM。
  JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac。JRE根据不同操作系统,提供不同的运行时环境,所以java它也是跨平台的语言。
  JVM是JavaVirtualMachine(Java虚拟机)的缩写。它是java运行环境的一部分,是一个虚构出来的计算机,它是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM是用来解析和运行Java程序的。helloworld
  我想要输出一句你好,憨憨,怎么搞?这就安排。首先在java目录新建一个文件,一个程序要跑起来,首先要有入口,这个入口就是一个main方法,在java中,需要写在类中:publicclassBaseMain{publicstaticvoidmain(String〔〕args){System。out。println(你好,憨憨);}}
  点击绿色的箭头就可以运行了,因为idea已经帮我们把环境基础起来了,所以直接run
  为了后续方便调试,我们常会在控制台输出信息,所以在新建一个Log类:publicclassLog{publicstaticvoidinfo(Objects){System。out。println(s);}}
  然后修改我们的main方法,static修饰的方法可以直接类名方法名去调用:publicclassBaseMain{publicstaticvoidmain(String〔〕args){Log。info(你好,憨憨);}}
  好了,你学废了吗?
  基本数据类型
  数据类型,顾名思义就是数据的类型,什么是数据?举个例子,你在使用网站时,密密麻麻的文字和图片就是数据,而他们的载体,比如文字它就是字符类型,我们通常叫它为字符串,我们看到的视频,图片这种二进制数据,通常是byte类型。我们通过各种类型的数据在一起计算交互,最终实现我们的程序。
  java有8种数据类型,分别是:boolean(18个字节1位)char(2个字节16位)byte(1个字节8位)short(2个字节16位)int(4个字节32位)long(8个字节64位)float(4个字节32位)double(8个字节64位)
  float与double:floata1。1;1。1是字面量这样会使得向下转型,会丢失精度正确的写法:floata1。1f;doubleb1。1;
  隐式转换:shortc1;1是int型精度比short高没发隐式的向下转型成short这样可以达到隐式转换的目的c;c(short)(c1);流程控制
  我们说话的时候会有逻辑语句,程序也一样,有了它,就能控制程序在设定中运行,举个例子,如果我教你写java,你就做我女朋友
  在java中用if表示:这里的true是boolean类型,在数学中叫真,相反的是falseif(true){Log。info(做我女朋友);}
  如果她拒绝了咋办?并对你说了句goout!,在java中用else表示否则的意思,类似转折语句:if(true){Log。info(做我女朋友);}else{Log。info(滚);}
  你还不想放弃,我在外加请你吃饭看电影,在java中我们可以用elseif这么表示,类似二次转折:第1层判断if(教你写代码){Log。info(做我女朋友);第2层判断}elseif(吃饭){Log。info(做我女朋友);第3层判断}elseif(看电影){Log。info(做我女朋友);}else{第4层判断Log。info(滚);}
  在你的不断努力下,她终于答应跟你吃饭了,这时候你要开始想了一下预算,那么预算可能会有很多种。在java中使用switch来进行多种判断,为啥不是if,if也可以,但是多起来会导致if多层嵌套,不利于代码维护。说不定你下次改bug你都不知道写了啥。
  当然也不完全是switch我们可以拆分方法,类等等。这里为了熟悉语法:
  支持的判断类型:需要char、byte、short、int、Character、Byte、Short、Integer、String或枚举不支持:long、float、double假设cost为int型,意思是花费switch(cost){case200:Log。ingo(吃肯德基);break意思是跳出循环case100:Log。ingo(汉堡王);default:当以上条件不满足的时候会默认执行这个语句default:Log。ingo(吃煎饼果子);}
  还是刚刚的例子,吃完饭后,准备看电影,女神说了到10点,看没看完都回家,这时候你一直盯着看时间,生怕时间到了,中途你还上了个厕所,忘了数数了。实际上这是一种循环的场景,一直在检测某一环节下满足某种条件时,执行对应的任务,在java中我们通常用while来表示,while类似当。。。什么时候。没到十点会一直执行while(没到十点){配合if实现,跳出循环if(十点到了){}上厕所忘了看时间了if(上厕所){continue表示跳出当前这个时刻,但不会终止循环,下一次还是接着数数}Log。info(还剩。xx。分钟)}
  然后时间到了,你们一起走在回家的路上,心想,出都出来了,至少拉一次手,最终成功了。这种场景属于。这种场景属于,不管失败与否,事件都会执行一次,在Java中用do。。。while:do{Log。info(拉手)}while(false)
  最终女神跟你说了句:你是好人,你听了之后感动的哭了。
  多喝热水包装类型
  前方高能,如果你是小白,可能看的会有点糊涂
  基本类型都有对应的包装类型,基本类型与其对应的包装类型之间的赋值使用自动装箱与拆箱完成,这里介绍常用的包装类型,他们属于引用类型,因为他们本身也是一个对象类Integer
  通常用于整数形,举个例子:Integerx2;装箱调用了Integer。valueOf(2)拆箱调用了X。intValue()
  Integer内部有一个缓冲池,缓冲池可以有效的帮我们缓存对象,从而减少对象的频繁创建,Java8中,Integer缓存池的大小默认为128127我们可以通过源码可以看到:range〔128,127〕mustbeinterned(JLS75。1。7)assertIntegerCache。high127;
  其中javanewInteger(123)相当于新建一个对象,当我们再调用javaInteger。valueOf(123)引用的就是同一个对象。此外,Integer不可被继承,因为它的类是final修饰的。
  valueOf()方法的实现,先判断值是否在缓存池中,如果在的话就直接返回缓存池的内容,对应的源码如下:publicstaticIntegervalueOf(inti){if(iInteger。IntegerCache。lowiInteger。IntegerCache。high)returnInteger。IntegerCache。cache〔i(Integer。IntegerCache。low)〕;returnnewInteger(i);}
  看到这里,通过一个例子来感受一下:IntegeranewInteger(123);IntegerbInteger。valueOf(123);IntegercInteger。valueOf(123);System。err。println(ab);falseSystem。err。println(ac);falseSystem。err。println(cb);true自动装箱,编译器会自动调用valueOfIntegerd123;Integere124;Integerf123;System。err。println(de);false因为值不一样System。err。println(fd);true
  我们说默认的缓冲池大小为128127,那么如果超过了怎么办。从源码看,内部会根据传进去的i进行动态扩容源码部分:privatestaticclassIntegerCache{staticfinalintlow128;staticfinalIntegercache〔〕;static{highvaluemaybeconfiguredbypropertyinth127;StringintegerCacheHighPropValuesun。misc。VM。getSavedProperty(java。lang。Integer。IntegerCache。high);if(integerCacheHighPropValue!null){try{intiparseInt(integerCacheHighPropValue);iMath。max(i,127);MaximumarraysizeisInteger。MAXVALUEhMath。min(i,Integer。MAXVALUE(low)1);}catch(NumberFormatExceptionnfe){Ifthepropertycannotbeparsedintoanint,ignoreit。}}cachenewInteger〔(highlow)1〕;for(intk0;kcache。k)cache〔k〕newInteger(j);range〔128,127〕mustbeinterned(JLS75。1。7)assertInteger。IntegerCache。high127;}privateIntegerCache(){}}String
  该类型通常用于表示字符串对象,和Integer一样,它也是final修饰的不可继承,源码定义如下:publicfinalclassStringimplementsjava。io。Serializable,ComparableString,CharSequence{java8:使用char数组privatefinalcharvalue〔〕;使用final修饰的数组可以保证String不可变java9privatefinalbyte〔〕}
  我们可以看到初始值char数组是用finnal稀释的,这样保证String对象不可变的好处是什么?可以作为hash的key,可以让hash值也不可变,只需进行一次计算,可以防止key重复,在map取值的时候会通过计算,hashCode()和equals来判断key,而String的hashCode是根据char〔〕数组内容来计算得到的散列码,如果相同的内容下,那么key是不可变的String的缓存池,如果一个String被创建过了,再次获取可以从缓存池中获取,如果String可变的话就没法使用缓存池了安全性。String常用做参数天生线程安全因为它不可变
  String,StringBufferandStringBuilder三者联系?我们通过以下几点进行比较:可变性:String不可变(不可变只的是本身不可变,本质上它的操作都会产生新的Object)StringBufferandStringBuilder可变(并不会产生新的Object,利用的是缓存池)线程安全:String(通过finnal),StringBuffer(通过synchronized进行同步)StringBuilder不是线程安全的使用场景:String适合不需要频繁修改字符串StringBuilder优先使用,频繁修改字符串时在考虑多线程共享变量时使用StringBuffer继承关系:StringBuffer,StringBuilder都继承了AbstractStringBuilderStringBuffer,StringBuilder,String都不可被继承
  我们说Integer有缓冲池,那么String是不是也有呢?答案是有的。我们通常叫它常量池。
  在Java7之前,StringPool被放在运行时常量池中,它属于永久代。而在Java7,StringPool被移到堆中,这是因为永久代的空间有限,在大量使用字符串的场景下会导致OutOfMemoryError错误,不懂啥代的可以先放放,这属于jvm的环节,后边会给大家介绍。
  String。intern()方法:如果字符串常量池包含了这个String对象,则直接返回该对象,否则重新生成对象,并返回,举个例子:StringBuilderanewStringBuilder(hello);StringBuilderbnewStringBuilder(hello);StringBuilderca。append();System。out。println(ab);false两个new不同对象System。out。println(ac);trueappend操作同一个对象Stringxa。toString()。intern();Stringyb。toString()。intern();Log。info(xy);Log。info(xy);true原因:String。intern操作会把a字符串放到Stringpool并返回字符串的引用b。intern操作会去Stringpool中获取发现字符串一样,所以直接返回a的引用SSLog。info(xy);true直接使用字面量创建时,会自动加入StringPool中
  这里引申一个面试题,答案直接贴给大家:StringjavanewStringBuilder(ja)。append(va)。toString();Log。info(java);javaLog。info(javajava。intern());trueStringgonewStringBuilder(g)。append(o)。toString();Log。info(go);goLog。info(gogo。intern());trueStringjava1newStringBuilder(ja)。append(va)。toString();Log。info(java1);javaLog。info(java1java1。intern());false
  上述stringbuilder,进行类加载后,调用的时候内部默认会生成一个java的String对象(javajdk自身的原因,sum。misc。Version类注入常量池)
  关于newString
  这种方式创建字符串会获得两个对象,编译时期存在StringPool指向String的字面量存在堆中的String对象
  以下是String构造函数的源码,可以看到,在将一个字符串对象作为另一个字符串对象的构造函数参数时,并不会完全复制value数组内容,而是都会指向同一个value数组。privatefinalcharvalue〔〕;publicString(Stringoriginal){this。valueoriginal。this。hashoriginal。}
  没关系,代码能跑就行面向对象
  面向对象是一种编程思想,不仅仅在java,其它语言可以,通过这种方法轮,我们可以编写利于维护的代码,让我们的代码更加条理,更加的有艺术,有了它,后来又引入了java设计模式,它也是一种编程方法,可以把它理解为语文中的写作方法。面向对象和面向过程?
  网上介绍的也很多,但是介绍的有点复杂,这里给大家提炼几个关键字:
  面向对象:谁做了某件事(主体对象是谁)
  面向过程:做了谁的某件事(没有主体对象,一股劲的做)类和方法
  在java中,我们用类来实现面向对象,我们用java描述一个苹果对象:classApple{S}
  上面定义了一个Apple类,内部有一个color的属性,如果我们一开始想要红色的苹果,在java中可以使用构造函数:classApple{S完成初始化Apple(Stringcolor){this。}}
  想后期改颜色怎么办,我们可以使用类的方法:classApple{S完成初始化Apple(Stringcolor){this。}方法void指定的是返回值的类型,用void表示无返回值publicvoidsetColor(Stringcolor){this。}}
  如果想用两个颜色怎么办,我们可以利用方法的重载,在声明一个方法:
  重载:存在于同一个类中,指一个方法与已经存在的方法名称上相同,但是参数类型、个数、顺序至少有一个不同。
  重写:Override存在于继承体系中,指子类实现了一个与父类在方法声明上完全相同的一个方法。classApple{S完成初始化Apple(Stringcolor){this。}方法1publicvoidsetColor(Stringcolor){this。}方法2publicvoidsetColor(Stringcolor,Stringcolor){this。}}
  好了有了类,如何使用它?首先要实例化:实例AppleapplenewApple(red);调用实例方法apple。setColor(green);类的继承
  继承顾名思义,继承类的一些属性和方法,举个例子,还是刚刚的水果。java中使用extends:水果类classFurit{S完成初始化Apple(Stringcolor){this。}publicvoidsetColor(Stringcolor){this。}}苹果类,继承水果类classAppleextendsFurit{。。。。}橘子类,继承水果类classOrangeextendsFurit{。。。。}方法重写
  使用Override来重写方法classOrangeextendsFurit{OverridepublicvoidsetColor(Stringcolor){this。}}接口可以看成是完全的抽象类,java8之前不能有方法实现,java8之后可以实现,为了减少维护成本接口内部的成员默认都是public,并且不允许定义为private和protectedjava9之后允许定义private接口的字段默认都是final和static的实现接口的方法通过implements关键字接口直接也可以继承
  接口的好处:一个类可以实现多个接口,但是不能继承多个抽象类,接口主要用于约束类的一些行为,举个例子:publicinterfaceFood{voideat();}publicclassUserimplementsFood{必须实现接口的方法,不然会报错publicvoideat(){}}
  接口之间也有继承:publicinterfaceFood{voideat();}publicinterfaceFoodextendsFood{}类中的关键词
  在之前的介绍中经常会看到public,static之类的,现在我们就一一介绍它:final
  修饰变量时:作为常量,可以是运行时常量也可使编译时常量,不可改变作为引用对象,不可以修改引用,但可以修改本身的值
  修饰方法时:不能够被重写,其中private是隐式的final
  修饰类时:不能够被继承static
  修饰变量:所有实例共享静态变量,在内存中只存一份,可以通过class。name访问实例变量,每创建一个实例就会产生一个实例变量,与实例共存亡
  静态方法:静态方法在类加载的时候就存在了,不依赖任何实例,必须有实现不能是抽象方法内部方法访问时只可以访问static修饰的变量和方法,不能有thissuper关键字
  静态语句块:在类加载的时候值只运行一次static{。。。。}
  静态内部类:(static不能修饰外部类)静态内部类不能访问外部类非静态成员创建不需要依赖外部类的实例化publicclassOuterClass{classInnerClass{}publicStringget(){returnInnerClass。x;可以直接访问内部类的成员}staticclassStaticInnerClass{}publicstaticvoidmain(String〔〕args){InnerClassinnerClassnewInnerClass();OuterClass。thiscannotbereferencedfromastaticcontextOuterClassouterClassnewOuterClass();InnerClassinnerClassouterClass。newInnerClass();StaticInnerClassstaticInnerClassnewStaticInnerClass();}}
  静态导包:在使用静态变量和方法时不用再指明ClassName,从而简化代码,但可读性大大降低。importstaticcom。xxx。ClassName。private
  这个主要用于修饰私有属性和方法,只能在本类中访问public
  公开权限,表明该成员变量和方法是共有的,能在任何情况下被访问protected
  必须在同一包中才能被访问类的初始化顺序
  静态变量和静态语句块优先于实例变量和普通语句块,静态变量和静态语句块的初始化顺序取决于它们在代码中的顺序。
  存在继承的情况下,初始化顺序为:父优子静优实父类(静态变量、静态语句块)子类(静态变量、静态语句块)父类(实例变量、普通语句块)父类(构造函数)子类(实例变量、普通语句块)子类(构造函数)对象的通用方法publicnativeinthashCode()publicbooleanequals(Objectobj)protectednativeObjectclone()throwsCloneNotSupportedExceptionpublicStringtoString()publicfinalnativeC?getClass()protectedvoidfinalize()throwsThrowable{}publicfinalnativevoidnotify()publicfinalnativevoidnotifyAll()publicfinalnativevoidwait(longtimeout)throwsInterruptedExceptionpublicfinalvoidwait(longtimeout,intnanos)throwsInterruptedExceptionpublicfinalvoidwait()throwsInterruptedException
  我们介绍常用的几个:equals用于判断等价关系任何非null的对象与null比较都为false基本类型:判断值,没有equals方法引用类型:判断两个变量是否引用同一个对象,equals判断引用的对象是否等价publicstaticvoidmain(){Log。info(1。equals(1));falseLog。info();falseIntegera1;Integerb1;IntegercnewInteger(1);Log。info(a。equals(b));true11Log。info(ab);true引用的是同一个对象,原因是Integer缓冲池Log。info(ac);falsenew关键词生成的新对象所以引用不同Log。info(a。equals(c));true他们引用的对象值都是1所以相等}
  手动实现一个equals,在覆盖equals()方法时应当总是覆盖hashCode()方法,保证等价的两个对象哈希值也相等判断是否引用同一个对象是true判断类型:nullfalse类型不同false判断值是否相同:不同falseOverridepublicinthashCode(){intresult17;result31result31result31}Overridepublicbooleanequals(Objecto){if(thiso)if(onullgetClass()!o。getClass())ObjectMainthat(ObjectMain)o;if(x!that。x)if(y!that。y)returnzthat。z;}toString()
  默认返回ToStringExample4554617c这种形式,其中后面的数值为散列码的无符号十六进制表示static{Log。info(1。toString());}clone
  不推荐使用clone方法来实现对象的拷贝,建议使用拷贝构造函数或者工厂模式浅拷贝:引用的同一个对象深拷贝:引用的对象不同publicstaticvoidmain(String〔〕args){拷贝的实现CloneExampleanewCloneExample();CloneExamplebnewCloneExample(a);a。set(c);Log。info(b。get());a说明是两个不同的对象}classCloneExample{privateSCloneExample(){this。}CloneExample(CloneExamplee){this。ae。a;}publicvoidset(Stringn){this。}publicStringget(){returnthis。a;}}抽象类不能实例化只能继承如果一个类中存在抽象方法那么这个类必须是抽象类,定义抽象方法不要实现abstractclassCat{publicabstractvoidgetName();}classAnimalextendsCat{必须实现方法OverridepublicvoidgetName(){}}异常类Exception
  Error:虚拟机报错VirtualMachineErrorStackOverFlowErrorOutOfMemoryErrorAWTError
  Exception:IOExceptionEOFException。。。
  RuntimeException异常捕获
  java中使用trycatch捕获异常,finally用于程序恢复publicstaticintmain(){inta0;try{a1;thrownewException(报错了);在没有异常的情况下,返回值等于try内部的返回值}catch(Exceptione){Log。info(e。getMessage());a2;}finally{a3;Log。info(final);}}
  好了,宝儿,我觉得你学会了
  不要你觉得
投诉 评论 转载

科技部共有212项技术在北京冬奥会上落地应用央广网北京2月16日消息16日,在2022北京新闻中心新闻发布会科技冬奥有关情况专场上,科技部社发司司长祝学华介绍,2016年,在北京冬奥组委统筹协调下,科技部会同国家体育总局……时隔两年回归!小米或在9月发布5G新机这回CC系列新机真的要来了,你们是不是应该近日,工信部上出现了一款型号为2107119DC的小米5G手机。值得注意的是,有报道称,这款手机便是鸽了许久的小米CC系列手机,……增强还是变弱,p40到p50,华为采用计算光学方案替代ryyp50系列受制裁很多想用的技术无法找到供应链提供配件,虽然计算光学很给力,但还是留下太多遗憾。最遗憾的是,新一代ryyb传感器搭配新一代芯片麒麟9000的手机没有了。……缺芯!红米K40S恐延期,小米高管难产中前不久,在海外发布的小米11T系列,让不少米粉朋友都有些心动。按照往年惯例,在海外发布的小米11T系列将会在随后的一段时间里,作为红米旗下的某款型号在国内上市,并且在价格上也会……澳大利亚,为什么打压电动车?这两年,电动车行业呈现井喷势头,全球许多国家在这个领域都如火如荼地发展着。即使新冠疫情导致全球新车销售整体惨淡,电动车的销量在全球各个国家市场的增长速度仍然十分强劲。……戴助听器会造成耳朵发炎吗?戴助听器会造成耳朵发炎吗?应该是不会!一般助听器不会长期经常戴,每天总有取下来的时候,一般睡觉多数都会摘下来,不会因长期闷堵耳道,引起发炎。如果长期戴着,而且堵塞的……风行T5EVO热浪版亮相引领共创改装文化风潮有人说:时代的审美就是这个时代年轻人的审美,用这句话形容年轻人对汽车的态度非常恰当。对于一个足够成熟的汽车市场来说,车不仅是交通工具,更代表了Z世代用户对汽车的审美考量,所谓车……Java基础(万字长文)前言本章节主要讲述java的一些基础语法,比如常见的数据类型,流程控制语句,类的一些属性和方法,帮助大家理解和快速入门。如果你已经对jav很熟悉了,可以跳过本章节的内容。……有多少人用着8元保号套餐?收发短信用一下,有没有流量卡推荐?我就是用着8元的保号套餐,为什么会保号呢?那是因为这个号码从办理到现在已经有十多年了,而且现在干什么都要用手机注册,什么银行卡、支付宝、微信等等都得绑定,如果改号的话,那么将非……百度女程序员半夜打车被司机嘲讽加班到一点,收入却不如我,图啥现如今,程序员因为工作性质的原因,经常需要加班。尤其是那些在bat或者华为等大的企业,996已经不足为奇了。当然在这些公司,员工之所以加班,一方面也是在努力提高自己的竞争力,另……OPPOReno6超大杯最高能升级19G运行内存?这黑科技直在智能手机发展早期,由于处理器性能与系统优化等问题,在用了几年之后,普遍都会有卡顿等问题出现,这也让很多人在一开始的时候对智能手机有了一种先入为主的不靠谱印象,毕竟用久了就卡是……荣威新能源四月不涨价荣威新能源i6maxev605km续航加料max,纯电生活有E思。6重惊喜,E应俱全:金融礼:3年0息首付20;充电礼:赠送充电桩硬件设备;质保礼:终身整车原厂质保;保养礼:终……
好代码的味道战略篇测评完国外加密聊天APP,我决定用回国产软件机器人普及后,会不会就没有剩余价值这个说法?反垄断重拳!腾讯被责令解除独家音乐版权,限期30天完成信息光学技术在一些国家的军事行动中大显身手滴滴推出嗷嗷吃饭,重拾外卖再战美团?预算3001000的家用打印机推荐,看完你就知道怎么选购打印大疆会不会进入太空领域成为像美国SpaceX这样的企业?特斯拉面临美国监管机构调查,隔夜市值蒸发近2000亿为什么现在移动联通及电信都有套餐合约机,这些划算吗?蔚来员工被曝用公司服务器挖矿,或涉嫌违法!曾有类案开源工具将Markdown转为脑图,还支持VSCode和Vi

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利