1. 面向对象
什么是面向对象
始终围绕如何解决具体问题进行。面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了; 以更形象的方式在计算机中构建现实的事物,更符合人认识世界的习惯。面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
特征:封装,继承,多态 原则:单一职责原则(SRP) 一个类应该有且只有一个去改变它的理由,这意味着一个类应该只有一项工作。 开放封闭原则(OCP) 对象或实体应该对扩展开放,对修改封闭。例如私有方法允许重载,但不允许重写。 里氏替换原则(LSP) 在对象 x 为类型 T 时 q(x) 成立,那么当 S 是 T 的子类时,对象 y 为类型 S 时 q(y) 也应成立。(即对父类的调用同样适用于子类) 依赖倒置原则(DIP) 高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。具体实现应该依赖于抽象,而不是依赖于实现。依赖于实现会使得日后扩展不断。例如A依赖于B、C、D的实现不如依赖于BCD共同实现的接口或抽象类。 接口隔离原则(ISP) 不应强迫客户端实现一个它用不上的接口,或是说客户端不应该被迫依赖它们不使用的方法,使用多个专门的接口比使用单个接口要好的多!
平台无关性
java的运行依赖于java运行环境(JRE),Java虽然平台无关但JRE是平台相关的,虽然它支持大部分主流平台。
(Kotlin、Groovy、JRuby、Jython、Scala)
值传递
1.基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的 2.对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数。 3.C++中还有指针传递。
前述的引用传递,形参拿到的是实参地址的复制,相当于是地址值的传递。 Java中的引用传递相当于c++中的指针传递。至于C++中的引用传递解释如下:
引用参数传递过程中,被调函数的形式参数也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参(本体)的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量(根据别名找到主调函数中的本体)。因此,被调函数对形参的任何操作都会影响主调函数中的实参变量。
2. java基础知识
浮点数精度
浮点数在机器中的表示由三部分组成:符号,指数,尾数。所以其最大精度由尾数位数来决定。
包装类型
包装类型用于经基本类型转换为一个对象,包装类于基本类型之间的自动转换称为自动拆装箱。
Integer的缓存机制
在 Java 5 中,为 Integer 的操作引入了一个新的特性,用来节省内存和提高性能。整型对象在内部实现中通过使用相同的对象引用实现了缓存和重用。上面的规则适用于整数区间 -128 到 +127。这种 Integer 缓存策略仅在自动装箱(autoboxing)的时候有用,使用构造器创建的 Integer 对象不能被缓存。Java 编译器把原始类型自动转换为封装类的过程称为自动装箱(autoboxing),这相当于调用 valueOf 方法。这种缓存行为不仅适用于Integer对象。我们针对所有整数类型的类都有类似的缓存机制。 有 ByteCache 用于缓存 Byte 对象 有 ShortCache 用于缓存 Short 对象 有 LongCache 用于缓存 Long 对象 有 CharacterCache 用于缓存 Character 对象 Byte,Short,Long 有固定范围: -128 到 127。对于 Character, 范围是 0 到 127。除了 Integer 可以通过参数改变范围外,其它的都不行。
String
JDK 6 和 JDK 7 中 substring 的原理及区别
String是通过字符数组实现的。在jdk 6 中,String类包含三个成员变量:char value[], int offset,int count。他们分别用来存储真正的字符数组,数组的第一个位置索引以及字符串中包含的字符个数。 当调用substring方法的时候,会创建一个新的string对象,但是这个string的值仍然指向堆中的同一个字符数组。这两个对象中只有count和offset 的值是不同的。 这样做乍看起来可以减少内存占用,可是substring的存在会使得整个字符串在无用后得不到回收。所以在JDK7中substring实现方式变为开辟新的内存存储子字符串。
加号“+” String contact() 方法 StringUtils.join() 方法 StringBuffer append() 方法 StringBuilder append() 方法
stringbuild和stringbuffer的区别
在执行速度方面的比较:StringBuilder > StringBuffer StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,不像String一样创建一些对象进行操作,所以速度就快了。 StringBuilder:线程非安全的 StringBuffer:线程安全的
String.valueOf 和 Integer.toString 的区别
String.valueOf()对不同数据类型实现了重载,对于int类型的参数直接调用Integer.toString()
字符串池、常量池(运行时常量池、Class 常量池)、intern
String有两种赋值方式,第一种是通过“字面量”赋值。 String str = "Hello"; 第二种是通过new关键字创建新对象。 String str = new String("Hello");
class常量池 :我们写的每一个Java类被编译后,就会形成一份class文件;class文件中除了包含类的版本、字段、方法、接口等描述信息外,还有一项信息就是常量池(constant pool tle),用于存放编译器生成的各种字面量(Literal)和符号引用(Symbolic References); 运行时常量池 :运行时常量池存在于内存中,也就是class常量池被加载到内存之后的版本,不同之处是:它的字面量可以动态的添加(String.intern()),符号引用可以被解析为直接引用. 字符串池为他们的一部分。
字面量 创建字符串会先在字符串池中找,看是否有相等的对象,没有的话就在堆中创建,把地址驻留在字符串池;有的话则直接用池中的引用,避免重复创建对象。 new 关键字创建时,前面的操作和字面量创建一样,只不过最后在运行时会创建一个新对象,变量所引用的都是这个新对象的地址。
由于不同版本的JDK内存会有些变化,JDK1.6字符串常量池在永久代(即方法区),1.7移到了堆中(与运行时常量池分开),1.8用元空间代替了永久代。但是基本对上面的结论没有影响,思想是一样的。
各种关键字
transient、instanceof、final、static、volatile、synchronized、const 原理及用法
transient 表示无需序列化的变量 final可以用来修饰类(继承),方法(重写)和变量(const)(成员变量或局部变量) finally作为异常处理的一部分,它只能用在try/catch语句中 finalize()是在java.lang.Object里定义的,也就是说每一个对象都有这么个方法。这个方法在gc启动,该对象被回收的时候被调用
集合类
ArrayList 和 LinkedList 和 Vector 的区别
ArrayList和Vector都是基于数组实现的,但Vector实现了线程安全所以他效率会低,linkedList是基于双向列表实现的。还有synchronizedList,是实现了线程安全的ArrayList,所以与Vector的区别仅仅是增长速度。
HashMap、HashTable、ConcurrentHashMap 区别
Hashtable和HashMap有几个主要的不同:线程安全以及速度。仅在你需要完全的线程安全的时候使用Hashtable,而如果你使用Java 5或以上的话,请使用ConcurrentHashMap吧。
是通过元素的两个方法,hashCode和equals来完成。 如果元素的HashCode值相同,才会判断equals是否为true。 如果元素的hashcode值不同,不会调用equals。
Stream 就如同一个迭代器(Iterator),单向,不可往复,数据只能遍历一次,遍历过一次后即用尽了,就好比流水从面前流过,一去不复返。可以并行化处理。 常用操作有 filter map distinct 排序 reduction collect
并交补、过滤、collect(获取某些属性的集合)
不同版本的 JDK 中 HashMap 的实现的区别以及原因
JDK1.8之前处理hash冲突使用链表,但是链表查询满,链表长了之后效率会下降,故JDK1.8之后链表长度达到一定阈值后转换为红黑树,红黑树增删慢,查询快。
java.util.Collection 是一个集合接口(集合类的一个顶级接口) Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。
是不支持add和remove操作的,也就是说Arrays.asList返回的List是个固定大小的List。如果希望转过后的list可以支持add和remove操作,可使用如下方法:
ArrayList copyArrays=new ArrayList<>(Arrays.asList(integerArray));
Enumeration 和 Iterator 区别
Iterator除了能读取集合的数据之外,也能数据进行删除操作。 Iterator支持fail-fast机制,而Enumeration不支持。
在使用迭代器遍历集合时,若集合内容发生改变,而我们接着对该集合遍历,此事是否应该抛出异常?快速失败就是即刻抛出Concurrent Modification Exception。而安全失败的遍历是在遍历之前将集合内容复制出来,在其上进行遍历。
CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器
TreeMap使用红黑树按照key的顺序(自然顺序、自定义顺序)来使得键值对有序存储,但是只能在单线程下安全使用;多线程下想要使键值对按照key的顺序来存储,则需要使用ConcurrentSkipListMap。 ConcurrentSkipListMap的底层是通过跳表来实现的。
同步异步是指进程通信方式,阻塞非阻塞是指同步之下进程能否继续执行其他任务。 linux下的五种I/O模型 1)阻塞I/O(blocking I/O) 2)非阻塞I/O(nonblocking I/O) 3)I/O复用(select 和poll) (I/O multiplexing) I/O复用模型会用到select、poll、epoll函数,这几个函数也会使进程阻塞,但是和阻塞I/O所不同的的,这两个函数可以同时阻塞多个I/O操作 4)信号驱动I/O (signal driven I/O (SIGIO)) 在信号处理函数中调用I/O操作函数处理数据,进程继续运行并不阻塞 5)异步I/O (asynchronous I/O (the POSIX aio_functions)) 实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者的输入输出操作 前者与后者的区别在于启用异步I/O意味着通知内核启动某个I/O操作,并让内核在整个操作(包括数据从内核复制到用户缓冲区)完成时通知我们。也就是说,异步I/O是由内核通知我们I/O操作何时完成,即实际的I/O操作也是异步的;而 信号驱动I/O是由内核通知我们何时可以启动一个I/O
select的几大缺点及epoll解决方式: 1.每次循环调用select,都需要把fd集合从用户态拷贝到内核态,返回时从内核态拷贝到用户态,这个开销在fd很多时会很大(epoll的解决方案-在epoll_ctl函数中。每次注册新的事件到epoll句柄中时(在epoll_ctl中指定EPOLL_CTL_ADD),会把所有的fd拷贝进内核,而不是在循环调用epoll_wait的时候重复拷贝。epoll保证了每个fd在整个过程中只会拷贝一次。) 2.同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大(epoll的解决方案不像select或poll一样每次都把current轮流加入fd对应的设备等待队列中,而只在epoll_ctl时把current挂一遍(这一遍必不可少)并为每个fd指定一个回调函数,当设备就绪,唤醒等待队列上的等待者时,就会调用这个回调函数,而这个回调函数会把就绪的fd加入一个就绪链表)。epoll_wait的工作实际上就是在这个就绪链表中查看有没有就绪的fd(利用schedule_timeout()实现睡一会,判断一会的效果,和select实现中的第7步是类似的)) 3.select支持的文件描述符数量太小了,默认是1024(fd_set只包含一个int数组,数组大小为1024)
BIO NIO的最重要的地方是当一个连接创建后,不需要对应一个线程,这个连接会被注册到多路复用器上面,所以所有的连接只需要一个线程就可以搞定,当这个线程中的多路复用器进行轮询的时候,发现连接上有请求的话,才开启一个线程进行处理,也就是一个请求一个线程模式。也就是说,这个时候,已经不是一个连接就要对应一个处理线程了,而是有效的请求,对应一个线程,当连接没有数据时,是没有工作线程来处理的。netty基于此 AIO与NIO不同,当进行读写操作时,只须直接调用API的read或write方法即可。这两种方法均为异步的,对于读操作而言,当有流可读取时,操作系统会将可读的流传入read方法的缓冲区,并通知应用程序;对于写操作而言,当操作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序。 即可以理解为,read/write方法都是异步的,完成后会主动调用回调函数。
反射
将反射与工厂模式结合,可以通过类名字(查找类文件)便能生成对象。可以动态加入类文件。
class Factory{
public static fruit getInstance(String ClassName){
fruit f=null;
try{
f=(fruit)Class.forName(ClassName).newInstance();
}catch (Exception e) {
e.printStackTrace();
}
return f;
}
}
我们可以把IOC(控制反转)容器的工作模式看做是工厂模式的升华,可以把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言提供的反射机制,根据配置文件中给出的类名生成相应的对象。从实现来看,IOC是把以前在工厂方法里写死的对象生成代码,改变为由配置文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性
代理
静态代理
public void execute() {
System.out.println("前拦截...");
bussinessImpl.execute();
System.out.println("后拦截...");
}
动态代理,无需手动实现每个接口,只需添加对方法的判断
public Object getProxyInstance(){
return Proxy.newProxyInstance(
targetObject.getClass().getClassLoader(), //和目标对象的类加载器保持一致
targetObject.getClass().getInterfaces(), //目标对象实现的接口,因为需要根据接口动态生成对象
new InvocationHandler() { //InvocationHandler:事件处理器,即对目标对象方法的执行
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("前拦截...");
Object result = method.invoke(proxy, args);
System.out.println("后拦截...");
return result;
}
});
动态代理类并不是程序员写的,而是根据传入的参数,由Proxy类在运行时生成的。 有一点必须注意:jdk动态代理的应用前提,必须是目标类基于统一的接口?。如果没有上述前提,jdk动态代理不能应用。由此可以看出,jdk动态代理有一定的局限性,cglib这种第三方类库实现的动态代理应用更加广泛,且在效率上更有优势
序列化
https://cloud.tencent.com/developer/article/1125165
相对于XML,protocol buffers在序列化结构数据时拥有许多先进的特性: 1、更简单 2、序列化后字节占用空间比XML少3-10倍 3、序列化的时间效率比XML快20-100倍 4、具有更少的歧义性 5、自动生成数据访问类方便应用程序的使用
JMS
JMS 原本就是一个异步的消息服务,客户端获取消息的时候,不需要主动发送请求,消息会自动发送给可用的客户端
kafka是什么
泛型
泛型的目的简单地说就是可以让一些运行时才能发现的错误可以在编译期间就可以被编译器所检测出,运行时出问题的代价与编译期出现问题的代价的差别可想而知。换句话说,泛型是编译器的一种及时发现错误的机制,同时也给用户带来了代码的清晰与简洁的附加好处
public class Solution extends HashMap {
void push(Entry x){
super.put(x.getKey(),x.getValue());
}
public static void main(String[] args){
Solution b2 = new Solution<>();
Entry x = new SimpleEntry<>(1,2);
b2.push(x);
}
}
Java 的泛型在编译器有效,在运行期被删除,也就是说所有泛型参数类型在编译后都会被清除掉 List、List擦除后的类型为 List。 List[]、List[] 擦除后的类型为 List[]。 List、List 擦除后的类型为 List。 List 擦除后类型为List。
限定通配符和非限定通配符、上下界限定符 extends 和 super
https://www.cnblogs.com/dtx0/p/8466127.html
List、原始类型 List、list
list表示列表中可以存放任意类型的元素,List表示该列表中的元素类型可以是任一相同类型,即他是List的父类,为了保证类型安全,不允许对List或List这样的通配符类型进行类似add的操作。 相对于List,List可以帮助编译器在编译阶段发现错误。
测试
https://www.cnblogs.com/wangtj-19/p/5822369.html
API、SPI
API (Application Programming Interface) 大多数情况下,都是实现方来制定接口并完成对接口的不同实现,调用方仅仅依赖却无权选择不同实现。 SPI (Service Provider Interface) 而如果是调用方来制定接口,实现方来针对接口来实现不同的实现。调用方来选择自己需要的实现方。
语法糖
语法糖:switch 支持 String 与枚举、泛型、自动装箱与拆箱、方法变长参数、枚举、内部类、条件编译、 断言、数值字面量、for-each、try-with-resource、Lambda 表达式
并发编程
一般有四种方法,Thread,Runnable,Callable,使用Executor框架来创建线程池. Runnable和Callable的区别是, (1)Callable规定的方法是call(),Runnable规定的方法是run(). (2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得 (3)call方法可以抛出异常,run方法不可以 (4)运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。 一般来说,CachedTheadPool在程序执行过程中通常会创建与所需数量相同的线程,然后在它回收旧线程时停止创建新线程,因此它是合理的Executor的首选,只有当这种方式会引发问题时(比如需要大量长时间面向连接的线程时),才需要考虑用FixedThreadPool
Java的线程分为两种:User Thread(用户线程)、DaemonThread(守护线程)。 只要当前JVM实例中尚存任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束是,守护线程随着JVM一同结束工作,Daemon作用是为其他线程提供便利服务,守护线程最典型的应用就是GC(垃圾回收器),他就是一个很称职的守护者。 User和Daemon两者几乎没有区别,唯一的不同之处就在于虚拟机的离开:如果 User Thread已经全部退出运行了,只剩下Daemon Thread存在了,虚拟机也就退出了。 因为没有了被守护者,Daemon也就没有工作可做了,也就没有继续运行程序的必要了。
public class DaemonThreadTest
{
public static void main(String[] args)
{
Thread mainThread = new Thread(new Runnable(){
@Override
public void run()
{
Thread childThread = new Thread(new ClildThread());
childThread.setDaemon(true);
childThread.start();
System.out.println("I'm main thread...");
}
});
mainThread.start();
Thread otherThread = new Thread(new Runnable(){
@Override
public void run()
{
while(true)
{
System.out.println("I'm other user thread...");
try
{
TimeUnit.MILLISECONDS.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
});
otherThread.start();
}
}
class ClildThread implements Runnable
{
@Override
public void run()
{
while(true)
{
System.out.println("I'm child thread..");
try
{
TimeUnit.MILLISECONDS.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
还有补充一点,不是说当子线程是守护线程,主线程结束,子线程就跟着结束,这里的前提条件是:当前jvm应用实例中没有用户线程继续执行,如果有其他用户线程继续执行,那么后台线程不会中断,如下:
public class DaemonThreadTest
{
public static void main(String[] args)
{
Thread mainThread = new Thread(new Runnable(){
@Override
public void run()
{
Thread childThread = new Thread(new ClildThread());
childThread.setDaemon(true);
childThread.start();
System.out.println("I'm main thread...");
}
});
mainThread.start();
Thread otherThread = new Thread(new Runnable(){
@Override
public void run()
{
while(true)
{
System.out.println("I'm other user thread...");
try
{
TimeUnit.MILLISECONDS.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
});
otherThread.start();
}
}
class ClildThread implements Runnable
{
@Override
public void run()
{
while(true)
{
System.out.println("I'm child thread..");
try
{
TimeUnit.MILLISECONDS.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
线程池不允许使用 Executors 去创建,而是通过ThreadPoolExecutor 的方式
https://www.jianshu.com/p/51c4ad2da4df
可见性,重排序,happens-before,内存屏障指令
互斥条件:一个资源每次只能被一个线程使用。
请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
不可剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。
循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
框架
hibernate
实现懒加载的前提: 1.实体类不能是final的 2.能实现懒加载的对象都是被CGLIB(反射调用)改写的代理对象,所以不能是final修饰的 3.须要asm,cglib两个jar包 4.相应的lazy属性为true 5.相应的fetch属性为select
下面几种可以实现懒加载功能: 1.通过Session.load()实现懒加载 2.one-to-one,many-to-one,one-to-many。
因为懒加载的存在,在session关闭之后,hibernate又向数据库发出一次请求,结果就抛出异常.解决这个问题的四种方式: 1.Hibernate.initialize(Department.class); 2.修改对象关系文件,将lazy改写lazy=false,即关闭懒加载 3.使用过滤器(web项目) 4.在SSH框架中,使用spring提供的openSessionView
mysql
脏读:事务中读到其他事务修改中间的数据,若其他事务回滚了,那就读到了脏数据 不可重复读:事务多次重复读取数据,数据中途却被其他事务修改 幻读:事务A首先根据条件索引得到N条数据,然后事务B改变了这N条数据之外的M条或者增添了M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据了,就产生了幻读
innodb 支持“ACID”事务 锁的粒度小,支持行锁定(只在可以确定主键时),所以适合经常更新的表,适合处理多重并发的更新请求 支持外键约束 不支持fulltext索引 必须导出SQL来备份
myisam 大批量的插入语句时(这里是INSERT语句)执行的比较的快 极度强调快速读取操作。 如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyIASM也是很好的选择。 允许没有主键和索引的表 MyISAM的数据是以文件的形式存储,所以在跨平台的数据转移中会很方便
一个强调的是性能,一个强调的是大容量数据库的事务安全
B-与B+的区别 B-每个非叶子结点由n-1个key和n个指针组成,其中d<=n<=2d;B+每个结点的指针上限为2d B+内结点不存储data,只存储key;叶子结点不存储指针。
可以将一个节点的大小设为一个页面,每个节点一次I/O便可读入内存,便于磁盘I/O 每次查找,最大的节点访问数为h(树高),而h的大小与非叶节点的出度d有关,d增大,便可以减少磁盘I/O 另外,在B+Tree的每个叶子结点增加一个指向相邻叶子结点的指针,就形成了带有顺序访问指针的B+Tree。做这个优化的目的是为了提高区间访问的性能,例如图4中如果要查询key为从18到49的所有数据记录,当找到18后,只需顺着结点和指针顺序遍历就可以一次性访问到所有数据结点,极大提到了区间查询效率。
myisam节点data域存放的是数据的地址,innodb主键索引中节点data域存放的直接是数据,辅助索引data域存放主键,然后根据主键再进行一次主键索引找到非主键列。
前面说到innodb使用非主键索引时需要进行两次索引,第二次索引叫回表,当所查询数据为主键时是不需要回表的,如下1
1.select id from user_table where username = 'lzs'
2.select password from user_table where username = 'lzs'
面对2这样的查询为了加快查询速度。可以建立联合索引,也叫覆盖索引
继续以上面的例子来说明,为了提高语句B的执行速度,我们添加了一个联合索引(username,password),特别注意这个联合索引的顺序,如果我们颠倒下顺序改成(password,username),这样查询能使用这个索引吗?答案是不能的!这是最左前缀的第一层含义:联合索引的多个字段中,只有当查询条件为联合索引的一个字段时,查询才能使用该索引 。 最左前缀的第二层含义:索引可以用于查询条件字段为索引字段,根据字段值最左若干个字符进行的模糊查询 。
1.where username like '张%'
2.where username like '%张%'
聚合索引要求非空唯一,如果没有满足字段则会自建一列用作聚合索引,非聚合索引(普通索引)叶节点指向聚合索引的键,不存在索引重复数据问题 值重复率高的字段不适合建索引,从性别字段不适合建索引说起
当利用主键索引(聚集索引)来进行统计效率一般会小于利用二级索引,这是因为count(*)主要的操作是在B+索引树的叶节点上进行扫描,页节点越小所需的磁盘IO便越少,而聚集索引需要扫描整个数据文件。
mysql中的锁
mysql中的行级锁不是在表上加锁,而是在索引上面加锁,所以只有使用了索引的操作才有可能加行锁,另外行级锁有几率出现死锁。 [mysql行级锁与表所锁] (https://www.cnblogs.com/guanghe/p/9217421.html)
可以用来防止幻读 innodb在RR级别快照读模式下使用MVCC解决幻读,在当前读(insert、update都属于当前读)模式下使用next-key lock。在唯一索引上(如主键索引),只需加record lock(记录锁)即可,在非唯一索引上需要加next-key锁(record lock+gap lock),如班级=12,光加行锁还是会使前后两次select * from student where 班级=12结果出现幻读
密码学相关
RSA加密算法描述 DH密钥交换算法描述 https连接建立过程
你可能感兴趣的:(Java 工程师成神之路!)
Java注解说明书:从正确姿势到防坑指南,让你的代码会说话!
双囍菜菜
Java java python 开发语言
《Java注解说明书:从正确姿势到防坑指南,让你的代码会说话!》——手把手教你玩转官方小标签,避开90%新手踩过的坑文章目录《Java注解说明书:从正确姿势到防坑指南,让你的代码会说话!》第一章:初识注解——代码世界的智能便利贴1.1注解的前世今生:从纸质标签到数字革命1.2注解的四大核心价值与实现原理第二章:基础三巨头——每个Javaer必须刻进DNA的标签2.1@Override:防手残终极护
Python, Java 联合开发全国以及港澳主要商业银行办信用卡实操APP (Siliver)
Geeker-2025
python java
以下是一个使用Python和Java联合开发全国以及港澳主要商业银行办信用卡实操APP的示例架构和部分代码示例。这个APP主要功能包括查询银行信息、了解办信用流程、模拟申请信用卡等操作。###整体架构概述-**Python部分**:-用于数据处理和分析,例如从各种数据源获取银行信息、信用政策等数据,并进行数据清洗和整理。-可以利用数据分析和可视化库来辅助生成信用评估报告和相关图表。-**Java部
Java nmap 命令
网络安全(king)
网络安全 黑客 网络工程师 网络 web安全 安全
Java与Nmap的结合:网络安全监测利器在现代网络环境中,安全性是至关重要的。尤其在企业和组织中,维护网络的安全性将直接影响到其运营的正常进行。Nmap(NetworkMapper)是一个开源的网络扫描工具,广泛应用于网络安全评估。今天,我们结合Java语言,探讨如何利用Java调用Nmap命令以实现网络安全监测的目的。什么是Nmap?Nmap是一个强大的网络扫描工具,可以用于发现网络上的设备、
TCP通信-支持服务端与多个客户端同时通信
冷眼热眸
JAVA语言 tcp/ip 网络 服务器 网络协议 java
在上一篇文章中,我展示了基于TCP通信协议的客户端与服务端进行通信,但是只能有一个客户端与服务端进行通信,详情请点击括号内的文章(UDP传输协议和TCP传输协议的解释和实例)。本篇文章讲述;基于多线程实现多个客户端与服务端同时通信,且附有代码的注解。客户端代码如下(Client)packagecom.itheima_tcp;importjava.io.DataOutputStream;import
Java直通车系列13【Spring MVC】(Spring MVC常用注解)
浪九天
Java直通车 java spring 后端
目录1.@Controller2.@RequestMapping3.@GetMapping、@PostMapping、@PutMapping、@DeleteMapping4.@RequestBody5.@ResponseBody6.@PathVariable7.@RequestParam8.@ModelAttribute在SpringMVC项目中,注解是非常重要的组成部分,它可以帮助我们更简洁、高
H5播放webrtc视频
视频处理html5
一、简介WebRTC概念WebRTC是由Google主导的,由一组标准、协议和JavaScriptAPI组成,用于实现浏览器之间(端到端之间)的音频、视频及数据共享。WebRTC不需要安装任何插件,通过简单的JavaScriptAPI就可以使得实时通信变成一种标准功能。为什么使用webrtc现在各大浏览器以及终已经逐渐加大对WebRTC技术的支持。下图是webrtc官网给出的现在已经提供支持了的浏
Kubernetes_15_k8s交付jenkins并集成docker/k8s/java/maven环境
hellowordx007
Kubernetes kubernetes 服务器 linux
配置jenkins镜像并集成Docker环境在运维机执行[root@wwwjenkins]#pwd/opt/sortware/jenkins[root@wwwjenkins]#vimDockerfile##配置Dockerfile集成Docker环境FROMjenkins/jenkins:2.287USERrootADDkubectl/usr/bin/kubectlADDget-docker.sh
关于Android Studio编译时提示Execution failed for task ‘:xxx:compileDebugJavaWithJavac‘
居然是阿宋
android studio android gradle
在项目首次导入编译时,总是会出现一些比较难排除的问题,特别是在提示中无法直接找到原因:*Exceptionis:org.gradle.api.tasks.TaskExecutionException:Executionfailedfortask':bc_iothub:compileDebugJavaWithJavac'.atorg.gradle.api.internal.tasks.propert
开源项目
cs294639693
阿里阿里的开源项目很多,这也跟@淘宝正明的开源态度密不可分。有很多重量级的项目,例如LVS、Tengine,或者很有实践价值的中间件,例如MetaQ(分布式消息系统)、dubbo(RPC框架)、cobar(数据库中间件),或者是Java世界的工具,例如druid、fastjson。都说国内Java公司的技术架构大部分来自阿里系,我觉得一方面来自阿里员工,一方面也可以来自阿里的开源项目。地址有几个:
180.HTML、CSS、JavaScript
我也念过晚霞
html css javascript
———————————————————————————————【1.引言】在Android开发过程中,前端技术(HTML、CSS、JavaScript)逐渐成为不可或缺的技能之一。无论是通过WebView显示网页内容,还是构建混合应用,掌握前端基础将有助于提升整体产品体验。本文在保证内容全面性的前提下,剔除了多余的推荐信息,直接进入技术核心讲解。通过详细介绍HTML、CSS与JavaScript的
如何在Android中实现网络请求
python资深爱好者
android 网络
在Android中实现网络请求有多种方法,常用的几种方法包括使用HttpURLConnection、OkHttp库和Retrofit库。下面分别介绍这几种方法:1.使用HttpURLConnectionHttpURLConnection是Java标准库提供的类,用于处理HTTP请求。下面是一个简单的例子:java复制代码importjava.io.BufferedReader;importjava
Java进阶——一篇搞懂多线程实战
1加1等于
Java java
本文主要是对Java多线程相关知识进行总结和讲解。一、线程创建方式继承Thread类:通过重写run()方法来定义线程的执行逻辑,只能单继承。实现Runnable接口:这种方式更加灵活,避免了单继承的问题,而且同一个Runnable实例可以被多个线程共享,提高了代码的复用性,因此在实际开发中更为推荐。实现Callable接口:与前两种方式不同,Callable接口支持线程执行后返回结果,并且可以抛
android多个usb摄像头,Android中多USB摄像头解决方案——UVCCamera源码分析(四)
桔子毛
android多个usb摄像头
经过前几章的学习,我们大概了解了整个UVCCamera初始化、开始预览的过程。那么接着我们将来看看UVCCamera是如何实现拍照功能的。本章内容相对比较简单,均是Java层的实现。我们直接来看代码:@OverridepublicvoidcaptureStill(finalStringpath,OnCaptureListenerlistener){super.captureStill(path,l
全网最简单实用Android平板USB摄像头开发,同时预览多个摄像头,双目摄像头,同时打开手机前后摄像头(红外摄像头、人脸识别、活体检测、Android Camer
云启软件
Android原生 笔记
老规矩,先视频8月20日背景:多摄像头有很多实现方案,手机上能实现跑通,但是Android平板USB的找了好久才实现,需要低版本API,废话不多说直接代码:工具类importandroid.graphics.SurfaceTexture;importandroid.hardware.Camera;importandroid.view.TextureView;importjava.io.IOExce
华为欧拉系统 Tomcat 安装详解
阿绵
运维 后端 tomcat java Linux
1.安装或确认安装JavaTomcat需要Java环境(JDK或JRE)才能运行。如果系统尚未安装Java,可以使用以下命令安装OpenJDK:#更新软件包索引yumupdate-y#安装OpenJDK21(可根据需求安装其他版本,如8、11、17等)yuminstall-yjava-21-openjdkjava-21-openjdk-devel#验证Java是否安装成功java-version如
从零用java实现 小红书 springboot vue uniapp (2)主页优化
顽疲
java仿写小红书 java spring boot vue.js
前言移动端演示http://8.146.211.120:8081/#/前面的文章我们基本完成了主页的布局今天我们具体的去进行实现并且分享我开发时遇到的问题首先先看效果java仿小红书主页实现效果为1.顶端全屏切换2.上划加载更多3.下拉当前页整体刷新顶端全屏切换我们选择gui-switch-navigation结合swiperswiper-item进行实现关键代码.................
【Spring】SpringBoot手写模拟Spring boot
九师兄
boot spring spring boot java
1.概述本章主要讲解SpringBoot手写模拟Springboot,在此之前我们先了解一下怎么创建SpringMVC。2.SpringMvc容器以前我们配置SpringMVC一般采用xml的方式配置,配置如下现在如果采用java的方式,不要xml该怎么配置呢?视频参考:SpringMvc零配置本文出自csdn九师兄,防伪标志,本文由九师兄唯一发布。原地址:https://blog.csdn.ne
Tomcat 新手入门指南
局外人_Jia
tomcat java
Tomcat新手入门指南ApacheTomcat是一个开源的JavaServlet容器和Web服务器,广泛用于部署和运行JavaWeb应用程序。以下是Tomcat的入门指南,帮助你快速上手。1.安装Tomcat步骤1:下载Tomcat访问ApacheTomcat官网。选择适合的版本(如Tomcat9.x)并下载压缩包(zip或tar.gz)。步骤2:解压文件将下载的压缩包解压到指定目录,如/opt
FPGA面试前该做哪些准备?一文为你讲解清楚
博览鸿蒙
FPGA fpga开发
很多人在面试FPGA工程师岗位前感到焦虑,不知道该如何准备,尤其是第一次参加面试时更容易紧张。那么,FPGA面试前该做哪些准备?如何才能充分展现自己的能力?本文将从面试准备、技术要点和常见面试问题三个方面,帮助你理清思路,从容应对面试。一.了解FPGA设计流程在面试FPGA工程师岗位时,首先需要清楚FPGA开发的完整流程,从前期需求分析到最终实现的每个环节都可能成为面试官考察的重点。以下是一个典型
Verilog学习方法—基础入门篇(一)
博览鸿蒙
FPGA fpga开发
前言:在FPGA开发中,VerilogHDL(硬件描述语言)是工程师必须掌握的一项基础技能。它不仅用于描述数字电路,还广泛应用于FPGA的逻辑设计与验证。对于初学者来说,掌握Verilog的核心概念和基本语法,是深入FPGA开发的第一步。本篇文章将从Verilog基础入门的角度,帮助你快速建立学习框架,逐步掌握Verilog的使用方法。1.了解Verilog的基本概念1.1什么是Verilog?V
Web网站漏洞扫描与渗透攻击
嗨起飞了
网络安全 网络安全 web安全
Web网站漏洞扫描与渗透攻击工具全解析:从防御者到攻击者的双重视角网络安全是永无止境的攻防博弈前言:数字世界的攻守之道在数字化转型的浪潮中,Web应用已成为网络攻击的主要目标。根据CybersecurityVentures的统计,2023年全球因网络攻击导致的经济损失预计突破8万亿美元。作为开发者或安全工程师,了解常见漏洞扫描工具和渗透测试技术已成为必备技能。本文将从防御和攻击双重视角,深入剖析主
Java微服务SpringCloud+Uniapp+Vue3+Element Plus开源商城BizSpring
BizSpring源码商城
java spring cloud 教育电商 小程序 uni-app
BizSpring开源地址Githubhttps://github.com/BizSpringSource/bizspring-vue3-opensource.gitGiteehttps://gitee.com/BizSpring/bizspring-vue3-opensource.gitBizSpring核心开源框架名称框架核心框架springboot、springcloud、springclo
Java反射
lyrhhhhhhhh
java 开发语言
在Java的世界中,反射(Reflection)是一个强大而神秘的工具。它允许程序在运行时动态地获取类的信息并操作类的属性和方法。本文将带你深入理解Java反射,揭开反射的神秘面纱。一、什么是反射?Java反射是指在运行时(runtime)动态地获取类的信息、调用类的方法、操作类的属性等功能。通过Java反射,我们可以在运行时检查类的方法和属性,实例化对象,调用方法,获取和设置属性的值,以及操作数
Java代理
lyrhhhhhhhh
java 开发语言
在软件开发中,代理模式是一种非常常见的设计模式。它允许我们通过一个代理对象间接访问目标对象,从而在不修改目标对象的情况下增强其功能。代理模式广泛应用于日志记录、权限校验、事务管理、延迟加载等场景。本文将带你深入了解Java中的代理模式,包括静态代理和动态代理的实现方式。一、什么是代理给目标对象提供一个代理对象,并且由代理对象控制着对目标对象的引用在程序中,代理模式的核心思想是:代理对象:代替目标对
Android应用开发面试题
qhs1573
android jvm
以下是一些AndroidAPP开发的面试题及其答案:一、单项选择题在Android中,用于管理Activity生命周期的类是()。A.ContextB.ApplicationC.ActivityManagerD.Lifecycle答案:DAndroid中常用的布局文件后缀是()。A..xmlB..jsonC..javaD..txt答案:A以下哪个方法用于在Activity中获取布局视图()。A.s
如何禁用移动端页面的多点触控和手势缩放
几度泥的菜花
javascript 前端
在移动端开发中,有时我们需要禁用页面的多点触控和手势缩放功能,以确保页面的交互体验更加可控。本文将介绍如何通过JavaScript和CSS实现这一功能。1.禁用多点触控在移动设备上,多点触控通常用于缩放页面或执行其他手势操作。如果我们希望禁用多点触控,可以通过监听touchstart事件来实现。document.addEventListener('touchstart',function(even
优化网页性能:利用onpageshow事件实现页面状态刷新
几度泥的菜花
javascript 前端
在网页开发中,优化页面性能是至关重要的一环。一个常见的问题是,当用户使用浏览器的后退按钮或者前进按钮导航页面时,页面可能会从浏览器的缓存中恢复,而不会触发页面的重新加载,导致页面状态可能不正确。为了解决这个问题,可以利用浏览器提供的onpageshow事件来检测页面是否是从缓存中恢复的,并在需要时手动刷新页面状态。在JavaScript中,可以监听window对象的onpageshow事件,该事件
java中有了ArrayList为什么还有LinkedList
不如打代码KK
java 算法 开发语言
java中有了ArrayList为什么还有LinkedList在Java中,尽管已经有了功能强大的ArrayList,但LinkedList的存在仍然有其独特的价值和适用场景。这两种集合类都属于Java集合框架的一部分,但它们在设计和实现上有显著的不同,这导致了它们在性能特征和使用场景上的差异。1.ArrayList的特点基于数组的实现:ArrayList内部使用一个动态数组来存储元素。当需要添加
133个Java面试题和答案
晨旭猿
android java 面试 133个java面试题
作者:极乐君链接:https://zhuanlan.zhihu.com/p/23533393来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。特别注释:不要迷信下面这份答案,实践是唯一真理。有几处有疑问的地方我拿红色标注标出来的。其它的可能也会有问题Java面试中的重要话题这份Java面试问题列表包含的主题:多线程,并发及线程基础数据类型转换的基本原则垃圾回收(GC)J
C#控制台应用程序学习——3.8
宣宣猪的小花园.
C#控制台应用程序 c# 开发语言 无人机
一、语言概述1、平台相关性C#主要运行在.NET平台上。.NET提供了一个庞大的类库,C#程序可以方便地调用这些类库来实现各种功能,如文件操作、数据库访问、网络通信等。2、语法风格C#的语法与C、C++和Java有一定的相似性。例如,它使用大括号{}来定义代码块,使用分号;结束语句。二、C#程序的基本结构1、命名空间(Namespace)命名空间用于组织代码,避免命名冲突。例如:usingSyst
ASM系列四 利用Method 组件动态注入方法逻辑
lijingyao8206
字节码技术 jvm AOP 动态代理 ASM
这篇继续结合例子来深入了解下Method组件动态变更方法字节码的实现。通过前面一篇,知道ClassVisitor 的visitMethod()方法可以返回一个MethodVisitor的实例。那么我们也基本可以知道,同ClassVisitor改变类成员一样,MethodVIsistor如果需要改变方法成员,注入逻辑,也可以
java编程思想 --内部类
百合不是茶
java 内部类 匿名内部类
内部类;了解外部类 并能与之通信 内部类写出来的代码更加整洁与优雅
1,内部类的创建 内部类是创建在类中的
package com.wj.InsideClass;
/*
* 内部类的创建
*/
public class CreateInsideClass {
public CreateInsideClass(
web.xml报错
crabdave
web.xml
web.xml报错
The content of element type "web-app" must match "(icon?,display-
name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,s
泛型类的自定义
麦田的设计者
java android 泛型
为什么要定义泛型类,当类中要操作的引用数据类型不确定的时候。
采用泛型类,完成扩展。
例如有一个学生类
Student{
Student(){
System.out.println("I'm a student.....");
}
}
有一个老师类
CSS清除浮动的4中方法
IT独行者
JavaScript UI css
清除浮动这个问题,做前端的应该再熟悉不过了,咱是个新人,所以还是记个笔记,做个积累,努力学习向大神靠近。CSS清除浮动的方法网上一搜,大概有N多种,用过几种,说下个人感受。
1、结尾处加空div标签 clear:both 1 2 3 4
.div
1
{
background
:
#000080
;
border
:
1px
s
Cygwin使用windows的jdk 配置方法
_wy_
jdk windows cygwin
1.[vim /etc/profile]
JAVA_HOME="/cgydrive/d/Java/jdk1.6.0_43" (windows下jdk路径为D:\Java\jdk1.6.0_43)
PATH="$JAVA_HOME/bin:${PATH}"
CLAS
linux下安装maven
无量
maven linux 安装
Linux下安装maven(转) 1.首先到Maven官网
下载安装文件,目前最新版本为3.0.3,下载文件为
apache-maven-3.0.3-bin.tar.gz,下载可以使用wget命令;
2.进入下载文件夹,找到下载的文件,运行如下命令解压
tar -xvf apache-maven-2.2.1-bin.tar.gz
解压后的文件夹
tomcat的https 配置,syslog-ng配置
aichenglong
tomcat http跳转到https syslong-ng配置 syslog配置
1) tomcat配置https,以及http自动跳转到https的配置
1)TOMCAT_HOME目录下生成密钥(keytool是jdk中的命令)
keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit
关于领号活动总结
alafqq
活动
关于某彩票活动的总结
具体需求,每个用户进活动页面,领取一个号码,1000中的一个;
活动要求
1,随机性,一定要有随机性;
2,最少中奖概率,如果注数为3200注,则最多中4注
3,效率问题,(不能每个人来都产生一个随机数,这样效率不高);
4,支持断电(仍然从下一个开始),重启服务;(存数据库有点大材小用,因此不能存放在数据库)
解决方案
1,事先产生随机数1000个,并打
java数据结构 冒泡排序的遍历与排序
百合不是茶
java
java的冒泡排序是一种简单的排序规则
冒泡排序的原理:
比较两个相邻的数,首先将最大的排在第一个,第二次比较第二个 ,此后一样;
针对所有的元素重复以上的步骤,除了最后一个
例题;将int array[]
JS检查输入框输入的是否是数字的一种校验方法
bijian1013
js
如下是JS检查输入框输入的是否是数字的一种校验方法:
<form method=post target="_blank">
数字:<input type="text" name=num onkeypress="checkNum(this.form)"><br>
</form>
Test注解的两个属性:expected和timeout
bijian1013
java JUnit expected timeout
JUnit4:Test文档中的解释:
The Test annotation supports two optional parameters.
The first, expected, declares that a test method should throw an exception.
If it doesn't throw an exception or if it
[Gson二]继承关系的POJO的反序列化
bit1129
POJO
父类
package inheritance.test2;
import java.util.Map;
public class Model {
private String field1;
private String field2;
private Map<String, String> infoMap
【Spark八十四】Spark零碎知识点记录
bit1129
spark
1. ShuffleMapTask的shuffle数据在什么地方记录到MapOutputTracker中的
ShuffleMapTask的runTask方法负责写数据到shuffle map文件中。当任务执行完成成功,DAGScheduler会收到通知,在DAGScheduler的handleTaskCompletion方法中完成记录到MapOutputTracker中
WAS各种脚本作用大全
ronin47
WAS 脚本
http://www.ibm.com/developerworks/cn/websphere/library/samples/SampleScripts.html
无意中,在WAS官网上发现的各种脚本作用,感觉很有作用,先与各位分享一下
获取下载
这些示例 jacl 和 Jython 脚本可用于在 WebSphere Application Server 的不同版本中自
java-12.求 1+2+3+..n不能使用乘除法、 for 、 while 、 if 、 else 、 switch 、 case 等关键字以及条件判断语句
bylijinnan
switch
借鉴网上的思路,用java实现:
public class NoIfWhile {
/**
* @param args
*
* find x=1+2+3+....n
*/
public static void main(String[] args) {
int n=10;
int re=find(n);
System.o
Netty源码学习-ObjectEncoder和ObjectDecoder
bylijinnan
java netty
Netty中传递对象的思路很直观:
Netty中数据的传递是基于ChannelBuffer(也就是byte[]);
那把对象序列化为字节流,就可以在Netty中传递对象了
相应的从ChannelBuffer恢复对象,就是反序列化的过程
Netty已经封装好ObjectEncoder和ObjectDecoder
先看ObjectEncoder
ObjectEncoder是往外发送
spring 定时任务中cronExpression表达式含义
chicony
cronExpression
一个cron表达式有6个必选的元素和一个可选的元素,各个元素之间是以空格分隔的,从左至右,这些元素的含义如下表所示:
代表含义 是否必须 允许的取值范围 &nb
Nutz配置Jndi
ctrain
JNDI
1、使用JNDI获取指定资源:
var ioc = {
dao : {
type :"org.nutz.dao.impl.NutDao",
args : [ {jndi :"jdbc/dataSource"} ]
}
}
以上方法,仅需要在容器中配置好数据源,注入到NutDao即可.
解决 /bin/sh^M: bad interpreter: No such file or directory
daizj
shell
在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。
分析:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。
解决:
1)在windows下转换:
利用一些编辑器如UltraEdit或EditPlus等工具
[转]for 循环为何可恨?
dcj3sjt126com
程序员 读书
Java的闭包(Closure)特征最近成为了一个热门话题。 一些精英正在起草一份议案,要在Java将来的版本中加入闭包特征。 然而,提议中的闭包语法以及语言上的这种扩充受到了众多Java程序员的猛烈抨击。
不久前,出版过数十本编程书籍的大作家Elliotte Rusty Harold发表了对Java中闭包的价值的质疑。 尤其是他问道“for 循环为何可恨?”[http://ju
Android实用小技巧
dcj3sjt126com
android
1、去掉所有Activity界面的标题栏
修改AndroidManifest.xml 在application 标签中添加android:theme="@android:style/Theme.NoTitleBar"
2、去掉所有Activity界面的TitleBar 和StatusBar
修改AndroidManifes
Oracle 复习笔记之序列
eksliang
Oracle 序列 sequence Oracle sequence
转载请出自出处:http://eksliang.iteye.com/blog/2098859
1.序列的作用
序列是用于生成唯一、连续序号的对象
一般用序列来充当数据库表的主键值
2.创建序列语法如下:
create sequence s_emp
start with 1 --开始值
increment by 1 --増长值
maxval
有“品”的程序员
gongmeitao
工作
完美程序员的10种品质
完美程序员的每种品质都有一个范围,这个范围取决于具体的问题和背景。没有能解决所有问题的
完美程序员(至少在我们这个星球上),并且对于特定问题,完美程序员应该具有以下品质:
1. 才智非凡- 能够理解问题、能够用清晰可读的代码翻译并表达想法、善于分析并且逻辑思维能力强
(范围:用简单方式解决复杂问题)
使用KeleyiSQLHelper类进行分页查询
hvt
sql .net C# asp.net hovertree
本文适用于sql server单主键表或者视图进行分页查询,支持多字段排序。KeleyiSQLHelper类的最新代码请到http://hovertree.codeplex.com/SourceControl/latest下载整个解决方案源代码查看。或者直接在线查看类的代码:http://hovertree.codeplex.com/SourceControl/latest#HoverTree.D
SVG 教程 (三)圆形,椭圆,直线
天梯梦
svg
SVG <circle> SVG 圆形 - <circle>
<circle> 标签可用来创建一个圆:
下面是SVG代码:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" c
链表栈
luyulong
java 数据结构
public class Node {
private Object object;
private Node next;
public Node() {
this.next = null;
this.object = null;
}
public Object getObject() {
return object;
}
public
基础数据结构和算法十:2-3 search tree
sunwinner
Algorithm 2-3 search tree
Binary search tree works well for a wide variety of applications, but they have poor worst-case performance. Now we introduce a type of binary search tree where costs are guaranteed to be loga
spring配置定时任务
stunizhengjia
spring timer
最近因工作的需要,用到了spring的定时任务的功能,觉得spring还是很智能化的,只需要配置一下配置文件就可以了,在此记录一下,以便以后用到:
//------------------------定时任务调用的方法------------------------------
/**
* 存储过程定时器
*/
publi
ITeye 8月技术图书有奖试读获奖名单公布
ITeye管理员
活动
ITeye携手博文视点举办的8月技术图书有奖试读活动已圆满结束,非常感谢广大用户对本次活动的关注与参与。
8月试读活动回顾:
http://webmaster.iteye.com/blog/2102830
本次技术图书试读活动的优秀奖获奖名单及相应作品如下(优秀文章有很多,但名额有限,没获奖并不代表不优秀):
《跨终端Web》
gleams:http