`
ioio
  • 浏览: 140895 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

随后笔记3

阅读更多
17. WeakReference 弱引用对象,它们并不禁止其指示对象变得可终结,并被终结,然后被回收。弱引用最常用于实现规范化的映射。 假定垃圾回收器确定在某一时间点上某个对象是弱可到达对象。这时,它将自动清除针对此对象的所有弱引用,以及通过强引用链和软引用,可以从其到达该对象的针对任何其他弱可到达对象的所有弱引用。同时它将声明所有以前的弱可到达对象为可终结的。在同一时间或晚些时候,它将那些已经向引用队列注册的新清除的弱引用加入队列。 /////////////////// SoftReference: 软引用对象,在响应内存需要时,由垃圾回收器决定是否清除此对象。软引用对象最常用于实现内存敏感的缓存。 假定垃圾回收器确定在某一时间点某个对象是软可到达对象。这时,它可以选择自动清除针对该对象的所有软引用,以及通过强引用链,从其可以到达该对象的针对任何其他软可到达对象的所有软引用。在同一时间或晚些时候,它会将那些已经向引用队列注册的新清除的软引用加入队列。 软可到达对象的所有软引用都要保证在虚拟机抛出 OutOfMemoryError 之前已经被清除。否则,清除软引用的时间或者清除不同对象的一组此类引用的顺序将不受任何约束。然而,虚拟机实现不鼓励清除最近访问或使用过的软引用。 此类的直接实例可用于实现简单缓存;该类或其派生的子类还可用于更大型的数据结构,以实现更复杂的缓存。只要软引用的指示对象是强可到达对象,即正在实际使用的对象,就不会清除软引用。例如,通过保持最近使用的项的强指示对象,并由垃圾回收器决定是否放弃剩余的项,复杂的缓存可以防止放弃最近使用的项 java.lang.ref.WeakReference    不过,现在有了 Weak Reference 之后,这就可以迎刃而解了。如果你希望能随时取得某对象的信息,但又不想影响此 对象的垃圾收集,那么你应该用 Weak Reference 来记住此对象,而不是用一般的 reference。请看下面的例子:    ...    WeakReference wr = new WeakReference(obj);    ...    if (wr.get()==null) {    System.out.println("obj 已经被清除了 ");    } else {    System.out.println("obj    尚未被清除,其信息是 "+obj.toString());    }    ...    在此例中,透过 get() 可以取得此 Reference 的所指到的对象,如果传出值为 null 的话,代表此对象已经被清除。    这类的技巧,在设计 Optimizer 或 Debugger 这类的程序时常会用到,因为这类程序需要取得某对象的信息,但是不可以 影响此对象的垃圾收集。    java.lang.ref.SoftReference    Soft Reference 虽然和 Weak Reference 很类似,但是用途却不同。SoftReference 是用来设计 object-cache 之用的。 被 Soft Reference 指到的对象,即使没有任何 Direct Reference,也不会被清除。一直要到 JVM 内存不足时且 没有 Direct Reference 时才会清除,如此一来 SoftReference 不但可以把对象 cache 起来,也不会造成内存不足的错误 (OutOfMemoryError)。我觉得 Soft Reference 也适合拿来实作 pooling 的技巧。    java.lang.ref.PhantomReference    Phantom Reference 主要是用来取代对象的 finalize()。程序员利用 finalize() 来进行释放资源的同时,有可能不小心 让此对象再度拥有 Direct Reference。但是使用 Phantom Reference 则不会有此情形发生。和 Weak Reference 以 及 SoftReference 最大的不同是:Phantom Reference 一订要搭配着 ReferenceQueue 使用,因为 Phantom Reference 的 get() 传 出值一定是 null(以避免此对象不小心再度拥有 Direct Reference)。通常我们会设计一个 class 继承 PhantomReference,然 后 override 其 clear() 来定义释放资源等收尾的动作。当然,我宁可小心一点地使用 finalize(),也不愿意自找麻烦地使用 Phantom Reference。 18. I/O 數據流 DataInput ,DataOutput ,RandomAccessFile(可讀寫) 文本流 InputStreamReader in = new InputStreamReader(new FileInputStream(“test.txt”),”ISO8559_1”); InputSteamReader in =new InputStreamReader(System.in); 文本輸出 Printwriter out = new PrintWriter(new FileWriter(“test.txt”)); 文本輸入 BufferReader in = new BufferReaderk(new FileReader(“test.txt”)); Zip文件流 ZipInputSteam in = ZipInputStream(new FileInputSteam(“test.rar”)); 19.對于類的加載,首先要執行基類的構造,在執行本身的構造. 20.Hibernate主鍵生成策略: Assigned: 主鍵由外部程式負責生成,在save()之前指定一個. Hilo :通過hilo算法實現主鍵生成機制,需要額外的數據表或字段提供高位置來源. Seqhilo: 與hilo類似,通過hilo算法實現主鍵生成機制,需要數據庫中的sequence,運用于支持sequence的DB。 Increment : 主鍵按數值順序遞增,此方式的實現機制為在當前應用實例中維持一個變量,以保持當前最大值之后每次要生成主鍵的時候將此值加1作為主鍵,這種方式可能產生問題,不能在集群下使用. Identity: 采用數據庫提供的主鍵生成機制. Sequency: 采用數據庫提供的sequence機制生成主鍵 Native :由hibernate根據使用的數據庫自行判斷采用identity,hilo,sequence其中一種作為主鍵生成方式. Uuid.hex: 由hibernate基于128位的UUID算法,生成16進制數值(編碼后以長度32的字符串表示)作為主鍵. Uuid.string: 與uuid.hex類似,只是生成主鍵未進行編碼. Foreign: 使用另外一個相關聯的對象的標識符作為主鍵 20.對象在Hibernate中有三種狀態,Transient(瞬時) Persistent(持久).Detached(托管) 21.Hibernate中對象關聯關系. 一對一 一對多 多對一 一對一有嚴格的從屬關系 一對多關聯是從屬關系 多對一不是從屬關系,而是引用關系 22,Hibernate 數據檢索策略 1. 立即檢索 2. 延遲檢索 3. 預先檢索 4. 批量檢索 23.CMM是能力成熟度模型縮寫,是一種用于評價軟件承包能力并幫助其改善軟件質量的方法,也是評估軟件是否成熟的一套標準. CMM共分為五個等級: 初始級 可重復級 定義級 管理級 優先級 24.同步和異步有何區別?什么情況下分別使用. 如果數據將在線程間共享變量,例如 正在寫的數據以后可能被另一個線程讀到或者正在讀的數據可能已經被另一個線程寫過了,這些數據就是共享數據. 當應用程序在對象上調用了一個需要花費很長時間來執行的方法,并且不希望讓程序等待方法,就應該異步編程,采用異步更有效率. 25.DML: 數據操縱語言 :insert ,update , delete 數據定義語言 : alert create drop truncate grant revoke 26.UML組成: 事物 關系 圖 事物 :結構事物 動作事物 分組事物 注釋事物 關系 : 依賴 dependencies 關聯 association 一般化 generalization 實現 realization 27.Linux內核版本一般由3個數字組成,形式為 X,Y,Z X表示主版本號,Y表示次版本號,如為偶數,代表這個內核為正式版本,如為奇數,代表內核為測試版本,Z表示修改號. /bin : 常用的系統命令執行文件 /dev: 與硬件設備驅動程序有關的特殊文件 /etc : 系統配置文件 /mnt: 安裝臨時文件 /sbin: 系統自檢和系統恢復所用的程序文件 /boot: 系統引導的內核,相關工具 /root: 超級用戶 /home: 普通用戶 /usr: 含有被共享的命令和系統管理數據庫 28.Java類加載器 Java類加載器在裝載類的時候是按需裝載的,只有當一個類使用new關鍵字來實例化一個類時,類加載器才會加載這個類并初始化 隱式加載: 使用new關鍵字讓類加載器按需載入所需的類 顯示加載: a.由java.lang.class 的forName()方法加載 b.由java.lang.classLoader.loadClass()方法加載. 類加載器的層次: 29.StringBuilder 無線成安全 StringBuffer 線程安全 30.軟件設計原則 目標: 可擴展性 靈活性 可插入性 I. 開-閉原則(OCP) :一個軟件實體應當對擴展開放,對修改關閉. 用面向對象的語言來講,不允許更改的是抽象層,而允許擴展的是實現層,抽象化才是關鍵,對可變性的封裝原則. II. 里氏代換原則 : 任何基類可以出現的地方子類一定可以出現.里氏代換原則是對開閉原則的補充,實現開閉原則的關鍵是抽象化,而基類與子類的繼承關系就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規范. III. 依賴倒轉原則: 依賴于抽象,不要依賴于實現. IV. 合成/聚合原則:要盡量使用合成/聚合,而不是繼承關系達到復用的目的. V. 迪米特法則: 一個軟件實體應當與盡可能少的其他實體發生相互作用. VI. 接口隔離原則:應當為客戶端提供可能小的單獨接口,而不要提供大的總的接口. 31.java 中JDBC獲得連接 Class.forName(oracle.jdbc.driver.OracleDriver); Connection conn = DriverManager.getConnection(url,user,userid); 32. java調用存儲過程 A.無返回值 CallableStatement pro = conn.prepareCall(“call my_fun(?)”); Pro.setLong(1,1); Pro.execute(); B.一個返回值 CREATE OR REPLACE PROCEDURE TESTP(PARA1 IN VARCHAR(2),PARA2 OUT VARCHAR(2)) BEGIN; SELECT INTO PARA2 FROM TESTP WHERE I_ID=PARA1; END TESTP; CallableStatement pro = conn.prepareCall(“call TESTP(?,?)”); Pro.setString(1,”100”); Pro.registerOutParameter(2,Type.VARCHAR); Pro.execute(); String test = pro.getString(2); C,返回列表 建立游標: CREATE OR REPLACE PACKAGE TPACKAGE AS TYPE T_CURSOR IS REF CURSOR; EDN PTACKAGE; 創建存儲過程: CREATE OR REPLACE PROCEDURE TETP(PARA1 OUT TPACKAGE.T_CURSOR ) BEGIN; OPEN CURSOR FOR SELECT * FROM TEST; END PETP; 調用: Pro = conn.prepareCall(“call TETP(?)”; Pro.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR); Pro.execute(); Rs = (ResultSet) pro.getObject(); 33.Hibernate實體對象生命周期中的3中狀態: 1.Transient(自由狀態) 實體對象在內存中自由存在,與數據庫中的記錄無關. 2.Persistent(持久狀態) 實體對象處于Hibernate框架所管理狀態,這種狀態下,實體對象的引入被納入Hibernate實體容器中加以管理. 3.Detached(游離狀態) 處于persistent狀態的對象,其對應的Session實例發生關閉之后,那么此對象就處于Detached狀態.
分享到:
评论

相关推荐

    H3CNE学习笔记

    七、H3C路由部分,首先对路由进行概述,随后介绍了H3C的静态和直连路由配置,包括直连路由、静态路由、VLAN间路由、默认路由配置和路由协议的介绍,包括动态路由协议在协议栈中的位置、基本原理、IGP和EGP、距离矢量...

    笔记本CPU发展史.pdf

    随后,486系列的处理器逐渐成为主流,尤其是486DX2,其配备了双时钟和数字协处理器,并引入了VoltageReduction技术,可以根据运行条件动态调整电压,进一步降低了功耗。 1994年,Intel的Mobile Pentium 75处理器...

    HP笔记本电池没电修复方法

    随后,将电池充电8小时以上,再让笔记本自然放电至关机。重复这个充分放电与充电的过程3次以上,电池性能有望恢复至出厂状态。 总的来说,修复HP笔记本电池问题需结合实际情况,根据电池的状态和使用状况,采取相应...

    USB读书笔记 USB读书笔记 USB读书笔记 USB读书笔记

    ### 3. 设备状态的转换 - 当设备物理连接到USB端口上时,它首先处于**Attached**状态。 - 随后进入**Powered**状态,此时设备开始从USB总线获取电力。 - 进一步,设备会进入**Default**状态,这意味着设备已经被...

    达内JAVA培训综合笔记

    随后,笔记转向数组和字符串的处理,这是编写Java程序中经常会使用到的数据结构。方法是Java程序中进行函数调用的基本单元,笔记中强调了方法的三要素,即方法签名、参数列表和返回类型。同时,也介绍了两种常见的...

    CS229的笔记

    3. **状态转移概率({Psa})**:描述了从当前状态s执行动作a之后转移到新状态的概率分布。例如,无人直升机在某一特定状态下执行特定动作时可能会到达不同的新位置。 4. **折扣因子(γ)**:属于区间[0,1]的一个数值,...

    夏新T30笔记本拆机图解

    3. **金属隔板与主板**:键盘下方是一层金属隔板,其作用在于防止主板产生的高温影响键盘正常工作。隔板下方可见主板上的各个部件,包括触摸板等连接线。 4. **内部结构探索**:拆下金属隔板后,T30的内部结构...

    两台笔记本使用无线连接共享上网教程

    在有线连接(本地连接)上右键选择“属性”,随后进入“共享”选项卡,勾选“允许其他网络用户通过此计算机的Internet连接来连接”。 2. **无线网卡设置**:切换至“无线网络连接”,同样在“属性”中选择...

    笔记本硬件 (结构 )终极教程

    开机时,EC首先检测电源状态,然后唤醒CPU和其他关键组件,随后加载BIOS进行自检。 **3. 过热保护机制** 为了防止因过热导致的硬件损坏,现代笔记本电脑通常配备有过热保护机制。这种机制通过温度传感器监测关键...

    高等数学(工本)笔记3

    【高等数学(工本)笔记3】是一份深入解析高等数学知识的资料,适用于工程类专业学生或对此领域有兴趣的学习者。这份笔记详尽地涵盖了高等数学中的关键概念、理论和应用,旨在帮助读者巩固基础,提升解题能力。笔记以...

    Python学习笔记--皮大庆

    随后,笔记对条件表达式、循环语句、字符串、列表、字典、文件操作、异常处理、类和对象、面向对象编程技术等进行了详细介绍。 特别地,笔记中还提到了如何在Python中重定义操作符和继承机制的使用,这些都是面向...

    火神火影笔记本V5拆机教程

    内存的更换相对简单,只需将内存两边的铁扣按箭头方向推,内存就会弹起,随后取出。同样,CPU的拆卸需要用到六角螺丝刀,打开箭头标记处,即可取下CPU。 揭开后盖是另一个关键步骤,需要从图(6)所示的箭头位置按...

    笔记本电脑CPU和显卡性能积分排名

    5. 随后的显卡如 **nVIDIA GeForce 8700M GT SLI**、**nVidia Geforce 9700M GTS** 等,性能逐渐递减,但仍处于较高水平。 6. 在列表的后半部分,我们可以看到一些较为老旧或低端的显卡,如 **NVIDIA GeForce 8600M ...

    笔记本主板上电时序

    - 5V_AUX_S5电压产生,随后转化为3D3V_AUX_S5,供给EC。 - EC启动后,发出s5_ENABLE信号,开启3D3V_S5和5V_S5,为南桥供电。 - 南桥得到电源后,EC发出RSMRST#,等待开机。 - 用户按下按键,EC发送PM_PWRBTN#,...

    笔记本拆装演示

    3. **内存**:释放内存两侧的固定卡扣,轻轻取出内存条。 4. **硬盘**:卸载固定硬盘的螺丝,通过胶带轻轻拉出硬盘。 5. **光驱**:先卸载固定光驱的螺丝,随后向外侧推出光驱。 6. **电源、显卡、主板、CPU、风扇等...

    HP ProBook S系列商务笔记本电脑

    随后,文中列举了一系列采用英特尔第二代智能酷睿处理器的ProBook S系列笔记本型号,例如HP ProBook 4230s、4430s和4431s,这些都属于商务笔记本系列。这些笔记本搭载的处理器支持英特尔的睿频加速技术,可以在...

Global site tag (gtag.js) - Google Analytics