精通java网络编程(北京IT培训分享零基础该如何学Java)

:暂无数据 2026-04-18 00:00:02 0
最近,关于精通java网络编程的讨论又热了起来。今天咱们不绕弯子,直接切入大家最关心的北京IT培训分享零基础该如何学Java问题,看看它为何如此重要。

本文目录

北京IT培训分享零基础该如何学Java

零基础该如何学习Java?应该掌握哪些Java编程基础?我们知道想要进入Java行业,基础知识的学习是必须的,只有扎实了基础,才能有以后的发展,每一个阶段都有应该学习的内容,而你经历的每一个阶段都是你成长历程中重要的一趴,经验越丰富,你获得的资历越高,自然在Java行业中的地位也是不断升级的。我们继续讨论零基础该如何学习Java?北京IT培训介绍Java编程基础知识有哪些,需要必须掌握的呢?

1、掌握静态方法和属性

静态方法和属性用于描述某一类对象群体的特征,而不是单个对象的特征。Java中大量应用了静态方法和属性,这是一个通常的技巧。但是这种技巧在很多语言中不被频繁地使用。

理解静态方法和属性对于理解类与对象的关系是十分有帮助的,在大量的Java规范中,静态方法和属性被频繁使用。因此学习者应该理解静态方法和属性。Java在方法和属性的调用上是一致的,区别只表现在声明的时候,这和c++是不同的。

2、重视接口

在面向对象早期的应用中大量使用了类继承。随着软件工程理论的不断发展,人们开始意识到了继承的众多缺点,开始努力用聚合代替继承。软件工程解决扩展性的重要原则就是抽象描述,直接使用的工具就是接口。接口近年来逐渐成为Java编程方法的核心。

另一方面,就应用而言,大部分开发是建立在规范基础之上的,不需要自己建立复杂的继承关系和庞大的类。因此读懂规范和用好规范已经成为应用程序开发人员的首要任务,Java各项规范的主要描述手段就是接口。

3、学好集合框架

Java描述复杂数据结构的主要方式是集合框架。Java没有指针,而是经过强大的集合框架描述数组、对象数组等复杂的数据结构。学好这些数据结构的描述方法对于应用程序编写,特别是涉及到服务器方、3层结构编程至关重要。程序员在这个时候不能再用诸如数据库结果集之类的结构描述数据了。

由于很多语言没有这么强大的集合框架体系,很多初学者不知所措,更不知道拿来做什么用,因此应该引起足够的重视。

4、例外捕捉

Java对例外捕捉的强调是空前的,它强迫程序员用显着的与逻辑方法完全不同的方式描述例外捕捉,对于程序描述的完整性和严谨性有很大的意义。c++也有类似的机制,但是我们看到很多C++程序员并不习惯使用这些机制。Java的初学者应该充分学习好这种例外捕捉机制,养成良好的编程习惯。

5、多线程需要理解机理

很多Java程序员热衷于多线程程序编写,认为是对逻辑能力的挑战。其实在大量应用中根本就不需要编写多线程程序,或者说大多数编写应用程序的程序员不会去写多线程程序。这是因为多线程机制都内置到基础平台当中了。

程序员应该了解的是多线程原理和多线程安全,这对于今后准确地把握程序是至关重要的。例如JSP中编写到不同的位置对于多个用户环境的安全影响完全不同,又如着名的SuperServlet是每一个访问作为一个进程,但是每一个页面是一个线程,和Servlet正好相反,对程序的性能和安全的影响有天壤之别。

6、了解网络编程

Java号称是极强的网络编程语言,但是大多数应用程序开发人员是从来不会自己开发什么底层的网络程序的。

需要做只是了解原理就够了。网络机制的实现是靠平台实现的,除非自己开发平台,否则是不需要知道socket怎么实现,怎么**访问的。因此在这方面花太多的功夫就偏离了"将来的应用开发是在成熟的平台上展开,而不是自己从底层开发平台"这一假设。

