Entry

JDBC-文档

一世执手 提交于 2020-11-03 03:29:50
第 1章概述 在 Java中,数据库存取技术可分为如下几类: l JDBC直接访问数据库 l JDO技术(Java Data Object) l 第三方 O/R工具,如Hibernate, Mybatis 等 JDBC是java访问数据库的基石,JDO, Hibernate等只是更好的封装了JDBC。 1 、什么是 JDBC JDBC(是一个 独立于特定数据库管理系统( DBMS)、通用的SQL数据库存取和操作的公共接口 (一组 API),定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法、方便地访问数据库资源 JDBC为访问不同的数据库提供了一种 统一的途径 ,为开发者屏蔽了一些细节问题。 JDBC的目标是使Java程序员使用JDBC可以连接任何 提供了 JDBC驱动程序 的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。 如果没有 JDBC,那么Java程序访问数据库时是这样的: 改装: 实际上: 结论: JDBC是SUN公司提供一套用于数据库操作的接口API,Java程序员只需要面向这套接口编程即可。 不同的数据库厂商,需要针对这套接口,提供不同实现。不同的实现的集合,即为不同数据库的驱动。 2、 JDBC API JDBC API是一系列的接口,它统一和规范了应用程序与数据库的连接、执行SQL语句

tensorflow2:tf.app.run()

一世执手 提交于 2020-11-02 13:31:38
在很多TensorFlow公布的Demo中,都有这样的代码存在,如下,这是干什么的呢? if __name__ == " __main__ " : tf.app.run() 我们来看一下源代码: # tensorflow/tensorflow/python/platform/default/_app.py # Copyright 2015 Google Inc. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR

趣谈Linux操作系统学习笔记:第二十一讲

半城伤御伤魂 提交于 2020-11-02 08:19:56
一、分段机制 1、分段机制的原理图 2、段选择子 3、段偏移量 例如,我们将上面的虚拟空间分成以下 4 个段,用 0~3 来编号。每个段在段表中有一个项,在物理空间中,段的排列如下图的右边所示。 4、段表 #define GDT_ENTRY_INIT(flags, base, limit) { { { \ .a = ((limit) & 0xffff) | (((base) & 0xffff) << 16), \ .b = (((base) & 0xff0000) >> 16) | (((flags) & 0xf0ff) << 8) | \ ((limit) & 0xf0000) | ((base) & 0xff000000), \ } } } 一个段表项由段基地址 base、段界限 limit,还有一些标识符组成 DEFINE_PER_CPU_PAGE_ALIGNED(struct gdt_page, gdt_page) = { .gdt = { #ifdef CONFIG_X86_64 [GDT_ENTRY_KERNEL32_CS] = GDT_ENTRY_INIT(0xc09b, 0, 0xfffff), [GDT_ENTRY_KERNEL_CS] = GDT_ENTRY_INIT(0xa09b, 0, 0xfffff), [GDT_ENTRY_KERNEL_DS] =

2020Java面试试题及答案(基础部分)

与世无争的帅哥 提交于 2020-11-01 14:44:00
世人慌慌张张,不过图碎银几两。偏偏这碎银几两,能解世间万种慌张。最近实在揭不开锅了,有了换工作的想法,网上整理了部分Java基础面试题,好东西要拿出来分享。好了不多说了进入正题。 如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加我们的扫描二维码,各种面试资料简历模板免费送! 1、面向对象的三个特征 封装(即包装或隐藏): 封装从字面上来理解就是包装的意思,专业点就是信息隐藏。它指的是将对象的数据、状态信息和对数据的操作方法及细节隐藏在对象内部, 不允许外部程序直接访问对象的内部信息或直接对对象进行操作,而是向外提供一些安全可靠的方法供外部程序对对象进行安全的访问和操作。 好处: 隐藏信息和实现细节 可以对成员进行更精确的控制,限制对对象的不合理访问 便于修改,提高代码的可维护性 良好的封装能够减少耦合 继承: 使用现有的类的所有功能,并无须重新编写原来的这些类的基础上对这些功能进行扩展(可以增加新的数据或新的功能)。 特点: 子类拥有父类非private的属性和方法 子类可以拥有自己属性和方法,即子类可以对父类进行扩展 子类可以重写父类已实现的方法 多态: 所谓多态就是一个实例的相同方法在不同的情形下有不同的表现形式,即程序中定义的引用变量所指向的具体类型和通过引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定

内存泄露的原因找到了,罪魁祸首居然是 Java TheadLocal

喜欢而已 提交于 2020-11-01 14:24:55
作者 | 雷架 来源 | 爱笑的架构师(ID:DancingOnYourCode) ThreadLocal使用不规范,师傅两行泪 组内来了一个实习生,看这小伙子春光满面、精神抖擞、头发微少,我心头一喜:绝对是个潜力股。于是我找经理申请亲自来带他,为了帮助小伙子快速成长,我给他分了一个需求,这不需求刚上线几天就出网上问题了,后台监控服务发现内存一直在缓慢上升,初步怀疑是内存泄露。 把实习生的PR都找出来仔细 review,果然发现问题了。由于公司内部代码是保密的,这里简单写一个 demo 还原场景(忽略代码风格问题)。 public class ThreadPoolDemo {private static final ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(5, 5, 1, TimeUnit.MINUTES, new LinkedBlockingQueue<>());public static void main(String[] args) throws InterruptedException {for (int i = 0; i < 100; ++i) { poolExecutor.execute(new Runnable() {@Overridepublic void run() {

S2-052

馋奶兔 提交于 2020-10-31 08:10:18
前言 S2-052的RCE漏洞和以前的有些不同,不再是ognl表达式注入了,而是xml反序列化漏洞导致的RCE(另外还有S2-055漏洞是fastjson的反序列化漏洞)。我复现的时候遇到一个坑,导致一直复现不成功,就是必须要jdk1.8以上的版本才行。 正文 之前讲过执行action之前会先经过一些内置的拦截器,使用rest插件之后也是类似的,只不过经过的拦截器有变化了,如下图: 这次的漏洞就出现在ContentTypeInterceptor中,debug进去看看: 可以看到,通过getHandlerForRequest获得一个Handler后,调用handler的toObject方法,而输入的参数就是请求body,跟进getHandlerForRequest: 发现是通过请求头Content-Type来选择对应的Handler的,这是的漏洞就出现在,当Content-Type时会选用XStreamHandler,调用它的toObject() 很明显,调用了Xstream的fromXML方法,导致了xml的反序列化漏洞。 发送一个post请求,修改请求头信息为Content-Type: application/xml,发送post数据就是POC了,使用marshalsec工具( https://github.com/mbechler/marshalsec)生成如下poc:

ES[7.6.x]学习笔记(十二)高亮 和 搜索建议

北慕城南 提交于 2020-10-31 06:47:31
ES当中大部分的内容都已经学习完了,今天呢算是对前面内容的查漏补缺,把ES中非常实用的功能整理一下,在以后的项目开发中,这些功能肯定是对你的项目加分的,我们来看看吧。 高亮 高亮在搜索功能中是十分重要的,我们希望搜索的内容在搜索结果中重点突出,让用户聚焦在搜索的内容上。我们看看在ES当中是怎么实现高亮的,我们还用之前的索引 ik_index ,前面的章节,我们搜索过 香蕉好吃 ,但是返回的结果中并没有高亮,那么想要在搜索结果中,对 香蕉好吃 高亮该怎么办呢?我们看看, POST /ik_index/_search { "query" : { "bool" : { "must" : { "match" : { "desc" : "香蕉好吃" } } } }, "highlight" : { "fields" : { "desc" : {} } } } 我们重点看一下请求体中的 highlight 部分,这部分就是对返回结果高亮的设置, fields 字段中,指定哪些字段需要高亮,我们指定了 desc 字段,执行一下,看看结果吧。 { "took" : 73 , "timed_out" : false , "_shards" : { "total" : 1 , "successful" : 1 , "skipped" : 0 , "failed" : 0 }, "hits" : {

让我再撸一次HashMap

不羁岁月 提交于 2020-10-31 04:53:57
引言 由于近期忙着搬家,又偷懒了几个礼拜! 其实我很早以前就想写一篇关于HashMap的面试专题。对于JAVA求职者来说,HashMap可谓是集合类的重中之重,甚至你在复习的时候,其他集合类都不用看,专攻HashMap即可。 然而,鉴于网上大部分的关于HashMap的面试方向文章,烟哥看过后都不是太满意。因此,斗胆尝试也写一篇关于HashMap的面试专题文章! 正文 (1)HashMap的实现原理? 此题可以组成如下连环炮来问 你看过HashMap源码嘛,知道原理嘛? 为什么用数组+链表? hash冲突你还知道哪些解决办法? 我用LinkedList代替数组结构可以么? 既然是可以的,为什么HashMap不用LinkedList,而选用数组? 你看过HashMap源码嘛,知道原理嘛? 针对这个问题,嗯,当然是必须看过HashMap源码。至于原理,下面那张图很清楚了: HashMap采用Entry数组来存储key-value对,每一个键值对组成了一个Entry实体,Entry类实际上是一个单向的链表结构,它具有Next指针,可以连接下一个Entry实体。 只是在JDK1.8中,链表长度大于8的时候,链表会转成红黑树! 为什么用数组+链表? 数组是用来确定桶的位置,利用元素的key的hash值对数组长度取模得到. 链表是用来解决hash冲突问题,当出现hash值一样的情形

java集合之Map

怎甘沉沦 提交于 2020-10-30 08:58:39
1. Map集合之基础增删查等功能 1 public class Demo1_Map { 2 3 /* 4 * Map集合是以键值对的形式存在,底层依赖的是set集合 5 * 6 * a. 添加功能 7 * V put(K key, V value) 8 * 如果键是第一次存入,则就直接存储元素,返回null (其实本质是和键存在是一样的,只是覆盖的null) 9 * 如果键不是第一次存入,就用值把以前的替换掉,返回以前的值 10 * b. 删除功能 11 * void clear() 移除所有的键值信息 12 * V remove(Object key) 删除指定键对应的元素值,并把值返回,当所传的键值不存在时就返回null 13 * c. 判断功能 14 * boolean containsKey(Object key) 判断集合中是否包含此键 15 * boolean containsValue(Object value) 判断集合是否包含指定的值 16 * boolean isEmpty() 判断集是否为空 17 * d. 获取功能 18 * Set<Map.Entry<K,V>> entrySet() 19 * V get(Object key) 根据键获取值 20 * Set<K> keySet() 获取集合中所有键的集合 21 * Collection<V>

Java集合

流过昼夜 提交于 2020-10-30 08:07:13
前提科普: 深拷贝/ 浅拷贝 有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存。 加载因子 加载因子是表示Hsah表中元素的填满的程度.若:加载因子越大,填满的元素越多,好处是,空间利用率高了,但:冲突的机会加大了. 反之,加载因子越小,填满的元素越少,好处是:冲突的机会减小了,但:空间浪费多了. 冲突的机会越大,则查找的成本越高.反之,查找的成本越小.因而,查找时间就越小. 因此,必须在 "冲突的机会"与"空间利用率"之间寻找一种平衡与折衷. 这种平衡与折衷本质上是数据结构中有名的"时-空"矛盾的平衡与折衷. 一、继承层次图 二、List 使用方法说明 List 元素有序 可重复 允许null 1 ArrayList 方法说明(线程不安全) 1.1 方法 1 // 构造器 2 4 构造一个具有指定初始容量的空列表。 5 public ArrayList( int initialCapacity) 6 7 构造一个初始容量为 10 的空列表。 8 public ArrayList() 9 10 构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。 11 public ArrayList(Collection<?