怎样制作,编程码,写自己想说的话

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样制作,编程码,写自己想说的话相关的知识,希望对你有一定的参考价值。

怎样编写程序代码(一些简单的代码编程)
茉莉花开 • 2023 年 01 月 09 日 am 9:58 • 生活资讯


如果您对创建计算机程序、移动应用程序、网站、游戏或任何其他软件感兴趣,则需要学习如何编程。程序是使用编程语言创建的。在计算机科学飞速发展的今天,编码能力变得越来越重要。如果您以前从未编程过,请不要惊慌。今天就跟大家聊聊,作为新手,如何学习编程?

注意:本文仅提供学习思路,并非具体的手把手解决方案。

1.选择语言

1) 确定您感兴趣的领域。

您可以从任何编程语言开始学习(尽管有些语言比其他语言“更容易”),因此请先问问自己,您通过学习编程语言想要达到什么目的?这将帮助您确定应该从事哪种类型的编程,并为您提供一个良好的起点。

2) 考虑从“更简单”的语言开始。

无论您的决定如何,您都可以考虑从高级、更简单的语言开始。这些语言对初学者特别有用,因为它们的基本概念和思维过程几乎可以应用于任何语言。

该类别中的两种流行语言是 Python 和 Ruby。这两种语言都是面向对象的 Web 应用程序语言,它们使用非常易读的语法。 “面向对象”意味着该语言是围绕“对象”的概念构建的,即数据的集合及其操作。这个概念在C、ja、Objtovi-C和php等很多高级编程语言中都有应用。

3) 阅读各种语言的基础教程。

如果您不确定应该从哪种语言开始学习,请阅读一些不同语言的教程。如果一种语言比其他语言更有意义,请尝试一下,看看它是否适合。网上有很多相关的教程。

Python——一门很好的入门语言,熟悉了就会感受到它的强大。用于许多网络应用程序和许多游戏领域。 Ja – 用于无数类型的程序,从游戏到网络应用程序再到 ATM 软件。 html – 任何网络开发人员的基本起点。在进行任何其他类型的 Web 开发之前,掌握 HTML 是至关重要的。 C 语言 – 一种较旧的语言,C 仍然是一个强大的工具,并且是 C、Objtovi-C 的基础。

2.从小处着手

1) 学习语言的核心概念。

虽然此步骤的应用部分会根据您选择的语言而有所不同,但所有编程语言都共享一些对构建程序至关重要的基本概念。及早学习和掌握这些概念将使解决问题和创建强大高效的代码变得更加容易。以下是一些不同语言的一些核心概念:

变量 – 变量是一种存储和引用不断变化的数据的方式。变量可以被操作,通常有定义的类型,如“整数”、“字符”和其他类型,这些类型决定了可以存储的数据类型。在编码时,变量通常具有允许读者以某种方式识别它们的名称。这使得理解变量如何与其余代码交互变得更容易。条件语句- 条件语句是根据语句是否为真执行的操作。条件语句的常见形式是“If-else”语句。如果这个陈述为真(例如 x = 1),那么会发生一件事。如果该语句为假(例如 x != 1),则会发生其他情况。函数或子例程 – 根据语言的不同,这个概念的名称也不同。它也可以是“过程”、“方法”或“可调用单元”。这本质上是一个大程序中的一个小程序。一个函数可以被一个程序多次“调用”,允许程序员高效地创建复杂的程序。数据输入——这是一个广泛的概念,几乎在所有语言中都有使用。它包括处理用户输入和存储该数据。如何收集这些数据取决于程序的类型和用户可用的输入(键盘、文件等)。这与输出密切相关,输出是将结果返回给用户的方式,无论是显示在屏幕上还是传递到文件中。

2) 安装任何必要的软件。

许多编程语言都需要编译器,编译器是将代码翻译成机器可以理解的语言的程序。其他语言,例如 Python,使用无需编译即可立即执行程序的解释器。

有些语言有IDE(集成开发环境),通常包含代码编辑器、编译器和/或解释器以及调试器。这允许程序员在一个地方执行任何必要的功能。 IDE 还可能包含对象层次结构和目录的可视化表示。

