JDK

阿里毕玄:程序员如何提升自己的硬实力

人走茶凉 提交于 2021-02-01 11:07:47
从业余程序员到职业程序员 程序员刚入行时,我觉得最重要的是把自己培养成职业的程序员。 我的程序员起步比同龄人都晚了很多,更不用说现在的年轻人了。我大学读的是生物专业,在上大学前基本算是完全没接触过计算机。军训的时候因为很无聊,我和室友每天跑去学校的机房玩,我现在还印象很深刻,我第一次走进机房的时候,别人问,你是要玩windows,还是dos,我那是完全的一抹黑。后来就只记得在机房一堆人都是在练习盲打,军训完,盲打倒是练的差不多了,对计算机就这么产生了浓厚的兴趣,大一的时候都是玩组装机,捣鼓了一些,对计算机的硬件有了那么一些了解。 到大二后,买了一些书开始学习当时最火的网页三剑客,学会了手写HTML、PS的基本玩法之类的,课余、暑假也能开始给人做做网站什么的(那个时候做网站真的好赚钱),可能那样过了个一年左右,做静态的网页就不好赚钱了,也不好找实习工作,于是就开始学asp,写些简单的CRUD,做做留言板、论坛这些动态程序,应该算是在这个阶段接触编程了。 毕业后加入了深圳的一家做政府行业软件的公司,一个非常靠谱和给我空间的Leader,使得自己在那几年有了不错的成长,终于成了一个职业的程序员。 通常来说,业余或半职业的程序员,多数是1个人,或者很小的一个团队一起开发,使得在开发流程、协作工具(例如jira、cvs/svn/git等)、测试上通常会有很大的欠缺

switch-case分支结构总结

