欢迎来看我的网络日志,交流请加我好友: 919201148。欢迎关注公众号或视频号:蜗牛互联网
Solo  当前访客:4 开始使用

蜗牛学编程

微信搜索「蜗牛互联网」,回复 1024 有惊喜!!! 程序员 | 互联网 | 科技 | Java | 架构 | 职场进阶 | 财富进阶

夯实基础系列二:网络知识总结

2016-08-28 20:26:08 huayonglun
0  评论    215  浏览

前言 无论是 C/S 开发还是 B/S 开发,无论是前端开发还是后台开发,网络总是无法避免的,数据如何传输,如何保证正确性和可靠性,如何提高传输效率,如何解决会话管理问题,如何在网络拥堵环境下采取措施。这些都是需要了解的。 上一篇总结了 Java 相关知识:夯实基础系列一:Java 基础总结。今天总结下与网络相关的知识,不是那么详细,但是包含了我认为重要的所有点。如果想深入了解的可以参考《图解HTTP[上野 宣]》、《图解TCP/IP(第5版)[竹下隆史]》以及计算机网络相关教材。 概要 网络知识我做了 8 个方面的总结,包括 DNS 协议,HTTP 协议,HTTPS 协议,TCP 协议,IP 协议,TCP/IP,Web 攻击,其他协议。以下对这些内容做一些简单的总结,同时我也有完整的思维导图,若有需要,请关注微信公众号永伦的小屋,后台回复 网络 即可获取。 细节 1. DNS 协议 作用:提供域名到 IP 地址之间的解析服务。或逆向从 IP 地址反查域名的服务。 2. HTTP 协议 2.1 特点 无状态 使用 URI 定义互联网资源 HTTP方法 GET:获取资源 POST....

, , ,

夯实基础系列一:Java 基础总结

2016-08-27 20:26:08 huayonglun
0  评论    212  浏览

前言 大学期间接触 Java 的时间也不短了,不论学习还是实习,都让我发觉基础的重要性。互联网发展太快了,各种框架各种技术更新迭代的速度非常快,可能你刚好掌握了一门技术的应用,它却已经走在淘汰的边缘了。 而学习新技术总要付出一定的时间成本,那么怎么降低时间成本呢?那就是打好基础,技术再怎么革新,底层的东西也很少会变动,牢固的基础会帮助你在各种新技术的学习中游刃有余,快速上手。 因为我选择的方向是后台开发,所以谈谈我认为的基础有哪些。其他方向肯定也有自己的体系,从低层到高层,可以自己摸索。后台的话,我觉得网络知识,各种协议,web 知识,数据库知识,Linux 基本操作以及自己选择的后台语言知识,这些是最基础最需要牢固掌握的。 所以从今天起,会出一系列与后台基础相关的博文,一是对自己过去学习的一个总结,二是分享出来,希望可以帮助到需要的人。 概要 Java 基础我做了 10 个方面的总结,包括基本概念,面向对象,关键字,基本类型与运算,字符串与数组,异常处理,Java 平台与内存管理,分布式 Java 应用,多线程,IO。以下对这些内容做一些简单的总结,同时我也有完整的思维导图,博客上....

, ,

并发包之 CopyOnWriteArrayList

2016-07-29 00:22:08 huayonglun
0  评论    214  浏览

CopyOnWriteArrayList 实现   线程安全, 读时无锁。 CopyOnWriteArrayList()   大小为 0 的数组 add(E)   无 synchronized 关键字   用 ReentrantLock   新数组 newlen = len + 1   新对象放结尾   引用切换 remove(E)   ReentrantLock 保证线程安全   新数组 newLen = len - 1   遍历 newLen 长度 若找到 equal ,后边元素前移,,引用切换,返回true 未找到,单个赋值给新数组   特殊处理最后一个元素 是否 equal ,是,删,引用切换,返回true 否,返回 false   与 ArrayList 相比,锁不同,复制没有调用 System.arrayCopy ,性能有下降 get(int)   直接获取, 无锁保护   可能 脏数据 ,性能高   适合写少读多且脏数据影响不大 iterator()   创建 CowIterator ,并保存当前数据的快照,不抛异常 总结 CopyOnWriteArrayLi....