网上有各种各样的代码编辑器。这些程序提供不同的语法高亮方法,并提供其他对开发人员友好的工具。

3.创建您自己的程序

1) 一次专注于一个概念。

任何语言的开始都是教大家“Hello World”。这是一个非常简单的程序,它在屏幕上显示文本“Hello, World”(或其他一些变体)。这个程序是教子程序员如何创建一个基本的、功能性的程序,以及如何处理显示输出。通过更改文本,您可以看到程序如何处理底层数据。

2)通过解构网上的例子来学习。

几乎每种编程语言都有数以千计的代码示例。使用这些示例来检查语言的各个方面如何工作以及不同部分如何交互。从各种示例中获取点点滴滴来创建您自己的程序。

3) 检查语法。

语法是一种语言的编写方式,以便编译器或解释器能够理解它。每种语言都有独特的语法,尽管某些元素可以在多种语言之间共享。学习语法对于学习如何使用一种语言进行编程至关重要。

4)尝试改变。

修改示例程序并测试结果。通过试验,您可以比阅读一本书更快地了解哪些有效,哪些无效。不要害怕破坏你的程序;学习修复 bug 是任何开发过程的重要组成部分,任何新东西第二次几乎都不会正确运行。所以不要害怕犯错!

5) 开始练习调试。

在编程的时候,总会遇到bug。这些是几乎可以出现在任何地方的程序中的错误。错误可以是程序中无害的异常,也可以是阻止程序编译或运行的重大错误。查找和修复这些错误是软件开发周期中的一个主要过程,因此请尽早习惯。

6) 注释代码。

几乎所有的编程语言都有一个“注释”功能,可以让你包含没有经过解释器或编译器处理的文本。这允许您对代码的作用留下简短但清晰的语言解释。这不仅可以帮助您记住您的代码在大型程序中的作用,而且在协作环境中也是必不可少的实践,因为它可以帮助其他人理解您的代码的作用。

4.经常练习

1) 每天敲代码。

首先掌握一门编程语言是需要时间的。即使是像 Python 这样简单的语言,可能只需要一两天就能理解基本语法,但要真正精通也需要很多时间。与任何技能一样,练习是变得更加熟练的关键。尝试每天至少花一些时间来编码,即使在工作和晚餐之间只有一个小时。

2) 为您的计划设定目标。

通过设定具有挑战性的目标和解决方案,您可以开始解决问题。试着想一个基本的应用程序,比如计算器,并开发一种方法来实现它。使用您学到的语法和概念并将它们应用到实际应用程序中。

3) 与他人交谈。

有许多专门针对特定语言的编程社区。寻找并参与社区可以帮助您的学习。它允许您在学习过程中获取各种示例和工具。阅读其他程序员的代码也可以开悟,帮助你掌握还没有掌握的概念。

4) 挑战自己,让它变得有趣。

尝试做一些你还不会做的事情。研究完成任务的方法,然后尝试在您自己的程序中实现它们。尽量避免对“基本上”有效的程序感到满意。尽你所能确保每个方面都完美无缺。

5.参加一些培训班,扩充自己的知识面

网上有很多针对性强、质量高的课程,可以提高我们的编程能力。这些对于新程序员来说非常有用,因为您可以从经验丰富的程序员那里获得实践帮助,并与其他正在学习的程序员建立联系。下面的C语言课也是专门为0-基础初学者设计的系统课。课程共有三个视频,包括软件和源代码。互动课堂,边玩边练,生动有趣,有老师答疑解惑,不怕学。同时可以参与学习社区交流,收获志同道合的朋友:

说实话,网上的编程课程真的太多了。有针对性的精品课程可以提高我们的编程能力,让我们更快的掌握相关技能。但选择是一门艺术。面对琳琅满目的编程课程,我们应该如何选择呢?以时间为代价盲目学习这些混合资源是一种浪费。

6.运用您的技能

1) 参加一些培训计划。

虽然不是必须的,但是上面介绍的一些课程可以让你接触到各种语言,并且可以在老师的带领下进行实践练习,有更明确更有针对性的方向性也能有所帮助你与专业人士和其他学生建立联系。

2) 创建文件夹。

