- 博客(40)
- 收藏
- 关注
原创 linux做题时小结
1、在传输大文件数据时,应禁用nagle,换言之,如果有必要,就应禁用nagle算法。nagle算法使用与否在网络流量上差别不大,但是使用nagle算法的传输速度更慢。只需要将套接字可选项TCP_NODELAY改为1,其实翻译过来就是不延迟。2、firmware是固件,不是防火墙,下次别瞎了。固件分析:固件是一种写入硬件设备的软件,作用是对应用和各项系统功能实时控制。固件分析可以采用人工和工具方式进行,如:文件分析,熵分析,脚本分析;熵分析用以分析二进制固件文件的加密情况,常用工具是binwal
2021-06-28 14:46:02 166
原创 栈+树
1、缓存策略中基于LRU的淘汰策略:LRU的过程如下(访问的频率越高越不该被丢弃):新数据插入到链表头部;每当缓存命中(即缓存数据被访问),则将数据移到链表头部;当链表满的时候,将链表尾部的数据丢弃。汇编语言并不能被机器执行,机器可以执行的是二进制的机器语言。2、TCP建立通信需要三次握手,而UDP,在传送数据前不需要先建立连接,远地的主机在收到UDP报文后不需要给出任何确认。3、堆栈就是指栈。4、对于x86,栈的增长方向是从大地址到小地址;对于函数调用,参数的入栈顺序是从右往左;函
2021-06-23 22:31:48 215 2
原创 数组以及链表相关
1、矩阵不仅表示多维数组,而且是表示图的重要工具。图的表示方法有邻接矩阵和邻接表。2、对于不同的特殊矩阵应该采用不同的存储方式。对称矩阵只需要存一半,三角矩阵也有自己的存储方式。3、二维数组可以理解为一维的一维,一维数组是线性表,那么二维数组可以看成数据元素为线性表的线性表。4、数组名代表的是数组的首地址,是一个地址常量,所以不能给数组名赋值。char * strcpy(char * dest,const char * src) // c语言的方法,将src内容存放到dest中,5、c语言宏
2021-06-03 15:14:31 898
原创 字符串相关
1、如果反斜杠后面跟着八进制数字超过3个,只有前面3个数字与\构成转义序列。\x1234,表示的是一个16进制数字,后面跟着的数字应该是4位,超过4位的处理和八进制一样。2、用二进制来编码字符串“abcdabaa”,需要能够根据编码,解码回原来的字符串,至少需要()长的二进制字符串。需要对abcd进行霍夫曼编码。根据权值建立霍夫曼数,得到最优编码,编码不唯一。3、对字符串进行全排列:几种不同的方式?首先整体按顺序排A,上下角标为字符串整体长度,但是可能有字母重复,一个字母重复将结果除以2,两个除
2021-06-03 14:41:52 461 1
原创 2021-05-25
1、数组读取使用下标,复杂度为O(1),可以实现顺序遍历数组删除和插入操作,需要移动元素,复杂度O(n)链表因为存储的地址不连续(逻辑上连续但实际上不连续),可以实现顺序遍历O(n);哈希表是随机存储,所以是离散分布,顺序遍历实现不了。队列只能在端点操作,即可以在队尾插入对头删除,你可以实现中间插入和删除。2、注:下标从0开始,a[i][j]表示的是第i+1行的第j+1个元素,如果要计算其表示的元素个数,则前i行时满行,第i+1行有j+1个元素。3、数组元素在栈区,;链表元素在堆区(C?)数组
2021-05-25 12:00:20 57
原创 2021-05-13
1、false是特殊直接量,不是java关键字;native是java关键字2、被动引用不会触发子类初始化。子类引用父类的静态字段,只会触发子类的加载、父类的初始化,不会 导致子类初始化;通过数组定义来引用类,不会触发此类的初始化;常量在编译阶段会进行常量优化,将常量存入调用类的常量池中,本质上并没有直接引用到定义常量的类,因此不会触发此类的的初始化。3、throws和throw:throws出现在方法头,表示可能会出现异常;throw在方法体中,抛出了异常,执行throw则一定抛出了某
2021-05-13 11:59:44 67
原创 2021-05-09
1、面向对象设计,每个类的职责应该单一。2、面向过程语言对比面向对象更加灵活?3、jps:查看本机java进程信息;jstack:打印线程的栈信息,制作线程dump文件;jmap:打印内存映射,制作堆dump文件;jstat:性能监控工具;jhat:内存分析工具;jconsole:简易的可视化控制图;jvisualvm:功能强大的控制台。4、floor向下取整(向左边移)5、负数最高位符号位一定为1,原码中1所在的位数越高值越小。而补码是由原码取反加1得到的,则在补码中1所在的位数一定要
2021-05-09 13:18:09 68
原创 数据库-2
1、数据库范式的引入是为了解决数据插入、删除、更新异常及数据冗余问题,并不是提高访问效率。关系型数据库设计必须符合第一范式(原子性),在这种范式下一个数据列只能有一个值。2、sql注入中使用延时注入常用sleep(),benchmark().3、视图是外模式(子模式)索引可以加快查询语句的执行速度。4、grant 权限 on.数据库.to 用户.(给用户是to)revoke 权限 on 数据库 from 用户。(从用户那里收回来是from)5、共享锁【S锁】:又称读锁,若事务T对数据对象A加上
2021-05-03 17:27:06 323 1
原创 2021-05-03
1、G1收集器是1.7商用的。2、hashcode没有equals可靠。3、在preparedstatement中,一个占位符“?”只能对应一个值。4、无论如何,Interger和new Interger不会相等。不会经历拆箱过程。两个都是非new出来的Interger,如果数在-128-127之间,则是true,否则为false;(常量池缓存好的感觉)两个都是new出来的,结果为false;int和Interger(无论new否)比,都为true,因为会把Interger自动拆箱为int再
2021-05-03 15:40:19 72
原创 2021-04-27
1、同步器是一些使线程能够等待另一个线程的对象,允许它们协调动作。最常用的同步器是CountDownLatch和Semaphore,不常用的是Barrier和Exchanger。2、Object的getClass作用是返回运行时的类的名字。3、软件分为系统软件和应用软件,操作系统属于软件部分。计算机由硬件和软件组成。4、finalize方法一个对象只能执行一次,并不会在每次垃圾回收器执行的时候都会被调用。5、java中所有由类实例化的对象和数组都存放在堆内存中。6、对于String str=ne
2021-04-27 11:35:38 59
原创 2021-04-26
1、hashMap维护的是一个数组,数组里面的每个单元又是一个个链表,那么为什么会产生hash冲突呢?hash函数计算不同的key的时候,可能得到相同的hash值开放地址法:当冲突发生的时候,通过查找数组的一个空位,将数据插入进去,而不再用hash函数计算获取数的下标,这个方法就叫做开发地址法;数组的每一个闲置的空间我们都能使用,前提是这个位置没有被其他的值占用,由于数组是连续的,所以我们需要循环的去寻找一个这样的位置链地址法:在hash表每个单元中设置链表,某个要插入的数据项的关键字还是像通常那样映
2021-04-26 15:29:54 79
原创 2021-04-25
1、运行时异常顾名思义就是程序在运行(非编译)的时候出现异常,隐含的一个前提是在编译的时候检测不到异常的存在,作者本并不知道是否自己的代码中是否有运行时的异常,所以怎么必须提前使用try-catch捕获。运行时异常,编译器没有强制对其进行捕捉和处理。一般都会将异常向上抛出,直到遇到处理代码位置,若没有处理块就会抛到最上层,多线程用thread.run()抛出,单线程用main()抛出,常见的运行时异常包括空指针异常、类型转换异常、数组越界异常、缓冲区溢出异常,算术异常等。2、ASCALL码中有一些特殊字
2021-04-25 19:40:55 58
原创 2021-04-21
1、类中的数据域使用private修饰为私有变量,则不能在别的类中访问,但是:本类方法可以访问反射也可以访问。2、session属性是键值对。3、final修饰的成员变量在赋值时可以有三种方式:在声明时直接赋值;在构造器中赋值;在初始代码块中进行赋值。4、finally语句在return或者throw语句前执行。如果有异常发生但是没被catch捕获(比如在try中throw),finally则在异常抛给上层之前执行。5、处于运行速率的考虑,java编译器会把经常访问的变量放到缓存(严格讲
2021-04-21 12:38:03 142
原创 2021-04-19
1、不可变类,说的是一个类一旦被实例化,就不可改变自身的状态。常见的比如String和基本数据类型的包装类,对于这种不可变类,一旦在进行引用传递的时候,形参一开始就和实际参数指向不是一个地址,所以在方法中对形参的改变,并不会影响实际参数。(值传递)2、SQL语言又称为结构化查询语言。3、就近原则:如果局部变量名和成员/静态变量名是相同,没有特别指代,方法内就使用就近原则。在类方法中,不可以直接调用非静态方法和变量,但是可以通过创建实例对象来调用类的实例方法(非静态)。4、匿名类:5、throw用于
2021-04-19 14:44:25 62
原创 数据库-1
1、事务是DBMS的基本单位,它是用户定义的一组逻辑一致的程序序列。2、delete from 表名 后面没有跟where,默认在不删除表的情况下删除所有的行,也就是表示删除表中的全部记录。3、数据库的概念模型独立于具体的机器和DBMS。E-R图是一种概念模型。4、并发不加以控制会带来数据的不一致问题,而对并发加以控制了,也就是加锁了,但是锁的控制没有弄好,才会带来死锁问题。5、数据库事务会给数据库的并发操作带来一定影响,会降低系统的并发能力。6、数据库系统的特点是高共享,低冗余,独立性高,具有
2021-04-17 22:33:25 150
原创 mysql
1、mysql是RDBMS(Relational Database Management System,关系数据库管理系统)。关系数据库将数据保存在不同的表中,而不是将所有的数据放在一个大仓库中。层次型数据库管理系统是紧随网状数据库而出现的,现实世界中很多事物是按层次组织起来的,层次数据模型的提出,首先是为了模拟这种按层次组织起来的事物。最著名最典型的层次数据库系统是IBM公司的IMS。2、datediff(dd,RDDATE,getdate())==0含义,即返回以日为单位(dd),和当前日期(g
2021-04-17 22:01:52 171
原创 2021-04-17
1、用try-catch 捕获异常;用try-finally 清除异常;用try-catch-finally处理所有的异常。三者选一种即可。2、多种混合运算时,自动转换将所有数据类型转换为容量最大的一种数据类型。(不能受到求余运算时结果的正负号和被求余的数(第一个数)的正负号相同的影响,就觉得数据类型也是一样的)3、hasNext不是object中的,是迭代器中的object中没有copy方法,但是有clone方法,用于创建并返回该对象的一个副本。object类的方法:4、java的跨平台特
2021-04-17 18:28:11 192
原创 2021-04-14
1、hashmap在单线程中使用大大提高效率。在多线程的情况下使用hashtable来确保安全,hashtable中使用synchronized关键字来实现安全机制,但是synchronized是对整张hash表进行锁定即让现场独享整张hash表,在安全的同时造成了浪费。ConcurrentHashMap分段加锁的机制来确保安全,使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安全。Arrays
2021-04-14 12:27:57 83 1
原创 2021-04-12
1、java中%求余操作只有整型才能使用,实践证明,虽然使用别的数据类型不会报,但是求出的结果不一定正确。2、wait(),用于将当前线程置入休眠状态,知道接到通知或被中断为止。只能在同步块或者同步方法中使用。notify/notifyAll,用来通知那些可能等待该对象的对象锁的其他线程,如果有多个线程等待,则线程规划器任意挑选出其中一个wait状态的线程发出通知,并使它等待获取该对象的对象锁(notify后,当前线程不会马上释放该对象锁,wait所在的线程并不能马上获取该对象锁,要等到程序退出同步代码
2021-04-12 12:22:48 66
原创 2021-04-11
1、Hashtable是一个散列表,存储的内容是键值对映射,键和值都不可以为null,同步,线程安全,继承自Dictionary,而不是AbstactMap;Hashtable直接使用对象的hashcodehashmap:由数组+链表组成,基于哈希表的map实现,链表则主要是为了解决哈希冲突而存在的。不是线程安全的,键和值都可为null,hashmap重新计算hash值。2、继承Thread,没有重写run方法时调用父类的run方法;实现Runnable接口,必须重写run方法。3、不管是类内部调用
2021-04-11 20:50:45 82
原创 2021-04-11
1、RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机上的对象可以调用另一台计算机上的对象来获取远程数据。RMI是Enterprise JavaBeans的支柱,,是建立分布式java应用程序的方便途径。再过去,TCP/IP通信协议是远程通讯的主要手段。2.System.out.println(100+5+“is”);和System.out.println(“is”+100+5);不一样前者是
2021-04-11 16:52:52 55
原创 2021-04-09
1、基类就是父类。成员还包括静态成员。2、for循环,三个表达式都为空也是可以的。我们使用while就是为了它的循环次数是不定的,而for循环一般限定了循环次数。但实质上,while循环能够实现的操作,for循环也能实现。3、在Java中,静态变量只能在类主体中定义,不能在方法中定义,静态变量属于类所有而不属于方法。局部变量不能添加public等各种访问权限修饰符,但是可以用final修饰。4、java中只有左移右移和无符号右移(>>>),没有无符号左移(<<<
2021-04-09 15:16:44 310
原创 2021-04-07
1、依赖注入(DI):组件之间依赖关系由容器在运行期间决定,形象地说,即由容器动态地将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活,可扩展的平台。依赖注入的动机就是减少组件之间的耦合度,使开发更为简洁。2、%取余运算最后结果的符号和第一个值得符号一样。如:-12%6=-2;-12%-2=-6;12%-2=6Math.floorMod()是取模,最后结果符号和第2个值一样。3、str.split(“分隔符”);返回一个字符
2021-04-07 20:54:09 181
原创 2021-04-06
1、System是类不是包,属于java.lang.system。2、java内存模型:(1)线程私有程序计数器:标记当前线程执行的字节码,指示当前线程所执行的字节码执行到第几行;用于线程切换能恢复到正确位置。每个线程都有一个。虚拟机栈(有的也叫java栈):一个线程的每个方法在执行的时候都会创造一个栈帧,存储局部变量表,操作站,动态链接,方法入口,当每个方法被调用的时候,栈帧入栈,方法执行完后,栈帧出栈。本地方法栈:本地方法栈在作用,运行机制,异常类型等方面和虚拟机栈相同。区别是:虚拟机栈执行的
2021-04-06 20:48:22 84
原创 2021-04-04
1、switch表达式支持整型、char,枚举后来java7之后也支持String2、HashMap的数据结构是:数字+链表\红黑树数组是HashMap的猪蹄,链表则是为了解决哈希冲突而存在的。HashMap内部包含了一个默认大小为16 entry类型的数组table,其中每个Entry是一个链表,当链表长度大于等于8时会将链表转换为红黑树。...
2021-04-04 17:58:41 69
原创 2021-04-02
1、byte能表示的范围[-128,127]2、两同两小一大原则:方法名相同,参数类型相同;子类返回值类型小于或者等于父类返回值类型;子类抛出异常小于等于父类方法抛出异常;子类访问权限大于等于父类方法访问权限。3、Lambda表达式的主要作用就是代替匿名内部类的繁琐语法,它有三部分组成:(1)形参列表。形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号也能省略。(2)箭头(->),必须通过英文中画线和大于符号组成.(3)代码块。如果代码块只包含一条语句,La
2021-04-02 17:09:39 103
原创 2021-04-01
1、this和super都指的是对象,static修饰的方法是类方法。2、javax是Sun公司提供的一个扩展包。算是对java包做的一些优化处理。3、没有break,发生case穿透现象,程序会继续向下执行,直到遇到break或者结束switch语句的大括号为止。4、取反后正数的符号位改变为负数,这时需要用补码表示(除符号位外取反+1)5,、使用try…catch…finally,不管出不出异常都必须执行finally,这里包括假设try或者catch的代码块中有return,也必须先执行完fin
2021-04-01 12:25:39 79
原创 2021-03-31
1、if语句比较,除了boolean外的其它类型都不能使用赋值语句,否则会提示无法转成布尔值。2、length 得到的是字符,不是字节。中文和英文一样,看做一个字符。3、static块和方法不能出现this和super静态方法除了可以使用类名调用,实例对象也可以调用静态方法。4、HttpServletResponse完成:设置HTTP头标,设置cookie,设置返回数据类型;读取路径信息是HttpServletRequest做的。5、三大类加载器:启动类(Bootstrap)加载器–顶层,扩展类(
2021-03-31 12:02:31 72
原创 2021-03-30
1、接口是一种特殊的类,由全局常量和公共的抽象方法组成。接口中一般权限都是public。抽象方法:用public abtract修饰,修饰符可以省略。属性用public static final 类型 变量名=值;public static final 修饰符可以都省略,也可以省略一个。不管省略与否,final修饰的属性必须赋值。2、静态代码块中的变量为局部变量,不影响静态变量(类属性)的值。静态变量属于当前类,其值得改变会影响整个类运行,即区别于值传递,在每个方法中类属性的改变在方法结束后也是
2021-03-30 14:38:21 77
原创 2021-03-29
1、Float和Double类都是重写了equals方法,他们首先判断的是两个对象的类型是不是相同的,如果不相同直接返回false。注:包装类的equals方法不处理数据转型,比如在基本数据类型中float到double的自动转换。2、final修饰的变量为常量,不能修改。3、再说一遍,孙子可以继承自爷爷,但是不能说爷爷是孙子的父亲(父类)。superclass表示的是父类;subclass表示的是子类。4、如果子类重写了父类的某个方法,如果想要调用的是父类的(重写前的)的方法,需要用super
2021-03-29 12:20:14 65
原创 2021-03-25
1、关键字final表明一个对象或变量的引用在初始化后不能被修改。final修饰的变量内容是不能修改的,如果final修饰一个对象的引用,那么指的是这个对象的地址值是无法改变的,对象的内容还是可以修改的。如果final修饰的是一个普通变量的话,就是变量的值无法修改。综上:final修饰变量的本质就是,修饰的变量值(地址或内容)无法改变。2、off-heap叫做堆外内存,将你的对象从堆中脱离出来序列化,然后存储在一大片内存中,这就像它存储到磁盘上一样,但它仍然在RAM中。对象在这种状态下不能直接使用(对
2021-03-25 11:48:25 59
原创 2021-03-24
1、static {x+=5}; //静态代码块{//普通代码块 }父类静态变量—》 父类静态代码块(只执行一次)—》子类静态变量(只执行一次)–》子类静态代码块—》main方法(这个不确定)----》父类非静态变量–》父类普通代码块—》父类构造方法–》子类非静态变量–》子类代码块(构造块?)—》子类构造方法每次实例化对象时都会执行构造块中的代码。2、在java继承中,子类能继承父类的所有成员(注意:这里的继承和调用不一样,比如私有方法可以继承但是不能调用)注意:对构造方法不是继承的,而是显式
2021-03-24 12:07:11 63
原创 2021-03-18
1、子类重写父类的方法,权限不能比父类的小。2、Garbage Collectuon(gc):垃圾回收器。当对象的所有引用都消失后,对象使用的内存将自动回收。3、注意:主方法内的变量也属于类方法内的局部变量,必须赋初值。4、switch后的控制表达式只能是short,char,int,long整数类型和枚举类型,不能是float,double和boolean类型,String类型是java7开始支持。5、Math.cos计算的是弧度的余弦值,Math.toRadians函数是将角度转换为弧度。6、
2021-03-18 11:19:24 69
原创 2021-03-17
1、Statement是PreparedStatement的父接口;PreparedStatement是CallableStatement的父接口;可以说是孙子继承爷爷,儿子继承爸爸,但是不能说爷爷是孙子的父亲。2、数值型变量在默认情况下为int型,byte和short型在计算时会自动转换为int型的计算,结果也是int型。3、weblogic中开发消息Bean时的persistent和non-persistent的差别:persisitent方式的MDB可以保证消息传递的可靠性,也就是如果EJ
2021-03-17 13:07:54 500
原创 2021-03-16
1、AOP(面向方面/切面编程):偏重业务处理过程的某个步骤或阶段,强调降低模块之间的耦合度,使代码拥有更好的移植性。可以说是面向业务中的动词领域。AOP的一个很重要的特点是源代码的无关性,也就是说我们的系统中引用了AOP组件,即使我们把该组件去掉,系统代码也应该能够编译通过。要实现这一点,可以使用动态proxy模式。AOP将散落在系统中的“方面“代码集中实现;AOP有助于提高系统可维护性;AOP是一种设计模式,Spring提供了一种实现。OOP(面向对象编程):对业务分析中抽取的实体方法和属性进行封装
2021-03-16 12:17:14 107
原创 2021-03-12
1、局部变量是指类方法中的变量,必须初始化。局部变量运行时被分配在栈中,量大,生命周期短,如果虚拟机给每个局部变量都初始化一下,是一笔很大的开销,但变量不初始化为默认值就使用是不安全的。出于速度和安全性两个方面的综合考虑,解决方案就是虚拟机不初始化,但要求编写者一定要在使用前给变量赋值。2、方法的重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数类型和参数个数。3、整型包装类对象比较和基本数据类型中的整型数值比较不一样。比如在为Integer赋值的时候,java编译器会将其翻译成调用v
2021-03-12 11:51:15 53 1
原创 2021-03-11
1、start()方法是启动一个线程的 意思,此时线程处于就绪状态,但并不一定就会执行,还需要等待CPU的调度。run()方法才是线程获得CPU时间,开始执行的点。2、J2EE中,Servlet过滤器的配置包括两部分:(1)过滤器在web应用中的定义,由 filte r元素表示,包括filter-name和filter-class两个必需的子元素。(2)过滤器映射的定义,有filter-mapping元素表示,可以将一个过滤器映射一个或者多个Servlet或JSP文件,也可以采用url-patter
2021-03-11 17:14:48 111
原创 2021-03-09
1、PreparedStatement和Statement:在java中,Statement和PreparedStatement用于在已经建立数据库连接的基础上向数据库发送要执行SQL语句。Statement用于执行不带参数的简单SQL语句;PreparedStatement可以执行带参数的预编译SQL语句 。在执行同一个SQL语句时,PreparedStatement只对它进行一次的解析和编译,其后可以利用PreparedStatement对象高效地多次执行。而对于Statement来说,每次执行同一个
2021-03-09 10:52:38 71
原创 2021-03-05
1、JVM参数配置中:-Xmx指定jvm的最大堆大小。-Xms指定jvm的初始堆大小。即最小内存值-XMn指定jvm中年轻代(New Ceneration)的大小。XX:SurvivorRatio:指定年轻代中Eden区与Survivor区的大小比值为3,而Survivor区有两个,即将年轻代看做5份,每个Survivor区占一份,Eden区占3份,Survivor区大小=5120/5=1024m,Survivor区总大小为2048m(Survivor区有两个,占两份)2、byte是8位有符号数
2021-03-05 11:53:03 118 1
原创 2021-03-04
1、(1)main方法是主方法,是程序的入口。(2)J2SDK表示java 2 软件开发包,以JDK基本上是一样的,包括一系列的开发工具。(3)appletviewer.exe位于jdk安装目录的bin文件夹下,适用于执行applet小程序的。(4)applet不能单独运行,但可以嵌入到其他应用程序(如浏览器中的小程序),因此可以没有main()方法。2、在JDK1.6之前的版本,java中支持switch的数据类型包括byte,char,short,int。JDK1.7时,又增加了String类型
2021-03-04 11:53:37 90 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人