java 环境变量(删除java环境变量)
//@成都天府五街外卖老汉:我以前做c++的,现在大环境确实不好,我送外卖一年半了
贠学文互联网企业软件工程师疫情这两年,不断的听做java的小伙伴说,现在大环境不好了,找工作没有那么容易了。 我承认,现在的大环境,确实没有以前好了,但是我觉得现在这种环境,才是正常的。以前的大环境是太好了,好到java程序员这个行业,一点门槛都没有了。随便来一个人,去培训班培训几个月,都能出来拿高薪。你们觉得这种现象正常吗?这可是一个做技术的行业啊,一个做技术的行业,一点门槛都没有,这要是换做其他的技术行业,你敢信吗? 所以我们的现在的大环境,才是正常的。现在,只要你能力在线,想找到一份满意的工作,还是很容易。那些觉得找工作难的人,大多还是因为能力无法匹配年龄,不要说过了35岁会被嫌弃这样的话,你要知道,被嫌弃的并不是你的年龄,而是你的能力匹配不上你的年龄。只要你能力在线,随便你想干到多久。 大家怎么看呢?欢迎评论区留言讨论
我面试了很多搞Java开发有3年左右经验的居然都不知道linux的基本命令,在工作中有些三四年工作经验的同事对linux命令也不熟悉,居然连Java的linux测试环境也不知道怎么看日志。现在linux的基本命令也是后端童鞋必备技能了。tail,less,grep,more等结合查日志,netstat查看端口,ps -ef结合grep看进程。对于有3年左右经验的小伙伴,编写shell脚本是比较简单的,大部分都是命令的组装来实现的。而有些公司则使用shell加python,shell对字符串的处理能力相对较弱。
查看资料发现了一个非常适合菜鸟级程序员的网站,学习基础真的很不错,我以前一直以为是菜鸟网站最好 看了一下这个网站 发觉这个网站做得更好 知识全面 各种语言 在线环境 感觉很不错#程序员# #JAVA# #学习# #网站#
#Java#聊聊在 Java 开发中怎样更好地规避 NPE 异常。
NPE(NullPointException)异常是大家比较常见的异常,大部分互联网公司在生产环境是严禁有 NPE 出现的,也就是 0 容忍。
NPE 异常是一个运行时异常(RunTimeException),也可以称之为:非受检异常,这种异常我们一般是不需要特定处理的。
但非受检异常也分为好几种情况:(1)可忽略的异常,就是有些异常框架或系统会帮我们捕获并处理,我们上层应用可以忽略。(2)需要捕获的异常,比如一些 RPC 应用中服务端抛出的异常,这种异常我们可能需要重试或降级处理。(3)可预测的异常,像 IndexOutOfBoundsException 和 NullPointException 都属于这种异常。基于我们系统或代码稳定性、健壮性和性能考虑这种异常是不应该产生或被抛出的,而应该提前做好边界检查和空指针判断。也没有显示地捕获这类异常,会对我们程序的可读性和运行效率产生很大影响。
那我们实际开发中该怎样更好地规避 NPE 异常呢?我给大家提几个比较好的建议。
(a) JDK 8 后使用 Optional 进行非空判断;
(b)字符串相同比较时,不要直接使用 a.equals(b)这样判断,如果 a 为 null 那就直接 NPE ,建议大家使用 Apache commons 工具包下的 StringUtils.equals方法进行比较,因为这些方法已经帮你考虑到 NPE 的情况了;
(c) 当一个 Integer 类型(int的包装类)和一个 int 值进行大小比较时,不要直接使用 a == b 这样去比较,因为这会涉及到拆箱的操作,如果 Integer 类型为 null 值,拆箱时就会抛 NPE。建议大家使用 JDK 的 Objects.equals 方法,因为方法本身就考虑到 NPE 了。
(d)JDK 8 以后大家可能会经常使用集合的 stream 的相关操作,当我们对 map 后的对象集合进行比较或分组操作时(比如:max,min、reduce)一定要考虑到 map 后的对象是否为 null,否则可能会抛 NPE。
29岁大叔学JAVA,这比上班还难受,但是想想自己都快奔三了还一事无成,咬咬牙坚持一段时间,真的心累,早知道当初不选择土木工程了,搞得我毕业6年一事无成。
因为这个专业贼坑,工资低就算了,工作环境还差,毕业后基本同学们都转行了。
我就看中互联网行业工作环境优美,就果断转行JAVA,希望学习能找一份工作。
如下就是今天学习的内容:
类加载器:将字节码文件加载到内存中去(虚拟机)得到对象
JAVA文件----编译--》class文件(字节码文件)------类加载器-----》内存中去得到对象
类加载器的时机:
1.0-创建对象的时候
2.0-调用类的方法
3.0-变量赋值
4.0-反射来创建类或者字节码对象
类加载器的分类:
引导类加载器:加载jdk核心库(boot)----------------第一层(顶级父类)
扩展类加载器:加载扩展类库(ext)--------第二层
应用类加载器:加载我们自己写的类(app加载器的双亲就是引导类加载器,扩展类加载器)--------第三层
加载器的获取:通过class类对象,获得类加载器方法
双亲委派机制:先让父类加载器加载,如果父类没有这么类,就让子类加载。
好处:避免类的重复加载,
-------------------------------------------
反射:对于任意一个类
1.0-可以无视它的修饰符,获取类所有的属性以及方法。
2.0-获取配置文件的信息,动态获取信息,并创建对象和调用方法
反射过程: 将类---->编译---->源代码阶段(代码还在硬盘),字节码文件-->
-->类加载器---class类对象阶段---->反射创建对象(运行时阶段)
获得(字节码对象)class对象
1.0-源代码阶段--Class.forName("com.fanshe.Person")
2.0-class类对象阶段 --类名.class
3.0-运行时阶段-对象.getclass
动态获取构造方法,成员变量,私有方法
1.0-成员变量--set--get(对象名)--赋值
1.0-getFields-----应用于public
2.0-getDeclaredFields -应用于priate
2.1-忽略访问安全-name.setAccessible(true);
2.0-构造方法--创建对象(简化 class对象名.newInstance())
1.0-getConstructor-应用于public
2.0-getDeclaredConstructor 应用于priate
3.0-私有方法--执行方法(invoke(对象名,参数))---调用
1.0-getMethod(方法名,类对象.class)--应用于public
2.0-getDeclaredMethod(方法名,类对象.class)--应用于私有
1.1-忽略访问安全-name.setAccessible(true);
---------------------------
代理模式:作用是功能增强。
静态代理:代理类自己写
抽象角色:声明接口功能
代理角色:增强被代理角色的功能
被代理角色:实现接口功能
缺点:复杂的业务会导致代理类数量过多,而且修改接口的方法,必定影响代理类
动态代理:代理类不用自己写(使用JDK反射机制创建对象的能力)
优点:减少代理类的创建,还有修改接口的方法,不影响代理类
Proxy.newProxyInstance(被代理对象的类加载器,被代理对象的接口,处于核心业务的方法)
proxy:代理对象
method:代理对象在外面执行的方法
args:代理对象在外面执行的方法参数
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {}
2种方式:
jdk动态代理:使用jdk反射包中的类跟接口实现动态代理
cglib动态代理:cglib第三方的库,创建代理对象,cglib原理是继承重写
对公司DBA的水平持怀疑态度了!
公司的mysql使用了一层代理,代理会处理分库分表等事情,在测试环境发现唯一约束冲突时,代理返回的SQLState并不是23000,而是HY000,这样会导致java的mysql驱动不能正确的抛出对应的异常,而是抛出的通用的SQLException,后来多次测试发现任何错误代理都返回HY000,找DBA反馈这事,他说错误可以自定义并不是单机mysql返回什么错误,代理就会返回一样的,我就回复他SQLState是SQL规范,如果代理不按规范实现,可能影响上层业务,DBA让我识别错误信息的文本进行业务处理,我就直接喷他了,如果从单机迁移到你的代理,这个差异对业务来讲是巨大的,会影响业务逻辑,然后又问代理是按照哪个SQL标准实现的,他又说代理不是DBA维护,最后我直接找到维护的同事反馈此事确认是代理实现的有问题,维护同事更新代码发版后让DBA升级,DBA是一万个不愿意升级,说什么生一次级得两三个星期,最近已经升级了两次之类的话,总之是嫌麻烦,最后不得不拉上leader讨论此事,最终确定给我们的集群单独升级!原以为一切顺利,等我申请线上资源的时候,又让我们准确评估磁盘使用量和QPS,我说工单上已经填了评估的值,DBA又说尽量评估准确避免后期扩容,我反问后期扩容跟我们业务有什么关系呢?况且也是评估的值,我怎么给你保证后期百分百不会扩容,这不是逼着我开始就申请很大的资源么?DBA回复扩容需要业务配合改造,听到这话我又想喷他了,用了你的代理就是不想感知你的运维操作,一个扩容还需要业务配合改造,我配合个锤子,看来你的DBA系统建设的不怎么样嘛,SQLState的问题明显就是没遵守规范还跟我扯那么多,一点都没意识到问题严重性,居然让我识别异常信息的纯文本来做业务!!!!
跟大厂的基建相比,这里的东西还是太落后了!