在您创建程序和扩展您的知识时,请确保将您所有的优秀作品保存在一个文件夹中。您可以向招聘人员和面试官展示您的工作成果。

3) 做一些自由职业。

程序员,尤其是移动应用程序开发人员,有一个非常大的自由市场。做一些小的自由职业并学习商业编程是如何工作的。

4) 开发自己的软件。

您不必为公司工作。如果你有能力,你可以自己开发软件并发布。准备好为您发布的任何软件提供技术支持,因为客户希望他们购买的软件能够真正发挥作用。

关于如何编写程序代码的介绍到此结束(初学者100码)。

文章来源于网络或者作者投稿,若有侵权请联系删除,作者:茉莉花开,如若转载,请注明出处:https://www.laoz.net/6370.html

赞 (0)
0
生成海报
京润珍珠是哪国品牌(京润珍珠是什么牌子)
上一篇2023 年 01 月 09 日 am 9:53
腰有伤可以做平板支撑吗(做平板支撑会伤腰吗)
下一篇 2023 年 01 月 09 日 am 10:03
相关推荐

应对极寒天气的方法(极寒天气的应急预案)
极寒天气是很多人热议的话题。目前新疆天气很冷,此时需要注意防范。那么,极寒天气是什么现象呢?极端寒冷的天气应该储存哪些物资?一起来看看点创网带来的详细介绍吧! 什么是极寒天气现象 …

生活资讯 2022 年 12 月 17 日
参考技术A 在IU的时候,由于Dan Friedman的严格教导,我们以写出冗长复杂的代码为耻。如果你代码多写了几行,这老顽童就会大笑,说:“当年我解决这个问题,只写了5行代码,你回去再想想吧……” 当然,有时候他只是夸张一下,故意刺激你的,其实没有人能只用5行代码完成。然而这种提炼代码,减少冗余的习惯,却由此深入了我的骨髓。

前后端分离后台api接口框架探索

 前言

  很久没写文章了,今天有时间,把自己一直以来想说的,写出来,算是一种总结吧!  这篇文章主要说前后端分离模式下(也包括app开发),自己对后台框架和与前端交互的一些理解和看法。

     前后端分离,一般传递json数据,对于出参,现在通用的做法是,包装一个响应类,里面包含code,msg,data三个属性,code代表状态码,msg是状态码对应的消息,data是返回的数据。

  如  "code":"10008","message":"手机号不存在","totalRows":null,"data":null

  对于入参,如果没有规范,可是各式各样的,比如:

  UserController的getById方法,可能是这样的:

    技术图片

    如果是把变量放在url,是这样的:

    技术图片

  比如 addUser方法,如果是用user类直接接收参数,是这样的:

  技术图片

  这样在前后端不分离的情况下,自己前后端代码都写,是没有啥问题,但是前后端分离情况下,如果这样用user类接收参数,如果你用了swagger来生成接口文档,那么,User类里面的一些对于前段来说没用的字段(createTime、isDel、updateTime。。。),也都会给前端展示出来,这时候前端得来问你,哪些参数是有用的,哪些是没用的。其实每个接口,对前端没用的参数,最好是不要给他展示,所以,你定义了一个AddUserRequest类,去掉了那些没用的字段,来接收addUser方法的参数:

  技术图片

  如果入参用json格式,你的方法是这样的:

  技术图片

  如果多个人开发一个项目,很可能代码风格不统一,你传递 json ,他是 form提交,你用rest在url传递变量,他用?id=100 来传参,,,,

  分页查询,不同的人不同的写法:

  技术图片

    慢慢你的项目出现了一大堆的自定义请求和响应对象:(请求响应对象和DTO还是很有必要的,无可厚非)

    技术图片

    而且随着项目代码的增多,service、Controller方法越来越多,自己写的代码,自己还得找一会才能找到某个方法。出了问题,定位问题不方便,团队技术水平参差不齐(都这样的),无法约束每个人的代码按照同一个套路去写的规范些。

    等等等。。。

  正文

    鉴于此,个人总结了工作中遇到的好的设计,开发了这个前后端分离的api接口框架(逐渐完善中):

    技术图片

    技术选型:springboot,mybatis

   框架大概是这个结构:前后端以 http json传递消息,所有请求经过 统一的入口,所以项目只有一个Controller入口 ,相当于一个轻量级api网关吧,不同的就是多了一层business层,也可以叫他manager层,一个business只处理一个接口请求。

    技术图片

 

 

     先简单介绍下框架,先从接口设计说起,前后端以http 传递json的方式进行交互,消息的结构如下:

    消息分 Head、body级:


    "message":
        "head":
            "transactionType":"10130103",
            "resCode":"",
            "message":"",
            "token":"9007c19e-da96-4ddd-84d0-93c6eba22e68",
            "timestamp":"1565500145022",
            "sign":"97d17628e4ab888fe2bb72c0220c28e3"
        ,
        "body":"userId":"10","hospitalId":"5"
    

   参数说明:

    head:token、时间戳timestamp、md5签名sign、响应状态码resCode,响应消息message。transtransactionType:每个接口的编号,这个编号是有规则的。

    body:具体的业务参数

  项目是统一入口,如  http://localhost:8888/protocol ,所有接口都请求这个入口,传递的json格式,所以对前端来说,感觉是很方便了,每次请求,只要照着接口文档,换transtransactionType 和body里的具体业务参数即可。