, , ,

并发包之ConcurrentHashMap

2016-07-18 00:22:08 huayonglun
0  评论    212  浏览

概述 并发包包括: 高性能的线程安全的集合对象 原子操作类 避免并发时资源冲突的的Lock及Condition ConcurrentHashMap 实现方式   线程安全的HashMap实现 ConcurrentHashMap(initialCapacity , loadfactor, concurrencyLevel)   参数默认 initialCapacity 为 16,loadfactor 为 0.75, concurrencyLevel 为16   基于以下方式计算 ssize int sshift = 0; int ssize = 1; while(ssize < concurrencyLevel){ ++sshiftl; ssize <<= 1; }   在 concurrencyLevel 为 16 的情况下,最终计算出的 ssize 为 16,并使用此 ssize 作为参数传入 Segment 的 newArray 方法,创建大小为 16 的 Segment 对象数组,接着采用如下方法计算 cap 变量的值: int c = initialC....

, , ,

集合包之Map

2016-07-05 00:22:08 huayonglun
0  评论    214  浏览

HashMap HashSet() loadFactor默认0.75,threshold为12 并创建一个大小为16的Entry对象数组 可调用另外两个构造器控制初始容量值,loadFactor 数组大小由如下决定: int capacity = 1; while(capacity < initialCapacity) capacity <<= 1; capacity才是创建的Entry对象数组的大小,new HashMap(5,0.6),则设loadFactor为0.6,并创建一个大小为8的Entry对象数组,threshold则为4( 8 * 0.6 = 4 ) put(key, value) key为null,获取第一个Entry对象,并基于Entry的next遍历 找到key为null,更新value,返回 未找到,增加Entry。 增加时获取数组首个Entry:e,并创建Entry对象,key为null,value为传入对象,next为e。 若数组len >= threshold,扩容为2倍,扩容前对所有元素重新hash,....

, , ,

集合包之Set

2016-07-04 00:22:08 huayonglun
0  评论    218  浏览

HashSet 实现: 为了不允许元素重复,基于HashMap实现 HashSet() 创建HashMap对象 add(E) 调用map的put(O,O),需要增加的元素作为map中的key,value传入一个已创建的final Object对象 remove(E) 调用map的remove(E) contains(E) 调用map.containsKey(E) iterator() 调用map.keySet的iterator方法 HashSet不支持get(int)获取指定位置的元素,只能自行通过iterator方法来获取 HashSet要点 基于HashMap实现,无容量限制 HashSet是非线程安全 TreeSet 实现 区别于HashSet支持排序,TreeSet基于TreeMap实现 TreeSet() 创建TreeMap对象 add(E) 调用TreeMap.put(O,O) remove(E) 调用TreeMap.remove(E) iterator() 调navig....

, , ,

struts2中自定义拦截器

2016-06-14 02:50:27 huayonglun
0  评论    211  浏览