巧了我就是萌 提交于 2021-02-01 09:25:20
1,格式 switch(表达式){ case 常量1:执行语句1; case 常量1:执行语句1; ... ... case 常量n:执行语句n; default:执行语句;} 2,说明: 根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构的末尾处; break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构; switch结构中的表达式,只能是如下的6种类型之一: byte short char int 枚举类型 (JDK 5.0新增), string类型 (jdk7.0新增) case之后只能声明常量,禁止写范围 break关键字是可选的 default相当于IF-ELSE结构中的 else;default结构是可选的;位置是可选的,但一般写最后; 3.练习 练习一:使用switch把小写类型的char转换为大写,只转换啊a,b,c,d,e,其他的输出为other; 1 import java.util.Scanner; 2 3 public class SwitchTest1 { 4 public static void main

Spring Boot实践——Spring AOP实现之动态代理

邮差的信 提交于 2021-02-01 06:53:56
Spring AOP 介绍   AOP的介绍可以查看 Spring Boot实践——AOP实现   与AspectJ的静态代理不同,Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改字节码,而是在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。   Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理。JDK动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。JDK动态代理的核心是 InvocationHandler 接口和 Proxy 类。   如果目标类没有实现接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的类库,是利用asm开源包, 可以在运行时动态的生成某个类的子类 。注意,CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为 final ,那么它是无法使用CGLIB做动态代理的。   这里有注意的几点如下: 从Spring 3.2以后不再将CGLIB放在项目的classpath下,而是将CGLIB类打包放在spring-core下面的org.springframework中

Java虚拟机最多支持多少个线程?

回眸只為那壹抹淺笑 提交于 2021-02-01 00:28:46
作者: miracle1919 来源:http://sina.lt/getP McGovernTheory在StackOverflow提了这样一个问题: Java虚拟机最多支持多少个线程?跟虚拟机开发商有关么?跟操作系统呢?还有其他的因素吗? Eddie的回答: 这取决于你使用的CPU,操作系统,其他进程正在做的事情,你使用的Java的版本,还有其他的因素。我曾经见过一台Windows服务器在宕机之前有超过6500个线程。当然,大多数线程什么事情也没有做。一旦一台机器上有差不多6500个线程(Java里面),机器就会开始出问题,并变得不稳定。 以我的经验来看,JVM容纳的线程与计算机本身性能是正相关的。 当然了,你要有足够的本机内存,并且给Java分配了足够的内存,让每个线程都可以拥有栈(虚拟机栈),可以做任何想做的事情。任何一台拥有现代CPU(AMD或者是Intel最近的几代)和1-2G内存(取决于操作系统)的机器很容易就可以支持有上千个线程的Java虚拟机。 如果你需要一个更精确的答案,最好是自己做压测。 Charlie Martin的回答: 这里有很多的参数(可以设置)。对于特定的虚拟机,都会有自己的运行时参数。(最大线程数)一定程度上由操作系统决定的:底层的操作系统要给线程提供哪些支持?施加哪些限制?虚拟机使用的是原生的操作系统的线程还是red thread或者green

Netty的EventLoop和线程模型

此生再无相见时 提交于 2021-02-01 00:17:41
点击上方“ JavaEdge ”,关注公众号 设为“ 星标 ”,好文章不错过! 线程模型指定了os、编程语言、框架或应用程序的上下文中的线程管理的关键方面。如何、何时创建线程将对应用程序代码执行产生显著影响,开发人员必须理解不同模型之间的权衡。 而 Netty 的线程模型强大又易用,正如 Netty 的宗旨:简化你的应用程序代码,同时最大限度提高性能和可维护性。 1 线程模型发家史 早期使用多线程是按需创建启动新 Thread 执行并发的任务单元,但这在高负载下表现很差。Java5 引入 Executor ,其线程池通过缓存和重用 Thread 极大提升性能。 基本的线程池化模式: 从池的空闲线程列表中选择一个 Thread ,并被指派运行一个已提交的任务( Runnable 实现) 任务完成时,将该 Thread 返回给该列表,使其被重用 Executor 的执行逻辑 虽然 池化/重用 线程相对为每个任务都创建、销毁线程是一种进步,但它并不能消除 上下文切换的开销 ,其随线程数的增加而很快变得明显,并在高负载下更严重。此外,仅由于APP整体复杂性或并发需求,在项目生命周期内也可能会出现其他和线程相关问题。总之多线程处理很复杂,但 Netty 简化之! 2 EventLoop 接口 网络框架的基本功能 运行任务来处理在连接的生命周期内发生的 事件 。在代码中称为 事件循环 ,即

Jenkins+maven+jmeter+eclipse搭建自动化测试平台

人盡茶涼 提交于 2021-01-31 23:48:42
一、准备工作 1、jmeter准备测试脚本 2、maven环境配置 3、eclipse创建maven项目 4、Jenkins集成项目 二、jmeter准备测试脚本 使用jmeter准备测试脚本(不管录制也好还是自己手动配置也好都可以) 三、maven环境配置 1、下载maven 下载地址:http://maven.apache.org/download.cgi 2、下载之后解压 3、配置环境变量 MAVEN_HOME:C:\Program Files\Java\apache-maven-3.6.0 解压之后的目录 在Path变量加上:%MAVEN_HOME%\bin; 注:环境变量内一定是要配置好jdk的环境 在命令行下输入 mvn -v 显示出以下信息表示配置成功 四、eclipse配置maven项目 1、eclipse内创建maven项目 File—>New—>Project 然后选择maven项目 然后选择默认工作区间后点击Next 点击Next 填写Group Id和Artifct Id后点击Finish 创建成功之后生成目录如下 修改pom.xml,代码如下: < project xmlns ="http://maven.apache.org/POM/4.0.0" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"

Netty实战七之EventLoop和线程模型

白昼怎懂夜的黑 提交于 2021-01-31 23:26:20
简单地说,线程模型指定了操作系统、编程语言、框架或者应用程序的上下文中的线程管理的关键方面。Netty的线程模型强大但又易用,并且和Netty的一贯宗旨一样,旨在简化你的应用程序代码,同时最大限度地提高性能和可维护性。 1、线程模型概述 线程模型确定了代码的执行方式,由于我们总是必须规避并发执行可能会带来的副作用,所以理解所采用的并发模型(也有单线程的线程模型)的影响很重要。 因为具有多核心或多个CPU的计算机现在已经司空见惯,大多数的现代应用程序都利用了复杂的多线程处理技术以有效地利用系统资源。相比之下,在早期的Java语言中,我们使用多线程处理的主要方式无非是按需创建和启动新的Thread来执行并发的任务单元——一种在高负载下工作得很差的原始方式。Java 5随后引入了Executor API,其线程池通过缓存和重用Thread极大地提高了性能。 基本的线程池化模式可以描述为: ——从池的空闲线程列表中选择一个Thread,并且指派它去运行一个已提交的任务(一个Runnable的说笑呢) ——当任务完成时,将该Thread返回给该列表,使其可被重用。 下图说明了这个模型 虽然池化和重用线程相对简单地为每个任务都创建和销毁线程是一种进步,但是它并不能消除由上下文切换所带来的开销,其将随着线程数量的增加很快变得明显,并且在高负载下愈演愈烈。此外

IDEA overwrite报错、languagelevel设置不生效问题

故事扮演 提交于 2021-01-31 05:45:21
发现idea 倒入项目后,发现@override报错,发现是idea的jdk版本不对,需要设置大于1.5的jdk版本 解决办法: IDEA:File >> Project Structure >> Project 中设置Project language level如下 IDEA:File >> Project Structure >> Modules 中设置Project language level如下 如果languagelevel总是无效,每次项目重新编译后该配置想总是回到jdk5,需要在pom中加入plugin属性 < build > < plugins > < plugin > < groupId > org.apache.maven.plugins </ groupId > < artifactId > maven-compiler-plugin </ artifactId > < version > 3.1 </ version > < configuration > < source > 1.6 </ source > < target > 1.6 </ target > < encoding > UTF-8 </ encoding > </ configuration > </ plugin > </ plugins > </ build >

201771010130王志成《面向对象程序设计(java)》

心已入冬 提交于 2021-01-31 01:03:18
第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园: www.cnblogs.com https://www.cnblogs.com/847118824wang/ 程序设计评测: https://pintia.cn/ 847118824@qq.com 代码托管平台: https://github.com/ 847118824@qq.com 中国大学 M OOC: https://www.icourse163.org/ 17393157648 以下回答是或否 是否加入课程班级博客群 是 是否加入课程 Q Q讨论群 是 第二部分:理论知识学习部分 Java 不只是一种程序设计语言,而是一个完整的程序设计平台 –具有令人赏心悦目的语法和易于理解的语义。 –提供了一个庞大的类库,包含绘图功能,网络连接 功能和数据库功能; –有安全性、跨操作系统的可移植性以及自动垃圾收 集等服务的执行环境。 Java 是一种具有简单性、面向对象、分布式、健壮性、安全性、体系结构中立、可移植性、解释型、高性能、多线程、动态性的语言。 JDK 是 Java 的核心,它包括: Java 运行环境、 Java 工 具和 Java 基础类库 ,没有 JDK 则无法编译 Java 程序。 JDK 包含的基本工具包括: – javac –编译器,将源程序转成字节码。 – jar –打包工具

Java浮点型算术为什么精度不对?

℡╲_俬逩灬. 提交于 2021-01-31 00:58:12
每个程序员都曾被前辈告诫过:“代码中不要直接使用double类型做任何算术处理,会存在精度的问题。可以使用JDK中自带的BigDecimal处理”。事实也确实如此: double num1 = 0.1; double num2 = 0.2; System.out.println(num1+num2); /**num1+num2= 0.30000000000000004**/ 为什么会如此,算术计算为什么会存在精度的问题,且听娓娓道来? 计算机存储都是0或者1,二进制表示方式,浮点类型也是如此。但浮点型相对于整数的表示更为复杂,存在比如:小数点的精度、数字最大支持范围、存储空间、计算时间等。目前计算机的浮点类型计算机的统一标准IEE754。 什么是IEE754标准表示? 数学中常见的10进制数值科学计数法。整数部分小于10,和完整的小数,其它的部分的为10的次方表示。比如:3230000 写为3.2x10的6次方。-0.0042 写为 -4.2x10的-3次方。现在计算机是2进制表示,所以计算机的科学计数法为2进制方式。比如6.88 写为 1.72x2的2次方,0.05写为1.6x2的-5次方。 IEE754的浮点型的二进制表示方式: 符号位(Sign bit):假设sign bit为 0,表示为正数-1的0次方值为1 。sign bit 为1,表示为负数 -1的1次方值为1。 1