响应参数:


    "message": 
        "head": 
            "transactionType": "10130103",
            "resCode": "101309",
            "message": "时间戳超时",
            "token": "9007c19e-da96-4ddd-84d0-93c6eba22e68",
            "timestamp": "1565500145022",
            "sign": "97d17628e4ab888fe2bb72c0220c28e3"
        ,
        "body": 
            "resCode": "101309",
            "message": "时间戳超时"
        
    

 

  贴出来统一入口的代码:

  

@RestController
public class ProtocolController extends BaseController

    private static final Logger LOGGER = LoggerFactory.getLogger(ProtocolController.class);



    @PostMapping("/protocol")
    public ProtocolParamDto dispatchCenter(@RequestParam("transMessage") String transMessage)
        long start = System.currentTimeMillis();
        //请求协议参数
        LOGGER.info("transMessage---" + transMessage);
        //响应对象
        ProtocolParamDto result = new ProtocolParamDto();
        Message message = new Message();
        //协议号
        String transactionType = "";

        //请求header
        HeadBean head = null;
        //响应参数body map
        Map<String, Object> body = null;

        try 
            //1-请求消息为空
            if (Strings.isNullOrEmpty(transMessage)) 
                LOGGER.info("[" + ProtocolCodeMsg.REQUEST_TRANS_MESSAGE_NULL.getMsg() + "]:transMessage---" + transMessage);
                return buildErrMsg(result,ProtocolCodeMsg.REQUEST_TRANS_MESSAGE_NULL.getCode(),
                        ProtocolCodeMsg.REQUEST_TRANS_MESSAGE_NULL.getMsg(),new HeadBean());
            
            // 请求参数json转换为对象
            ProtocolParamDto paramDto = JsonUtils.jsonToPojo(transMessage,ProtocolParamDto.class);
            //2-json解析错误
            if(paramDto == null)
                return buildErrMsg(result,ProtocolCodeMsg.JSON_PARS_ERROR.getCode(),
                        ProtocolCodeMsg.JSON_PARS_ERROR.getMsg(),new HeadBean());
            

            // 校验数据
            ProtocolParamDto validParamResult = validParam(paramDto, result);
            if (null != validParamResult) 
                return validParamResult;
            

            head = paramDto.getMessage().getHead();
            //消息业务参数
            Map reqBody = paramDto.getMessage().getBody();


            //判断是否需要登录
            //协议号
            transactionType = head.getTransactionType();

            //从spring容器获取bean
            BaseBiz baseBiz = SpringUtil.getBean(transactionType);
            if (null == baseBiz) 
                LOGGER.error("[" + ProtocolCodeMsg.TT_NOT_ILLEGAL.getMsg() + "]:协议号---" + transactionType);
                return buildErrMsg(result, ProtocolCodeMsg.TT_NOT_ILLEGAL.getCode(), ProtocolCodeMsg.TT_NOT_ILLEGAL.getMsg(), head);
            
            //获取是否需要登录注解
            Authentication authentication = baseBiz.getClass().getAnnotation(Authentication.class);
            boolean needLogin = authentication.value();
            System.err.println("获取Authentication注解,是否需要登录:"+needLogin);
            if(authentication != null && needLogin)
                ProtocolParamDto validSignResult = validSign(head, reqBody, result);
                if(validSignResult != null)
                    return  validSignResult;
                
            
            // 参数校验
            final Map<String, Object>  validateParams = baseBiz.validateParam(reqBody);
            if(validateParams != null)
                // 请求参数(body)校验失败
                body = validateParams;
            else 
                //请求参数body校验成功,执行业务逻辑
                body = baseBiz.processLogic(head, reqBody);
                if (null == body) 
                    body = new HashMap<>();
                    body.put("resCode", ProtocolCodeMsg.SUCCESS.getCode());
                    body.put("message", ProtocolCodeMsg.SUCCESS.getMsg());
                
                body.put("message", "成功");
            
            // 将请求头更新到返回对象中 更新时间戳
            head.setTimestamp(String.valueOf(System.currentTimeMillis()));
            //
            head.setResCode(ProtocolCodeMsg.SUCCESS.getCode());
            head.setMessage(ProtocolCodeMsg.SUCCESS.getMsg());
            message.setHead(head);
            message.setBody(body);
            result.setMessage(message);

        catch (Exception e)
            LOGGER.error("[" + ProtocolCodeMsg.SERVER_BUSY.getMsg() + "]:协议号---" + transactionType, e);
            return buildErrMsg(result, ProtocolCodeMsg.SERVER_BUSY.getCode(), ProtocolCodeMsg.SERVER_BUSY.getMsg(), head);
        finally 
            LOGGER.error("[" + transactionType + "] 调用结束返回消息体:" + JsonUtils.objectToJson(result));
            long currMs = System.currentTimeMillis();
            long interval = currMs - start;
            LOGGER.error("[" + transactionType + "] 协议耗时: " + interval + "ms-------------------------protocol time consuming----------------------");
        
        return result;
    