自定义拦截器 自定义拦截器需要实现com.opensymphony.xwork2.interceptor.Interceptor接口 PermissionInterceptor package com.liuyong666.interceptor; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; public class PermissionInterceptor implements Interceptor { public void destroy() { } public void init() { } public String intercept(ActionInvocation invocation) throws Exception { Object user = ActionContext.getContext().....

,

struts2中多文件上传

2016-06-13 02:50:27 huayonglun
0  评论    209  浏览

多文件上传 导包   在WEB-INF/lib下加入commons-fileupload-1.2.1.jar、commns-io-1.32.2.jar 表单设置 <form action="${pageContext.request.contextPath}/control/employee/list_execute.action" enctype="multipart/form-data" method="post"> 文件1:<input type="file" name="image"><br/> 文件2:<input type="file" name="image"><br/> 文件3:<input type="file" name="image"><br/> <input type="submit" value="上传"/> </form> Action类 public class HelloWorldAction { private File[] image; //....

,

struts2中文件上传

2016-06-12 02:50:27 huayonglun
0  评论    222  浏览

文件上传 步骤 在WEB-INF/lib下加入conmmons-fileupload-1.2.1.jar、commons-io.1.3.2.jar。如果使用的struts.jar文件时2.1以上的这一步可以省略。但是如果想使用FileUtils类,还需要添加commons-io.1.3.2.jar包 把form表的enctype设置为:“multipart/form-data",如下: <form action="${pageContext.request.contextPath}/hello/test/user_upload.action" enctype="multipart/form-data" method="post"> 文件:<input type="file" name="uploadImage"/> <input type="submit" value="上传"/> </form> “在Action类中添加如下属性:” public class FileUploadAction { private File upl....

,

使用Spring配置文件实现事务管理

2016-06-11 19:20:12 huayonglun
0  评论    207  浏览

PersonServiceBean package com.liuyong666.service.impl; import java.util.List; import javax.sql.DataSource; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.liuyong666.bean.Person; import com.liuyong666.service.PersonService; public class PersonServiceBean implements PersonService { private JdbcTemplate jdbcTemplate; public void setDataSource(DataSource data....

, ,

struts2中访问或添加request等属性

2016-06-11 02:50:27 huayonglun
0  评论    213  浏览

访问或添加request/session/application属性 在struts2中获得request,session,application有3种方法 通过ServletActionContext类直接获取:此法比较常用 实现指定接口,有struts框架运行时注入:实现的接口是ServletRequestAware,ServletResponseAware,ServletContextAware,此方法不常用。 通过ActionContext类直接获取。此法较常用 方法一,通过ServletActionContext类直接获取: public class TestAction { public String rsa(){ HttpServletRequest request = ServletActionContext.getRequest(); ServletContext servletContext = ServletActionContext.getServletContext(); request.setAttribute("req", "请求范围属性"); ....

,

使用Spring注解方式管理事务与传播行为详解

2016-06-10 19:20:12 huayonglun
0  评论    210  浏览

遇到异常事务是否会回滚 Spring容器如果碰到运行期异常(uncheck exception),也就是 RuntimeException 会回滚. public void delete(Integer id) { jdbcTemplate.update("delete from person where id=?", new Object[]{id}, new int[]{java.sql.Types.INTEGER}); throw new RuntimeException("运行期例外"); } @Test public void testDelete(){ ps.delete(1); } 如果是用户定义的例外则不会回滚(check exception),这个特性是默认的: @Override public void delete(Integer id) throws Exception { jdbcTemplate.update("delete from person where id=?", new Object[]{id}, new int[]{java.sql.....

, , ,

搭建和配置Spring与jdbc整合的环境

2016-06-09 19:20:12 huayonglun
0  评论    220  浏览

配置数据源 <!-- 配置结点,可以使用占位符 --> <context:property-placeholder location="classpath:jdbc.properties"/> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${driverClassName}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> <!-- 连接池启动时的初始值 --> <property name="initialSize" value="${ini....

, ,

aspectj的切入点语法定义细节

2016-06-08 19:20:12 huayonglun
0  评论    215  浏览

表达式分析 expression=“execution(* com.liuyong666.service.impl.PersonServiceBean.(..))” 第一个星号表示 拦截方法的返回值 为任意 如果为 java.lang.String ,表示只拦截 返回值为String 的方法 如果为 void ,则表示只拦截 返回值为 void 的方法 如果为 !void ,则表示只拦截 返回值为 非void的方法 如果我们只拦截方法第一个参数为String,剩下的参数类型任意,则可以   expression=“execution(java.lang.String com.liuyong666.service.impl.PersonServiceBean.(java.lang.String,..))” 欢迎关注微信公众号,技术,思维,心理,带给你认知的全方位成长。 你的关注,就是对我最大的肯定,我会努力产出的,我们一起成长~ 本文由 永伦的小屋 原创。 转载请注明作者及出处,本文作者为 永伦的小屋。

, ,

使用Spring配置文件实现AOP

2016-06-07 19:20:12 huayonglun
0  评论    212  浏览

现在学习一下使用XML方式怎样来开发AOP应用。 如果使用XML方式开发AOP应用的话,我们就不再需要提供注解的配置,我们只需要一个普通的Java类对象 MyInterceptor package com.liuyong666.service; import org.aspectj.lang.ProceedingJoinPoint; /** * 切面 * */ public class MyInterceptor { public void doAccessCheck() { System.out.println("前置通知"); } public void doAfterReturning() { System.out.println("后置通知"); } public void doAfter() { System.out.println("最终通知"); } public void doAfterThrowing() { System.out.println("例外通知"); } public Object doBasicProfiling(ProceedingJoinPoin....

, ,

使用Spring的注解方式实现AOP的细节

2016-06-06 19:20:12 huayonglun
0  评论    215  浏览

beans.xml配置 <aop:aspectj-autoproxy/> <bean id="myInterceptor" class="com.liuyong666.service.MyInterceptor"/> <bean id="personService" class="com.liuyong666.service.impl.PersonServiceBean"/> PersonService package com.liuyong666.service; public interface PersonService { public void save(String name); public void update(String name, Integer personid); public String getPersonName(Integer personid); } PersonServiceBean package com.liuyong666.service.impl; import com.liuyong666.ser....

, , ,

使用Spring的注解方式实现AOP入门

2016-06-05 19:20:12 huayonglun
0  评论    217  浏览

配置文件 使用Spring进行面向切面(AOP)编程 要进行AOP编程,首先我们要在Spring的配置文件中引入aop命名空间: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.....

, , ,

使用CGLIB实现AOP功能与AOP概念解释

2016-06-04 19:20:12 huayonglun
0  评论    219  浏览

使用场景 通过JDK中的Proxy技术实现AOP功能,目标对象是实现了接口的,用JDK的Proxy技术可以使其生成代理对象,但有些情况下,目标对象是没有实现接口的,那么我们就要通过另外的方法来实现了。 首先需要导入cglib-nodep-x.x_x.jar这个包。 步骤 分三步: 创建Enhancer 设置目标对象为超类 创建对象 这样就产生了一个目标对象的子类 PersonServiceBean package com.liuyong666.service.impl; import com.liuyong666.service.PersonService; /** * 业务需求: * 1. 拦截所有业务方法 * 2. 判断用户是否有权限 * 如果用户为null,没有权限调用业务方法 * 如果用户不为null,则有权限调用 * @author Administrator * */ public class PersonServiceBean (这里不必实现接口){ private String user = null; public String getUser()....

, , ,

使用JDK中的Proxy技术实现AOP功能

2016-06-03 19:20:12 huayonglun
0  评论    232  浏览

PersonService接口 package com.liuyong666.service; public interface PersonService { public void save(String name); public void update(String name, Integer personid); public String getPersonName(Integer personid); } 实现类PersonServiceBean package com.liuyong666.service.impl; import com.liuyong666.service.PersonService; /** * 业务需求: * 1. 拦截所有业务方法 * 2. 判断用户是否有权限 * 如果用户为null,没有权限调用业务方法 * 如果用户不为null,则有权限调用 * @author Administrator * */ public class PersonServiceBean implements PersonService { private Strin....

, , ,

让Spring自动扫描和管理Bean

2016-06-02 19:20:12 huayonglun
0  评论    215  浏览

为什么需要自动扫描 通过在classpath自动扫描方式把组件纳入spring容器中管理 之前我们都是使用XML的bean定义来配置组件。在一个稍大的项目中,通常会有上百个组件,如果这些组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找以及维护起来也不太方便。 如何实现自动扫描 Spring2.5为我们引入了组件自动扫描机制,他可以在类路径底下寻找标注了@Component,@Service,@Controller,@Repository注解的类,并把这些类纳入进spring容器中管理。 它的作用和在xml文件中使用bean节点配置组件时一样的。要使用自动扫描机制,我们需要打开以下配置信息 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLo....

, , ,
TOP