Java网络编程从入门到精通(6):使用getCanonicalHostName方法获得主机名

  getCanonicalHostName方法和getHostName方法一样 也是得到远程主机的域名 但它们有一个区别 getCanonicalHostName得到的是主机名 而getHostName得到的主机别名 getCanonicalHostName的定义如下

   public String getCanonicalHostName()

  在访问某些域名时 getCanonicalHostName方法和getHostName方法的返回值是一样的 这和DNS服务器如何解释主机名和主机别名以及它们的设置有关 如通过创建InetAddress对象后 使用getCanonicalHostName方法和getHostName方法返回的结果都是(有时直接返回IP地址 这可能和IBM的DNS服务器的处理机制有关) 如果DNS不允许通过IP地址得到域名 那么这两个方法就会返回IP地址来代替域名 getCanonicalHostName方法可以分三种情况来讨论

   使用getLocalHost创建InetAddress对象

  在这种情况下getCanonicalHostName方法和getHostName方法得到的都是本机名

   使用域名创建InetAddress对象

  在这种情况下 getCanonicalHostName方法是否要访问DNS服务器 取决于DNS服务器如何解释主机名和主机别名 也就是说 是否在创建InetAddress对象时就将主机名和主机别名都确定了 在前面已经讲过 使用域名创建InetAddress对象后 调用getHostName方法不会访问DNS服务器 但getCanonicalHostName方法就不一定了 这和DNS服务器的设置有关 如就需要访问DNS服务器 而就不需要访问DNS服务器

   使用IP地址创建InetAddress对象

  在这种情况下 getCanonicalHostName方法和getHostName方法是完全一样的 也就是说 它们得到的都是主机名 而不是主机别名

  之所以要使用主机别名 是因为有时主机名可能比较复杂 如Oracle官方网站的主机名bigip o 因此 为了使用户访问网站更方便 就增加了更简单的主机别名 如 一个主机名可能对应多个主机别名 如也是Oracle的主机别名 在IE的地址栏中输入和都可以访问Oracle官方网站 但我们发现 有很多网站通过主机名无法访问 只有通过一些别名才能访问 如 只能通过和两个主机别名访问 而不能通过它的主机名 cn来访问 这是因为在服务端通过HTTP协议做了限制 这个在前面已经讨论过了 例程 对比了getCanonicalHostName和getHostName方法在不同情况下的输出结果

   package mynet;import  *;public class DomainName{    public static void outHostName(InetAddress address  String s)    {        System out println( 通过  + s +  创建InetAddress对象 );        System out println( 主 机 名:  + address getCanonicalHostName());        System out println( 主机别名:  + address getHostName());        System out println( );    }    public static void main(String args) throws Exception    {        outHostName(InetAddress getLocalHost()   getLocalHost方法 );        outHostName(InetAddress getByName( )   );        outHostName(InetAddress getByName( )   );        outHostName(InetAddress getByName( )   );        outHostName(InetAddress getByName( )   );    }}

  运行结果

   通过getLocalHost方法创建InetAddress对象主 机 名:ComputerName主机别名:ComputerName通过创建InetAddress对象主 机 名:主机别名:通过创建InetAddress对象主 机 名: cn主机别名:通过 创建InetAddress对象主 机 名: cn主机别名: cn通过 创建InetAddress对象主 机 名: 主机别名:

lishixinzhi/Article/program/Java/hx/201311/26659

零基础也能学习Java吗需要学习多久呢

零基础也能学习java的。任何人学任何东西都是0基础,在学习的过程中查漏补缺,逐渐的成为熟手,高手,专家。

其实零基础学java从来都不可怕,可怕的是没有凿山开路的决心。如果你的内心真的对IT行业感兴趣,对Java语言感兴趣,那么你就多鼓励自己,或者你可以根据多种渠道来自学有关Java方面的知识,可以通过网络看有关Java方向的基础视频,但这条路走起来会比较艰辛。

因为网络上的信息是没有经过专业人士筛选和进行系统整理的。对于零基础的学员来说,浏览繁多的信息会变得非常吃力,也有接收不完整或者错误知识的风险。因为计算机讲究一个逻辑思维能力,说白了就是做事要讲究条理性,能够举一反三。

通过自学的方式,这或许会走更多的弯路,但坚持下去,依然会有极少一部人到达终点。至于何时到达,取决于你花的时间,走路的速度,道路的长度等因素。

所以,我觉得对于零基础的学生想好学java来参加专业的培训还是很有必要的。

当然,我首先还是要声明,我也是做培训的,在你决定培训前,我希望你明白一个道理:培训也只是带你入门,切莫押宝在培训机构身上,想要在这个行业走的更高,更远,还需要不断的学习,提升。