在BaseController进行token鉴权:

/**
     * 登录校验
     * @param head
     * @return
     */
    protected ProtocolParamDto validSign(HeadBean head,Map reqBody,ProtocolParamDto result)
        //校验签名
        System.err.println("这里校验签名: ");
        //方法是黑名单,需要登录,校验签名
        String accessToken = head.getToken();
        //token为空
        if(StringUtils.isBlank(accessToken))
            LOGGER.warn("[]:token ---",ProtocolCodeMsg.TOKEN_IS_NULL.getMsg(),accessToken);
            return buildErrMsg(result,ProtocolCodeMsg.TOKEN_IS_NULL.getCode(),ProtocolCodeMsg.TOKEN_IS_NULL.getMsg(),head);
        
        //黑名单接口,校验token和签名

        // 2.使用MD5进行加密,在转化成大写
        Token token = tokenService.findByAccessToken(accessToken);
        if(token == null)
            LOGGER.warn("[]:token ---",ProtocolCodeMsg.SIGN_ERROR.getMsg(),accessToken);
            return buildErrMsg(result,ProtocolCodeMsg.SIGN_ERROR.getCode(),ProtocolCodeMsg.SIGN_ERROR.getMsg(),head);
        
        //token已过期
        if(new Date().after(token.getExpireTime()))
            //token已经过期
            System.err.println("token已过期");
            LOGGER.warn("[]:token ---",ProtocolCodeMsg.TOKEN_EXPIRED.getMsg(),accessToken);
            return buildErrMsg(result,ProtocolCodeMsg.TOKEN_EXPIRED.getCode(),ProtocolCodeMsg.TOKEN_EXPIRED.getMsg(),head);
        
        //签名规则: 1.已指定顺序拼接字符串 secret+method+param+token+timestamp+secret
        String signStr = token.getAppSecret()+head.getTransactionType()+JsonUtils.objectToJson(reqBody)+token.getAccessToken()+head.getTimestamp()+token.getAppSecret();
        System.err.println("待签名字符串:"+signStr);
        String sign = Md5Util.md5(signStr);
        System.err.println("md5签名:"+sign);
        if(!StringUtils.equals(sign,head.getSign()))
            LOGGER.warn("[]:token ---",ProtocolCodeMsg.SIGN_ERROR.getMsg(),sign);
            return buildErrMsg(result,ProtocolCodeMsg.SIGN_ERROR.getCode(),ProtocolCodeMsg.SIGN_ERROR.getMsg(),head);
        
        return null;
    

 

 business代码分两部分

