ABSTRACTCLASS(程序员常说的底层是指什么)

伏羲号

程序员所说的底层是一个很魔幻的概念,那些年,不了解的,但是会用到的一些未知的技术项,都习惯以“底层”来命名。随着在 Java 程序员的路上越走越远,踩过坑的越来越多,才对“底层”有一点儿较为模糊的概念,简单的说一说,姑且说之,姑妄听之,娱乐为主。

ABSTRACTCLASS(程序员常说的底层是指什么)

刚参加工作时,使用 Spring MVC + Dubbo 的技术栈,经常对一个应用进行包划分,以dao、service、web等模块来命名,那时对我们来说,dao层、service层相对于web就是底层,web只要获取 service 层或 dao 层拿到数据,他不会在意你使用 mybatis 或者 hibernate 来进行数据查询,哪怕你直接使用 jdbcTemplate 也得行,前提是需要处理好 sql 注入的问题,使用 jdbcTemplate 的字符串拼接的 sql ,很容易导致 sql注入,需要注意。

而无意中接触到 Tomcat 的底层原理解析,从源码角度解析 Tomcat,讲解TCP、Http、Socket、Tomcat之间的关系,Engine---->Host---->Context---->Wrap---->Servlet之间的组织结构,可谓干货满满,但是真心没有消化多少。记得最清楚的是关于TCP和UDP协议的底层描述。Socket是Java中对通信协议的封装,其屏蔽的底层的TCP协议和UDP协议等,通过跟踪 Socket 的源码,最终定位到 TCP协议和UDP协议的都是通过 java.net.DualStackPlainDatagramSocketImpl 中的本地方法(native)和操作系统交互的,而操作系统实现了相关的本地方法,并且不同的操作系统对相关的本地方法实现逻辑不同,但都可以完成通信的功能。涉及到的本地方法如下:

class DualStackPlainDatagramSocketImpl extends AbstractPlainDatagramSocketImpl

{

。。。。。。

/* Native methods */

private static native void initIDs();

private static native int socketCreate(boolean v6Only);

private static native void socketBind(int fd, InetAddress localAddress,

int localport, boolean exclBind) throws SocketException;

private static native void socketConnect(int fd, InetAddress address, int port)

throws SocketException;

private static native void socketDisconnect(int fd);

private static native void socketClose(int fd);

private static native int socketLocalPort(int fd) throws SocketException;

private static native Object socketLocalAddress(int fd) throws SocketException;

private static native int socketReceiveOrPeekData(int fd, DatagramPacket packet,

int timeout, boolean connected, boolean peek) throws IOException;

private static native void socketSend(int fd, byte[] data, int offset, int length,

InetAddress address, int port, boolean connected) throws IOException;

private static native void socketSetIntOption(int fd, int cmd,

int optionValue) throws SocketException;

private static native int socketGetIntOption(int fd, int cmd) throws SocketException;

native int dataAvailable();

}

如上所述,相对于普通Web应用而言,Tomcat 是底层,而相对于Tomcat 而言,其底层的通信能力是底层,即Socket是底层,而相对的那些本地方法(native)也是底层。如果再往底层跟,由于Linux是开源的,其TCP协议的三次握手等源码可以看到,其实现的tcp_connect(struct sock *sk)、tcp_send_synack(struct sock *sk)、tcp_send_ack(struct sock *sk,u32 rcv_nxt)d的三次握手过程就更是底层。

底层是一个相对的概念,随着你经历的越多,会发现底层的范围越广,而对于Java技术栈的同学,JVM、中间件实现原理、各种框架如Netty、Spring等源码底层都是我们努力的方向。这些内容一般情况下很少接触到,但是一旦遇到,就是我们脱颖而出的机会。

作者:夕阳雨晴,欢迎关注我的头条号:偶尔美文,主流Java,为你讲述不一样的码农生活。

珍珠,在古代,是豪奢的代名词,只有达官贵人家的女子才能享用,因为天然珍珠稀少而珍贵。到了十九世纪末二十世纪初,随着养殖珍珠问世,珍珠逐步实现了量产,珍珠饰品才得到了很大的普及。

珍珠饰品适合各个年龄阶层的女性。珍珠项链、珍珠吊坠、珍珠耳环……真是琳琅满目。如今,爱美女子的首饰盒里,总有一两样珍珠的饰品。

珍珠饰品中,以耳环的款式最多。萝卜青菜,各有所爱。下面我就和大家聊一聊珍珠耳环的款式。

一,简单的基础款。

1.珍珠耳钉。单粒珍珠打半孔加耳针和针托,简洁大方。

2.珍珠耳钩。

万变不离其宗,很多款式的珍珠耳环都是在这两个基础款上演化而来。

二,镶嵌款

1.镶钻耳环。钻石璀璨的火彩,与珍珠配在一起,是名副其实的珠光宝气。图中的耳环是真金(18K)镶嵌真钻配水滴形珍珠,大气华贵。

2.镶嵌宝石款。碧玺、红蓝宝石、珊瑚、祖母绿等,都可以镶嵌在珍珠耳环上,与珍珠交相辉映。镶嵌底座均为18K金。下图中的圆珠均为澳白珍珠,够大够亮。

三,流苏耳线款,这种款式,秀气雅致,对宽脸型有修饰拉长的效果。

四,巴洛克款。巴洛克珍珠,就是异形珍珠。每一款巴洛克珍珠耳环,都是独一无二的。