培训机构主要提供良好学习环境和氛围,以及入门的基础教学,契合市场和企业的技术需求,比较适合那些自学时自制能力较差的学生,以及那些大学没好好学习,或者想要进入这一行的人。

总之,零基础是可以学java的,这些基础的东西并没有什么技术性的难度,可以说就是一些需要死记硬背的东西而已。

刚开始可能很难自己动手写代码,基本都是需要看着别人的代码然后自己照葫芦画瓢的抄写,不然就不会写,所有初学者开始都是这样,所以是很正常的,这个就需要平时多写多练,一点一点累积,知识点积累的多了,逻辑通顺了,之后自然而然的就会动手写出自己的代码了,这就是一个多写多练的问题。

至于学习时间多久,这个也是因人而异,不同的基础,不同的学习方式,学习时间长短自然不同哦。一般通过培训学习的话,学习也就五六个月的样子,不过适合大学生哦。

Java网络编程从入门到精通(33):非阻塞I/O的缓冲区(Buffer)

  如果将同步I/O方式下的数据传输比做数据传输的零星方式(这里的零星是指在数据传输的过程中是以零星的字节方式进行的) 那么就可以将非阻塞I/O方式下的数据传输比做数据传输的集装箱方式(在字节和低层数据传输之间 多了一层缓冲区 因此 可以将缓冲区看做是装载字节的集装箱) 大家可以想象 如果我们要运送比较少的货物 用集装箱好象有点不太合算 而如果要运送上百吨的货物 用集装箱来运送的成本会更低 在数据传输过程中也是一样 如果数据量很小时 使用同步I/O方式会更适合 如果数据量很大时(一般以G为单位) 使用非阻塞I/O方式的效率会更高 因此 从理论上说 数据量越大 使用非阻塞I/O方式的单位成本就会越低 产生这种结果的原因和缓冲区的一些特性有着直接的关系 在本节中 将对缓冲区的一些主要特性进行讲解 使读者可以充分理解缓冲区的概念 并能通过缓冲区来提高程序的执行效率

   创建缓冲区

  Java提供了七个基本的缓冲区 分别由七个类来管理 它们都可以在java nio包中找到 这七个类如下所示

  ByteBuffer

  ShortBuffer

  IntBuffer

  CharBuffer

  FloatBuffer

  DoubleBuffer

  LongBuffer

  这七个类中的方法类似 只是它们的返回值或参数和相应的简单类型相对应 如ByteBuffer类的get方法返回了byte类型的数据 而put方法需要一个byte类型的参数 在CharBuffer类中的get和put方法返回和传递的数据类型就是char 这七个类都没有public构造方法 因此 它们不能通过new来创建相应的对象实例 这些类都可以通过两种方式来创建相应的对象实例

    通过静态方法allocate来创建缓冲区

  这七类都有一个静态的allocate方法 通过这个方法可以创建有最大容量限制的缓冲区对象 allocate的定义如下

  ByteBuffer类中的allocate方法

   public static ByteBuffer allocate(int capacity)

  IntBuffer类中的allocate方法

   public static IntBuffer allocate(int capacity)

  其他五个缓冲区类中的allocate 方法定义和上面的定义类似 只是返回值的类型是相应的缓冲区类

  allocate方法有一个参数capacity 用来指定缓冲区容量的最大值 capacity的不能小于 否则会抛出一个IllegalArgumentException异常 使用allocate来创建缓冲区 并不是一下子就分配给缓冲区capacity大小的空间 而是根据缓冲区中存储数据的情况来动态分配缓冲区的大小(实际上 在低层Java采用了数据结构中的堆来管理缓冲区的大小) 因此 这个capacity可以是一个很大的值 如 * ( M) allocate的使用方法如下

   ByteBuffer byteBuffer = ByteBuffer allocate( );IntBuffer intBuffer = IntBuffer allocate( );

  在使用allocate创建缓冲区时应用注意 capacity的含义随着缓冲区的不同而不同 如创建字节缓冲区时 capacity指的是字节数 而在创建整型(int)缓冲区时 capacity指的是int型值的数目 如果转换成字数 capacity的值应该乘 如上面代码中的intBuffer缓冲区最大可容纳的字节数是 * = 个

    通过静态方法wrap来创建缓冲区

  使用allocate方法可以创建一个空的缓冲区 而wrap方法可以利用已经存在的数据来创建缓冲区 wrap方法可以将数组直接转换成相应类型的缓冲区 wrap方法有两种重载形式 它们的定义如下

  ByteBuffer类中的wrap方法

   public static ByteBuffer wrap(byte array  int offset  int length)

  IntBuffer类中的wrap方法

   public static IntBuffer wrap(byte array  int offset  int length)

  其他五个缓冲区类中的wrap 方法定义和上面的定义类似 只是返回值的类型是相应的缓冲区类

  在wrap方法中的array参数是要转换的数组(如果是其他的缓冲区类 数组的类型就是相应的简单类型 如IntBuffer类中的wrap方法的array就是int类型) offset是要转换的子数组的偏移量 也就是子数组在array中的开始索引 length是要转换的子数组的长度 利用后两个参数可以将array数组中的一部分转换成缓冲区对象 它们的使用方法如下

   byte {         };ByteBuffer byteBuffer = ByteBuffer wrap(myByte);IntBuffer intBuffer = IntBuffer wrap(myInt     );

  可以通过缓冲区类的capacity方法来得到缓冲区的大小 capacity方法的定义如下

   public final int capacity()

  如果使用allocate方法来创建缓冲区 capacity方法的返回值就是capacity参数的值 而使用wrap方法来创建缓冲区 capacity方法的返回值是array数组的长度 但要注意 使用wrap来转换array的字数组时 capacity的长度仍然是原数组的长度 如上面代码中的intBuffer缓冲区的capacity值是 而不是

  除了可以将数组转换成缓冲区外 也可以通过缓冲区类的array方法将缓冲区转换成相应类型的数组 IntBuffer类的array方法的定义方法如下(其他缓冲区类的array的定义类似)

   public final int array()

  下面的代码演示了如何使用array方法将缓冲区转换成相应类型的数组

   int {             };IntBuffer intBuffer = IntBuffer wrap(myInt     );for (int v : intBuffer array())    System out print(v +    );

  在执行上面代码后 我们发现输出的结果是 而不是 这说明在将子数组转换成缓冲区的过程中实际上是将整个数组转换成了缓冲区 这就是用wrap包装子数组后 capacity的值仍然是原数组长度的真正原因 在使用array方法时应注意 在以下两种缓冲区中不能使用array方法

  只读的缓冲区如果使用只读缓冲区的array方法 将会抛出一个ReadOnlyBufferException异常

   使用allocateDirect方法创建的缓冲区

  如果调用这种缓冲区中的array方法 将会抛出一个UnsupportedOperationException异常

  可以通过缓冲区类的hasArray方法来判断这个缓冲区是否可以使用array方法 如果返回true 则说明这个缓冲区可以使用array方法 否则 使用array方法将会抛出上述的两种异常之一

  注意 使用array方法返回的数组并不是缓冲区数据的副本 被返回的数组实际上就是缓冲区中的数据 也就是说 array方法只返回了缓冲区数据的引用 当数组中的数据被修改后 缓冲区中的数据也会被修改 返之也是如此 关于这方面内容将在下一节 读写缓冲区中的数据 中详细讲解

  在上述的七个缓冲区类中 ByteBuffer类和CharBuffer类各自还有另外一种方法来创建缓冲区对象

  ●  ByteBuffer类

  可以通过ByteBuffer类的allocateDirect方法来创建ByteBuffer对象 allocateDirect方法的定义如下

   public static ByteBuffer allocateDirect(int capacity)

  使用allocateDirect方法可以一次性分配capacity大小的连续字节空间 通过allocateDirect方法来创建具有连续空间的ByteBuffer对象虽然可以在一定程度上提高效率 但这种方式并不是平**立的 也就是说 在一些操作系统平台上使用allocateDirect方法来创建ByteBuffer对象会使效率大幅度提高 而在另一些操作系统平台上 性能会表现得非常差 而且allocateDirect方法需要较长的时间来分配内存空间 在释放空间时也较慢 因此 在使用allocateDirect方法时应谨慎

  通过isDirect方法可以判断缓冲区对象(其他的缓冲区类也有isDirect方法 因为 ByteBuffer对象可以转换成其他的缓冲区对象 这部分内容将在后面讲解)是用哪种方式创建的 如果isDirect方法返回true 则这个缓冲区对象是用allocateDirect方法创建的 否则 就是用其他方法创建的缓冲区对象

  ●  CharBuffer类

  我们可以发现 上述的七种缓冲区中并没有字符串缓冲区 而字符串在程序中却是最常用的一种数据类型 不过不要担心 虽然java nio包中并未提供字符串缓冲区 但却可以将字符串转换成字符缓冲区(就是CharBuffer对象) 在CharBuffer类中的wrap方法除了上述的两种重载形式外 又多了两种重载形式 它们的定义如下

   public static CharBuffer wrap(CharSequence csq)public static CharBuffer wrap(CharSequence csq  int start  int end)

  其中csq参数表示要转换的字符串 但我们注意到csq的类型并不是String 而是CharSequence CharSequence类Java中四个可以表示字符串的类的父类 这四个类是String StringBuffer StringBuilder和CharBuffer(大家要注意 StringBuffer和本节讲的缓冲区类一点关系都没有 这个类在java lang包中) 也就是说 CharBuffer类的wrap方法可以将这四个类的对象转换成CharBuffer对象

  另外两个参数start和end分别是子字符串的开始索引和结束索引的下一个位置 如将字符串 中的 转换成CharBuffer对象的语句如下

   CharBuffer cb = CharBuffer wrap(     );

  下面的代码演示了如何使用wrap方法将不同形式的字符串转换成CharBuffer对象