技术图片

 

 BaseBiz:所有的business实现该接口,这个接口只做两件事,1-参数校验,2-处理业务,感觉这一步可以规范各个开发人员的行为,所以每个人写出来的代码,都是一样的套路,看起来会很整洁

  

/**
 * 所有的biz类实现此接口
 */
public interface BaseBiz 

    /**
     * 参数校验
     * @param paramMap
     * @return
     */
    Map<String, Object> validateParam(Map<String,String> paramMap) throws BusinessException;


    /**
     * 处理业务逻辑
     * @param head
     * @param body
     * @return
     * @throws BusinessException
     */
    Map<String, Object> processLogic(HeadBean head,Map<String,String> body) throws BusinessException;

 

   一个business实现类:business只干两件事,参数校验、执行业务逻辑,所以项目里business类会多些,但是那些请求request类,都省了。

    @Authentication(value = true) 是我定义的一个注解,标识该接口是否需要登录,暂时只能这样搞了,看着一个business上有两个注解很不爽,以后考虑自定义一个注解,兼顾把business成为spring的bean的功能,就能省去@Component注解了。

/**
 * 获取会员信息,需要登录
 */
@Authentication(value = true)
@Component("10130102")
public class MemberInfoBizImpl implements BaseBiz 


    @Autowired
    private IMemberService memberService;

    @Autowired
    private ITokenService tokenService;


    @Override
    public Map<String, Object> validateParam(Map<String, String> paramMap) throws BusinessException 
        Map<String, Object> resultMap = new HashMap<>();

        // 校验会员id
        String memberId = paramMap.get("memberId");
        if(Strings.isNullOrEmpty(memberId))
            resultMap.put("resCode", ProtocolCodeMsg.REQUEST_USER_MESSAGE_ERROR.getCode());
            resultMap.put("message", ProtocolCodeMsg.REQUEST_USER_MESSAGE_ERROR.getMsg());
            return resultMap;
        
        return null;
    

    @Override
    public Map<String, Object> processLogic(HeadBean head, Map<String, String> body) throws BusinessException 
        Map<String, Object> map = new HashMap<>();
        String memberId = body.get("memberId");
        Member member = memberService.selectById(memberId);
        if(member == null)
            map.put("resCode", ProtocolCodeMsg.USER_NOT_EXIST.getCode());
            map.put("message", ProtocolCodeMsg.USER_NOT_EXIST.getMsg());
            return map;
        
        map.put("memberId",member.getId());//会员id
        map.put("username",member.getUsername());//用户名
        return map;
    

关于接口安全:

1、基于Token安全机制认证
  a. 登陆鉴权
  b. 防止业务参数篡改
  c. 保护用户敏感信息
  d. 防签名伪造
2、Token 认证机制整体架构
  整体架构分为Token生成与认证两部分:
  1. Token生成指在登陆成功之后生成 Token 和密钥,并其与用户隐私信息、客户端信息一起存储至Token
  表,同时返回Token 与Secret 至客户端。
  2. Token认证指客户端请求黑名单接口时,认证中心基于Token生成签名

技术图片

Token表结构说明:

技术图片

具体代码看 github:感觉给你带来了一点用处的话,给个小星星吧谢谢

  https://github.com/lhy1234/NB-api

 

 

 

 

 

  

 

以上是关于怎样制作,编程码,写自己想说的话的主要内容,如果未能解决你的问题,请参考以下文章

怎样制作属于自己的电子书(TXT)然后转成APK?本人是DIY发烧友

用GO把你想说的话写到比特币链上

怎么制作系统盘镜像?

第一次制作中秋博饼小游戏的心得与吐槽(软件工程)

怎样制作二维码付款

魅族手机主题怎么制作?