五,时尚款。下面这些款式的珍珠耳环,是我重点向大家推荐的哦!

1.平衡木款:有单珠、双珠、三珠和多珠款。款式极其简单,但戴出来很有时尚感。耳环均采用AKOYO珍珠制作。珠子不大,但光泽极好,像小灯泡。

2.高跟鞋款,因耳环外形酷似高跟鞋而得名。

3.多用款:小香同款,大珠小珠都可以拆下来单戴,这款耳环共有五种戴法。简约又不失现代感。

4.迪奥同款双珠耳环。大珠小珠可以两个方向戴。

5.U形珍珠耳环。电视剧《我的前半生》里唐晶的同款耳环。大珠小珠都可以换方向佩戴。

6.其它款。前三图均为AKOYA珍珠,第四图是南洋金珠,图五图六是大溪地黑珍珠,皮光都非常美丽。

各位朋友,这些珍珠耳环里,有你喜欢的款式吗?

1 javac 选 A

2 int 选 D int 为关键字

3

4 选 B 4 15 选C

5 界面类型 选D

6 age[0] 选B

7 class 选A

8 .java B

9 abstract 选B

10 false 选D 横着的看的脖子疼 1 错 区分大小写 2 对 3 错 可以有多个 4 错 private 不可以被继承 public可以继承 5 错 private 不能继承 6 错 java中可以重载函数

内部类(Inner Class)和静态内部类(Static Nested Class)的区别: 定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明 为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现特定的接口。外部类按常规的类访问方式使用内部 类,唯一的差别是外部类可以访问内部类的所有方法与属性,包括私有方法与属性。 (1)创建实例 OutClass.InnerClass obj = outClassInstance.new InnerClass(); //注意是外部类实例.new,内部类:

注意是外部类本身,静态内部类 (2)内部类中的this 内 部类中的this与其他类一样是指的本身。创建内部类对象时,它会与创造它的外围对象有了某种联系,于是能访问外围类的所有成员,不需任何特殊条件,可理 解为内部类链接到外部类。 用外部类创建内部类对象时,此内部类对象会秘密的捕获一个指向外部类的引用,于是,可以通过这个引用来访问外围类的成员。 (3)外部类访问内部类 (4)内部类向上转型 内部类也可以和普通类一样拥有向上转型的特性。将内部类向上转型为基类型,尤其是接口时,内部类就有了用武之地。如果内部类是private的,只可以被它的外部类问,从而完全隐藏实现的细节。 (5)方法内的类 方法内创建的类(注意方法中也能定义类),不能加访问修饰符。另外,方法内部的类也不是在调用方法时才会创建的,它们一样也被事先编译了。 (6)静态内部类 定义静态内部类:在定义内部类的时候,可以在其前面加上一个权限修饰符static。此时这个内部类就变为了静态内部类。 通常称为嵌套类,当内部类是static时,意味着: [1]要创建嵌套类的对象,并不需要其外围类的对象; [2]不能从嵌套类的对象中访问非静态的外围类对象(不能够从静态内部类的对象中访问外部类的非静态成员); 嵌 套类与普通的内部类还有一个区别:普通内部类的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段, 也不能包含嵌套类。但是在嵌套类里可以包含所有这些东西。也就是说,在非静态内部类中不可以声明静态成员,只有将某个内部类修饰为静态类,然后才能够在这 个类中定义静态的成员变量与成员方法。 另外,在创建静态内部类时不需要将静态内部类的实例绑定在外部类的实例上。普通非静态内部类的 对象是依附在外部类对象之中的,要在一个外部类中定义一个静态的内部类,不需要利用关键字new来创建内部类的实例。静态类和方法只属于类本身,并不属于 该类的对象,更不属于其他外部类的对象。 (7)内部类标识符 每个类会产生一个.class文件,文件名即为类名。同样,内部类也会产生这么一个.class文件,但是它的名称却不是内部类的类名,而是有着严格的限制:外围类的名字,加上$,再加上内部类名字。 (8)为何要用内部类? 1. 内部类一般只为其外部类使用; 2. 内部类提供了某种进入外部类的窗户; 3. 也是最吸引人的原因,每个内部类都能独立地继承一个接口,而无论外部类是否已经继承了某个接口。因此,内部类使多重继承的解决方案变得更加完整。 /** * 总结: * 1.静态内部类可以有静态成员(方法,属性),而非静态内部类则不能有静态成员(方法,属性)。 * 2.静态内部类只能够访问外部类的静态成员,而非静态内部类则可以访问外部类的所有成员(方法,属性)。 * 3.实例化一个非静态的内部类的方法: * a.先生成一个外部类对象实例 * OutClassTest oc1 = new OutClassTest(); * b.通过外部类的对象实例生成内部类对象 * OutClassTest.InnerClass no_static_inner = oc1.new InnerClass(); * 4.实例化一个静态内部类的方法: * a.不依赖于外部类的实例,直接实例化内部类对象 * OutClassTest.InnerStaticClass inner = new OutClassTest.InnerStaticClass(); * b.调用内部静态类的方法或静态变量,通过类名直接调用 * OutClassTest.InnerStaticClass.static_value * OutClassTest.InnerStaticClass.getMessage() */

If more lines of text exist in the file, print another page.

namespace DesignPattern.Create.Component

{

abstract class Component {

protected string name;

public Component(string name)

{

this.name = name;

}

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (暂无评论,85人围观)

还没有评论,来说两句吧...