lishixinzhi/Article/program/Java/hx/201311/26505

Java网络编程从入门到精通(4):DNS缓存

  在通过DNS查找域名的过程中 可能会经过多台中间DNS服务器才能找到指定的域名 因此 在DNS服务器上查找域名是非常昂贵的操作 在Java中为了缓解这个问题 提供了DNS缓存 当InetAddress类第一次使用某个域名(如)创建InetAddress对象后 JVM就会将这个域名和它从DNS上获得的信息(如IP地址)都保存在DNS缓存中 当下一次InetAddress类再使用这个域名时 就直接从DNS缓存里获得所需的信息 而无需再访问DNS服务器

  DNS缓存在默认时将永远保留曾经访问过的域名信息 但我们可以修改这个默认值 一般有两种方法可以修改这个默认值

   在程序中通过java security Security setProperty方法设置安全属性nel的值(单位 秒) 如下面的代码将缓存超时设为 秒

   java security Security setProperty( nel   );

   设置java security文件中的neorkaddresl属性 假设JDK的安装目录是C \jdk 那么java security文件位于c \jdk \jre\lib\security目录中 打开这个文件 找到nel属性 并将这个属性值设为相应的缓存超时(单位 秒)

  如果将nel属性值设为 那么DNS缓存数据将永远不会释放 下面的代码演示了使用和不使用DNS缓存所产生效果

   package mynet;import  *;public class MyDNS{    public static void main(String);        System out println( addresses :                            + String valueOf(System currentTimeMillis()   time)                        +  毫秒 );        for (InetAddress address : addresses )            System out println(address);    }}

  在上面的代码中设置了DNS缓存超时(通过args)再建立一个InetAddress数组 如果用户等待的这段时间比DNS缓存超时小 那么无论情况如何变化 addresses 和addresses 数组中的元素是一样的 并且创建addresses 数组所花费的时间一般为 毫秒(小于 毫秒后 Java无法获得更精确的时间)

   测试

  执行如下命令(将DNS缓存超时设为 秒)

   java mynet MyDNS  

  运行结果 (在 秒之内按任意键)

   addresses :    毫秒/ 按任意键继续addresses :   毫秒/

  运行结果 (在 秒后按任意键)

   addresses :    毫秒/ 按任意键继续addresses :   毫秒/

  在上面的测试中可能出现两个运行结果 如果在出现 按任意键继续… 后 在 秒之内按任意键继续后 就会得到运行结果 从这个结果可以看出 addresses 所用的时间为 毫秒 也就是说 addresses 并未真正访问DNS服务器 而是直接从内存中的DNS缓存得到的数据 当在 秒后按任意键继续后 就会得到运行结果 这时 内存中的DNS缓存中的数据已经释放 所以addresses 还得再访问DNS服务器 因此 addresses 的时间是 毫秒(addresses 和addresses 后面的毫秒数可能在不同的环境下的值不一样 但一般情况下 运行结果 的addresses 的值为 或是一个接近 的数 如 运行结果 的addresses 的值一般会和addresses 的值很接近 或是一个远比 大的数 如 )

   测试

  执行如下命令(ComputerName为本机的计算机名 DNS缓存超时设为永不过期)

   java mynet MyDNS ComputerName 

  运行结果(按任意键继续之前 将 删除)

   addresses :    毫秒myuniverse/ myuniverse/ 按任意键继续addresses :    毫秒myuniverse/ myuniverse/

  从上面的测试可以看出 将DNS缓存设为永不过期后 无论过多少时间 按任意键后 addresses 任然得到了两个IP地址( 和 ) 而且addresses 的时间是 毫秒 但在这时 已经被删除 因此可以判断 addresses 是从DNS缓存中得到的数据 如果运行如下的命令 并在 秒后按任意键继续后 addresses 就会只剩下一个IP地址( )

   java mynet MyDNS ComputerName 

  如果域名在DNS服务器上不存在 那么客户端在进行一段时间的尝试后(平均为 秒) 就会抛出一个UnknownHostException异常 为了让下一次访问这个域名时不再等待 DNS缓存将这个错误信息也保存了起来 也就是说 只有第一次访问错误域名时才进行 称左右的尝试 以后再访问这个域名时将直接抛出UnknownHostException异常 而无需再等待 秒钟

  访问域名失败的原因可能是这个域名真的不存在 也可能是因为DNS服务器或是其他的硬件或软件的临时故障 因此 一般不能将这个域名错误信息一直保留 在Java中可以通过neorkaddresl属性设置保留这些信息的时间 这个属性的默认值是 秒 它也可以通过java security Security setProperty方法或java security文件来设置 下面的代码演示了neorkaddresl属性的用法

   package mynet;import  *;public class MyDNS {    public static void main(String args) throws Exception    {        java security Security setProperty( neorkaddresl                          );        long time =  ;        try        {            time = System currentTimeMillis();            InetAddress getByName( );        }        catch (Exception e)        {            System out println( 不存在! address :                              + String valueOf(System currentTimeMillis()   time)                            +  毫秒 );        }        //Thread sleep( ); // 延迟 秒        try        {            time = System currentTimeMillis();            InetAddress getByName( );        }        catch (Exception e)        {            System out println( 不存在! address :                              + String valueOf(System currentTimeMillis()   time)                            +  毫秒 );        }    }}

  在上面的代码中将neorkaddresl属性值设为 秒 这个程序分别测试了address 和address 访问(这是个不存在的域名 读者可以将其换成任何不存在的域名)后 用了多长时间抛出UnknownHostException异常

  运行结果

   不存在! address :   毫秒不存在! address :   毫秒

  我们从上面的运行结果可以看出 address 使用了 毫秒就抛出了异常 因此 可以断定address 是从DNS缓存里获得了域名不可访问的信息 所以就直接抛出了UnknowHostException异常 如果将上面代码中的延迟代码的注释去掉 那么可能得到如下的运行结果

   不存在! address :   毫秒不存在! address :   毫秒

  从上面的运行结果可以看出 在第 秒时 DNS缓存中的数据已经被释放 因此 address 仍需要访问DNS服务器才能知道是不可访问的域名

   在使用DNS缓存时有两点需要注意

   可以根据实际情况来设置nel属性的值 一般将这个属性的值设为 但如果访问的是动态映射的域名(如使用动态域名服务将域名映射成ADSL的动态IP) 就可能产生IP地址变化后 客户端得到的还是原来的IP地址的情况

lishixinzhi/Article/program/Java/hx/201311/11147

IT工程师的工作内容和职业要求

IT工程师是从事IT相关工作的人员的统称。它是一个广义的概念,包括IT设计人员、IT架构人员、IT工程管理人员、程序员等一系列岗位,工作内容都与软件开发生产相关。

IT工程师的工作内容

(1)负责研发公司应用软件的模块设计、开发和交付。

(2)负责编码,单元测试。

(3)按照功能组件的详细设计。

(4)对其他软件工程师的代码进行审核。

(5)参与新知识的学习和培训。

(6)修复程序BUG。

(7)参与与其业务相关的需求变更评审。

(8)完成上级交办的其他事宜。

(9)编写技术设计文档。

IT工程师的职业要求

(1)精通Java开发语言、算法、网络编程,熟悉分布式、高并发、大数据电子商务系统开发的各种技术和解决方案。

(2)熟悉Java网络编程,有分布式网络服务开发经验,熟悉Dubbo、RMI、Hessian、WebService、RESTFul、MQ者优先。

(3)具备java程序调优的能力,可熟练使用jc***ole、jprofile等工具分析定位问题。

(4)了解大数据抽取、搜索、分析技术。

(5)能否同时负责多项目的实施与运维。

(6)熟练使用Delphi等开发语言进行C/S模式的开发工作,熟练使用Oracle数据库,并能开发存储过程、函数、触发器、序列、视图,会使用分区表,了解表空间等。

(7)能独立完成OA/MES需求收集、整理及分析工作;能通过分析OA/MES监控数据,辅助公司完成流程优化工作。

(8)良好的理解和沟通能力,较强的团队协作精神、逻辑思维强、善于交流和表达、优秀的学习能力具备支付经验优先。

Java网络编程从入门到精通(5):使用InetAddress类的getHostName方法获得域

  该方法可以得到远程主机的域名 也可以得到本机名 getHostName方法的定义如下

   public String getHostName()

  下面是三种创建InetAddress对象的方式 在这三种方式中 getHostName返回的值是不同的

   使用getLocalHost方法创建InetAddress对象

  如果InetAddress对象是用getLocalHost方法创建的 getHostName返回的是本机名 如下面的代码所示

   InetAddress address = InetAddress getLocalHost();System out println(address getHostName());  // 输出本机名

   使用域名创建InetAddress对象

  用域名作为getByName和getAllByName方法的参数调用这两个方法后 系统会自动记住这个域名 当调用getHostName方法时 就无需再访问DNS服务器 而是直接将这个域名返回 如下面的代码所示

   InetAddress address = InetAddress getByName( );System out println(address getHostName());  // 无需访问DNS服务器 直接返回域名

   使用IP地址创建InetAddress对象

  使用IP地址创建InetAddress对象时(getByName getAllByName和getByAddress方法都可以通过IP地址创建InetAddress对象) 并不需要访问DNS服务器 因此 通过DNS服务器查找域名的工作就由getHostName方法来完成 如果这个IP地址不存在或DNS服务器不允许进行IP地址和域名的映射 getHostName方法就直接返回这个IP地址 如下面的代码所示

   InetAddress address = InetAddress getByName( );System out println(address getHostName());  // 需要访问DNS服务器才能得到域名InetAddress address = InetAddress getByName( );  // IP地址不存在System out println(address getHostName());  // 直接返回IP地址

  从上面的三种情况可以看出 只有通过使用IP地址创建的InetAddress对象调用getHostName方法时才访问DNS服务器 在其他情况 getHostName方法并不会访问DNS服务器 而是直接将域名或本机名返回 下面的代码演示了在不同情况下如何使用getHostName方法 并计算了各种情况所需的毫秒数

   package mynet;    import  *;    public class DomainName  {      public static void main(String args) throws Exception      {          long time =  ;          // 得到本机名          InetAddress address  = InetAddress getLocalHost();          System out println( 本机名    + address getHostName());          // 直接返回域名          InetAddress address  = InetAddress getByName( );          time = System currentTimeMillis();          System out print( 直接得到域名    + address getHostName());          System out println(   所用时间                           + String valueOf(System currentTimeMillis()   time) +   毫秒 );          // 通过DNS查找域名          InetAddress address  = InetAddress getByName( );          System out println( address :    + address );  // 域名为空          time = System currentTimeMillis();          System out print( 通过DNS查找域名    + address getHostName());          System out println(   所用时间 + String valueOf(System currentTimeMillis()   time)+   毫秒 );          System out println( address :    + address );  // 同时输出域名和IP地址      }  }

  运行结果

   本机名  ComputerName直接得到域名    所用时间  毫秒address :  / 通过DNS查找域名  bigip o  所用时间  毫秒address :  bigip o/

lishixinzhi/Article/program/Java/hx/201311/26413

这篇关于精通java网络编程北京IT培训分享零基础该如何学Java的内容,是我们团队智慧的输出。如果它照亮了你,那么这智慧便有了光。
本文编辑:admin

更多文章:


php在线教程bscs(php多线程教程)

php在线教程bscs(php多线程教程)

从一个常见的误区说起:很多人学php在线教程bscs,却忽略了php多线程教程。结果事倍功半。希望你不会再犯这个错误。

2026年4月18日 02:00

江门网站建设(江门市灵动云商科技有限公司怎么样)

江门网站建设(江门市灵动云商科技有限公司怎么样)

今天这份关于江门网站建设的指南,将用80%的篇幅讲透江门市灵动云商科技有限公司怎么样这个决定成败的细节,绝对让你不虚此行。

2026年4月18日 01:40

lanman工作站(lanman工作站找不到来宾访问)

lanman工作站(lanman工作站找不到来宾访问)

想知道那些精通lanman工作站的人,是如何看待lanman工作站找不到来宾访问的吗?本篇将为你揭秘他们的思考路径。

2026年4月18日 01:20

tooltip怎么翻译(谁的英语或者VB好的进来帮我翻译一下VB语言中的英文意思)

tooltip怎么翻译(谁的英语或者VB好的进来帮我翻译一下VB语言中的英文意思)

有没有觉得tooltip怎么翻译听起来很高深?别怕,今天我们就把它和谁的英语或者VB好的进来帮我翻译一下VB语言中的英文意思一起,拆解成易懂的小知识点。

2026年4月18日 01:00

php开发工具有(PHP开发通常使用什么工具)

php开发工具有(PHP开发通常使用什么工具)

上一篇文章我们介绍了php开发工具有的基础,今天我们将深入其核心环节——PHP开发通常使用什么工具,看看它如何承前启后。

2026年4月18日 00:40

吃了60片抑郁药会死吗(吃抑郁症的药吃多了会死吗)

吃了60片抑郁药会死吗(吃抑郁症的药吃多了会死吗)

花费5分钟阅读本文,您将获得对吃了60片抑郁药会死吗和吃抑郁症的药吃多了会死吗的清晰认知,远超自己搜索数小时的效果。

2026年4月18日 00:20

精通java网络编程(北京IT培训分享零基础该如何学Java)

精通java网络编程(北京IT培训分享零基础该如何学Java)

最近,关于精通java网络编程的讨论又热了起来。今天咱们不绕弯子,直接切入大家最关心的北京IT培训分享零基础该如何学Java问题,看看它为何如此重要。

2026年4月18日 00:00

删除了的数据库还有可能恢复吗(用友T3数据库数据被删除了可以恢复吗)

删除了的数据库还有可能恢复吗(用友T3数据库数据被删除了可以恢复吗)

相信点开这篇文章的你,一定对删除了的数据库还有可能恢复吗抱有好奇。没关系,下面我们就结合用友T3数据库数据被删除了可以恢复吗,带你一步步揭开它的面纱。

2026年4月17日 23:40

fancy font generator(如何在 Mac 下的 LaTeX 中使用中文字体)

fancy font generator(如何在 Mac 下的 LaTeX 中使用中文字体)

最近,关于fancy font generator的讨论又热了起来。今天咱们不绕弯子,直接切入大家最关心的如何在 Mac 下的 LaTeX 中使用中文字体问题,看看它为何如此重要。

2026年4月17日 23:20

es6格式化字符串(ES6-字符串方法及其实现)

es6格式化字符串(ES6-字符串方法及其实现)

本文是您理解es6格式化字符串的最后一站。我们将通过剖析ES6-字符串方法及其实现,帮你打通任督二脉,彻底领悟。

2026年4月17日 23:00

最近更新

php在线教程bscs(php多线程教程)
2026-04-18 02:00:03 浏览:0
fancy font generator(如何在 Mac 下的 LaTeX 中使用中文字体)
2026-04-17 23:20:02 浏览:0
热门文章

oracle 字符串转数组(oracle TYPE)
2026-04-06 19:00:02 浏览:0
floatleft是什么意思(displayflex和floatleft的区别)
2026-04-17 04:40:03 浏览:0
标签列表