精华内容
下载资源
问答
  • 1. 开放性问题 可以从一开始的点进行问:您看到什么?您感觉如何? 2. 封闭性问题 ...4. 了解对方的身份 更好的与需求结合. 在与客户刚开始谈话时,可以问一些了解客户身份的问题,例如对方姓名、账号、电

    1. 开放性问题

    可以从一开始的点进行问:您看到什么?您感觉如何?

    2. 封闭性问题

    目的是确认某种事实、客户的观点、希望或反映的情况。问这种问题可以更快地发现问题,找出问题的症结所在。
    将理解对方的需求通过自己总结向对方讲解,明确自己是否理解正确.

    3. 询问其他要求的问题

    为了挖掘对方更深层的需求.
    与客户交流的最后,您还可以问他还需要哪些服务。例如“先生,还有没有其他我们能为您做的?”

    4. 了解对方的身份

    更好的与需求结合.
    在与客户刚开始谈话时,可以问一些了解客户身份的问题,例如对方姓名、账号、电话号码等。目的是获得解决问题所需要的信息。

    5. 有结果的反馈的问题

    确认对方满意\舒服程度,以方便明确知道自己还有哪些地方\空间可以改善,提升.
    记住每一次的交流都要完成一次自我迭代,自我反省,这样才能有所成长.

    前辈:
    sohu.com/a/196821547_99937145

    展开全文
  • 如何快速阅读源码

    2019-08-01 19:05:09
    如果源码有注释,那么从注释中就可以完全了解对方是想干什么了。反之,执行第2步。 从源码的分段情况可以看出对方实现这个事情大概分了几步。 最后再由粗及细的看每一步都具体做了哪些事情,相信这样一两遍下来...

    阅读源码方法

    1. 如果源码有注释,那么从注释中就可以完全了解对方是想干什么了。反之,执行第2步。

    2. 从源码的分段情况可以看出对方实现这个事情大概分了几步。

    3. 最后再由粗及细的看每一步都具体做了哪些事情,相信这样一两遍下来对方是做什么的心里肯定有个数了,如果还有点小疑问,相信再过几遍代码基本上都差不多熟悉了。

    4. 放空自己,不再是创造者,融入别人的源码之中,收获会更多。

    QA

    • 实际开发中,看别人的代码心态爆炸,看不懂,很烦。
      关键是不了解业务逻辑,无论代码多绕,万变不离业务逻辑。所以一定要理解业务逻辑。
    展开全文
  • 如何快速实现一个聊天室? 前些天做了一个网站:https://modubox.cn 其中有个群聊插件,许多人问如何实现的。这里简单说下,为了快速完成群聊功能,我选择从最简单的 WebSocket 开始。 什么是WebSocket ? 既然要...

    如何快速实现一个聊天室?

    聊天室

    前些天做了一个网站:https://modubox.cn 其中有个群聊插件,许多人问如何实现的。这里简单说下,为了快速完成群聊功能,我选择从最简单的 WebSocket 开始。

    什么是WebSocket ?

    既然要使用它,就需要了解一下它吧。WebSocket其实也是一种基于TCP的网络协议,它与HTTP协议最大的不同是:是一种双向通信协议,在建立连接后,WebSocket服务器端和客户端都能主动向对方发送或接收数据,而HTTP协议只能客户端主动发起通信。

    所以WebSocket能够用于聊天,当然其他地方也能应用,如果做客服系统或推送消息都可以从这里开始。

    如何实现单聊/群聊?

    群聊:所有客户端的消息发送到服务器,服务端将消息发送给所有客户端。

    单聊:WebSocket客户端之间是无法直接通信的,想要通信,必须由服务端转发。

    群聊单聊

    实现

    1. 引入WebSocket的支持

    我们使用当前最流行的Spring Boot框架构建项目,然后引入Spring Boot 对 WebSocket 的支持:

    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    

    2. 开启WebSocket

    @Configuration
    public class WebSocketConfig {
    
        @Bean
        public ServerEndpointExporter serverEndpointExporter() {
            return new ServerEndpointExporter();
        }
    }
    

    3. 服务端

    这里主要有以下几点:

    1. 声明服务端点路径
    2. 存储所有连接用户,等待匹配用户
    3. 连接 onOpen,消息OnMessage,关闭onClose,错误onError 方法
    4. 发送消息给特定连接者
    @ServerEndpoint(value = "/websocket/random/")
    @Component
    public class ChatRandomServer {
        //所有连接
        public static ConcurrentHashMap<String, ChatRandomServer> webSocketSet = new ConcurrentHashMap<>();
        //与某个客户端的连接会话,需要通过它来给客户端发送数据
        private Session session;
        //所有在配对的ID
        private static List<String> webSocketLiveList = new CopyOnWriteArrayList();
        //自己的id标识
        private String id = "";
        //连接对象的id标识
        private String toUser = "";
    
        /**
         * 连接建立成功调用的方法
         */
        @OnOpen
        public void onOpen(Session session) {
            session.setMaxIdleTimeout(3600000);
            this.session = session;
            //获取用户ip
            String ip = IpUtil.getRemoteAddress(session);
            this.id = ip;
            ChatRandomServer put = webSocketSet.put(this.id, this);
            //如果已经在队里,就不去找对象
            if (put == null) {
                try {
                    if (pair()) {
                        sendMessage("匹配成功");
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else {
                try {
                    sendMessage("匹配失败");
                    webSocketSet.remove(this.id); 
                    session.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
            log.info("用户{}加入!当前在线人数为: {}", this.id, webSocketSet.size());
    
        }
    
        /**
         * 连接关闭调用的方法
         */
        @OnClose
        public void onClose() {
            ChatRandomServer UserId = webSocketSet.get(toUser);
            webSocketLiveList.remove(this.id);
            if (UserId != null) {
                try {
                    sendToUser(session, "对方已离开", toUser);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            webSocketSet.remove(this.id);
            log.info("{}连接关闭!当前在线人数:{}, 当前在匹配的人数:{}" ,this.id,webSocketSet.size(), webSocketLiveList.size());
        }
    
        /**
         * 收到客户端消息后调用的方法
         *
         * @param message 客户端发送过来的消息
         */
        @OnMessage
        public void onMessage(String message, Session session) {
            log.info("来自 {} 的消息: {}", this.id, message);
            try {
                ChatRandomServer.sendToUser(session, message, toUser, 2);
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        @OnError
        public void onError(Session session, Throwable error) {
            log.error("发生错误");
            error.printStackTrace();
            try {
                SendSelf(session,"服务器出现错误");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 发送消息给自己
         */
        public void sendMessage(String message) throws IOException {
            SendSelf(this.session, message);
        }
        private static void SendSelf(Session session, String message) throws IOException {
            session.getBasicRemote().sendText(message);
        }
    
        /**
         * 发送信息给指定ID用户
         */
        public static void sendToUser(Session session, String message, String sendUserId) throws IOException {
            ChatRandomServer UserId = webSocketSet.get(sendUserId);
            if (UserId != null) {
                UserId.sendMessage(message);
            } else {
                SendSelf(session, "发送失败");
            }
        }
    
        /**
         * 通知除了自己之外的所有人
         */
        private void sendOnlineCount(String message) {
            for (String key : webSocketSet.keySet()) {
                try {
                    if (key.equals(id)) {
                        continue;
                    }
                    webSocketSet.get(key).sendMessage(message);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 发送信息给所有人
         */
        public void sendToAll(String message) throws IOException {
            for (String key : webSocketSet.keySet()) {
                try {
                    webSocketSet.get(key).sendMessage(message);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        public synchronized boolean pair() throws IOException {
            //是否存在等待匹配的用户
            if (webSocketLiveList.size() > 0) {
                //随机匹配一个
                Random ra = new Random();
                int nextInt = ra.nextInt(webSocketLiveList.size());
                toUser = webSocketLiveList.get(nextInt);
    
                try {
                    ChatRandomServer UserId = webSocketSet.get(toUser);
                    UserId.setToUser(id);
                    sendToUser(session, "配对成功", toUser);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                webSocketLiveList.remove(nextInt);
                return true;
            }
            //没有匹配的,则将自己加入等待匹配队列
            webSocketLiveList.add(id);
            return false;
        }
    }
    

    4. 前端支持

     start: function () {
            if (typeof (WebSocket) === "undefined") {
              alert("您的浏览器不支持socket")
            } else {
              // 实例化socket
              this.socket = new WebSocket(`ws://localhost:8082/websocket/room`);
              // 监听socket连接
              this.socket.onopen = this.open
              // 监听socket错误信息
              this.socket.onerror = this.error
              // 监听socket消息
              this.socket.onmessage = this.getMessage
              this.socket.onclose = this.close
            }
          },
          open: function () {
          },
          error: function () {
          },
          getMessage: function (obj) {
            //接收信息后根据不同情况不同处理方式
            let data = JSON.parse(obj.data);
            if (data.code === 1) {
            } else if (data.code === 2) {
            } else {
            }
          },
          close: function (e) {
          },
    
          doSend: function () {
            if (that.sendData === '') {
              return;
            }
            this.socket.send(that.sendData);
            that.sendData = '';
          },
    

    以上代码不完整,如果需要看下完整代码,联系我。

    展开全文
  • 新老团队如何快速融合? 吴岱妮 2012年12月26日   吴岱妮(Wendy Wu)为顶尖人物集团(New Leaders)中国区总经理、首席顾问,6秒钟国际情商研究机构中国区代表。在过去10年当中,吴女士主要致力于...

    新老团队如何快速融合?

    吴岱妮 2012年12月26日

     

    吴岱妮(Wendy Wu)为顶尖人物集团(New Leaders)中国区总经理、首席顾问,6秒钟国际情商研究机构中国区代表。在过去10年当中,吴女士主要致力于情商领导力培育、帮助企业评鉴人才、搭建人才供应链等咨询工作。
    快速建设一个团队犹如速配。要想结缘还是有些技巧的。你们得能迅速了解对方,达成共识,在真正遇到重大挑战前有克制地交锋。

    Dear Wendy,

    我叫Richard Tian,新近被聘到一家很牛的软件外包公司当CEO。公司创始人想退任做董事会主席,将经营交给我,希望我能将公司带上更高一个台阶——去纽交所上市。这个转变很令我动心。不过,从我上任的第一个月来看,这个转变所带来的挑战比我预想的要多得多。我认为这家公司的决策和做事方式上有很多地方要改,当然它也有很多令我敬仰的DNA。我希望你能给我一些建议,帮我与团队之间尽快建立信任,从而使我能贯彻自己的愿景并进入新角色。

    Dear Wendy,

    我叫Susana Fang,刚加入一家新成立的医药公司担任人力资源总监。这个季度,我们公司招了两位跟我同级别的高管——首席技术官和运营副总。我们的CEO想使高管团队在整体运营方面变得更专业化。昨天傍晚六点,月度管理例会过后,我们的CEO叫我进办公室,他想让我设计一次高管活动来加速团队凝聚。你觉得这可行吗?或者在短期内还有什么别的方法?

    Dear Richard & Susana,

        得知你们两人所在的公司都运营顺利并打算提升管理系统,我很欣慰。我认为你们要干的事近似于在赛车行进时更换发动机,是必须的、让人激动的,但也是令人胆战心惊的。高管定期开会是将团队捆在一起的方法,但是要想将团队快速又持续地捆在一起,我认为有两个关键成功因素:一、CEO得带头,人力资源可以做建导或架构师,但是CEO本人必须为他/她所说的话负责,不然下一个季度的会就更难开了。二、必须覆盖有些核心和敏感的主题,光是比赛喝酒或搞个户外拓展是无济于事的。以下是7个你需要覆盖的主题:

    1. 我们是谁?

        CEO需要诠释或者说厘清一个最核心的问题:我们以前是谁,我们现在是谁,我们将来希望成为谁。我们要从创业家变得更专业化吗?我们要从关注产品变成关注解决方案吗?我们要从本土走向全球吗?还是我们要从B2B 延伸到B2C市场?这是一个难得的机会,它可以让我们弄清楚为什么要聘新的管理团队和CEO。

    2. 我们要去哪儿?

        接下来的一个重要问题是:我们要向何处去?我们公司的愿景是什么?我们要做到最大吗?我们要做500强吗?我们要去香港上市吗?我们要做最酷的公司吗?我们要做跨国公司的前三名最优客户吗?我们要做最受尊敬的雇主吗?还是最有价值的品牌?

    3. 我们为什么在此?

        在这个环节,CEO要与创始人一起规划公司的使命。如果使命不够鼓舞人,你也许需要一些真实的故事做背书或重新规划。人们不光需要目标和财务收益,还需要知道为什么,这样才能驱动每个人突破现有资源和界限。比如,你在此是为了给中国家庭带来健康和幸福的吗?你在此是为了帮助中国工程师提升到全球水准吗?这一部分对一群高管而言有点“软”,但是清晰地明确和界定每个人的日常工作很重要,尤其是在面对很多变化,不确定和压力时。这么做就是在锚定我们的所在。许多人可能会说应该将这一部分放到第一部分去。如果是在平时,这么做是可以的。但是你的团队在现在这个时刻,我建议你还是在第三阶段做这事,因为要进入到这些深入和柔软的话题,之前你们得有些共同的立场。

    4. 如何抵达?

        在这个环节,CEO需要设计一张战略地图,并与团队沟通,以说服团队为什么这张地图可以带领我们实现愿景。通常,你需要划出战役所在,而且要拿出制胜的战略。你还要归纳我们要进行的变革,针对所有职能部门的关键变革,你都得界定怎么样才算变革成功。

    5. 整个团队如何“体无完肤”地一起抵达?

        行动之前,你最好能先进行一次个人和组织心理测试,让外部建导师了解团队的优势和弱势。你要设计一些活动,让大家了解各自喜欢的沟通方式、决策方式和工作风格。当然,更重要的是,所有管理成员都要说“什么会打扰到你”、“什么会降低你的决策质量”、“承受压力时你需要什么样行为和情感支持?”如果做好了,这个环节很感性,但很好玩。

    6. 练习如何“吵架”

        团队发展有四步——组建、冲突、观念和表现。你们都已过了组建阶段,如果你们团队想尽快加深融合,你们就要在活动中设计一个“风暴事件”。不过为了安全起见,我们将此称为“有克制地交锋”,就像中国人常说的“不打不相识”。你可以选一件大家有强烈分歧、各执己见的事,然后直接进入讨论,不过讨论时,要有一个大家都接受的指导原则,还要有一个大家都接受的决策流程。这个活动是最关键的环节,你能立马看到团队如何建立彼此信任。如果你是新CEO, 就不能让自己也牵扯其中,不过你要参与最终决策环节,你还要说出你这么做的原因。这个方法很简单,也很安全,可以让团队感受到你的信任和授权。

    7. 同意游戏规则

        你有不同的方法可以做到这点。一个方法是你可以在第6步时,当大家辩论某个敏感话题前先宣布,然后最后做个总结。另一个方法是让新管理团队基于公司现有的价值观,一起重新定义公司的价值观或者行为准则。如果你有时间,我强烈建议你选第二个方法。这个方法能有效地将每个人的领导方式、语言和边界统一起来。统一之后,你们还要就团队如何做决策、如果遇到灰色地带怎么办、如何向员工、客户和董事会展示价值信念等问题给出明确答案。

        总之,快速建设一个团队犹如速配。要想结缘还是有些技巧的。简而言之,你们得能迅速了解对方,得对大家要做的事、要去的地方以及如何去达成共识,最后还要在真正遇到重大挑战前有克制地交锋,而且知道为什么交锋。如果你们对那些问题有同样的答案,我认为你们之间的缘分就是有希望的。

        Good luck!

        Wendy

    展开全文
  • 如何快速理解其他人写的Java代码

    千次阅读 2008-09-19 04:49:00
    那么如何快速的去读懂对方的Java代码呢,了解对方思想.我认为应该有这几方面的技巧和知识:1.在读对方代码的同时,自己为对方写TestCase,这是检验是否正确理解对方代码含义的一个非常有效的方法. 
  • 了解代码整体架构,如果条件允许最好找了解工程的人讲一下结构顺便请教一下对方整个工程的实现逻辑,这样会快很多。 了解代码目标用户群体,以便熟悉之后发现代码工程是否可针对目标用户进行优化 尝试运行代码 代
  • 在使用邮箱时当收到过系统退信,会收到一连串的提示英文,却不明白具体含义,导致后续与客户的邮件沟通受阻,如何快速判别退信内容并处理呢? 550 xxx@xxx.xxx.xx.xx…User unknow 如果你看到退信代码是这样的,请...
  • 那么如何快速的去读懂对方的Java代码呢,了解对方思想.我认为应该有这几方面的技巧和知识: 1.在读对方代码的同时,自己为对方写TestCase,这是检验是否正确理解对方代码含义的一个非常有效的方法.
  • 面试官技巧-快速面试

    2017-02-04 10:49:24
    如何快速了解一个人? 自我介绍 一般面试官的套路都是从自我介绍开始,(二逼面试官才直接进入主题。哈哈),这个时候可以听一下对方的说话语速。判断这个人属于什么个性的人。且也可以看出来是否准备有充分。 项目...
  • 如何快速实现中文翻译多国语言?这是从事外贸工作的人经常需要去面对的问题。因为你每天都要面对来自全球各地的外国人,但是自己肯定无法掌握各国语言。所以今天小编就为大家带来一个快速完成中文翻译多国语言的方法...
  • 很多人都会为了微信QQ等社交平台来聊天,从而放弃了面对面的了解机会。 现阶段很多男生因为长时间脱离社交平台,而不懂如何能够和异性做朋友,不知道找什么话题。接下来我简单的来为男士提供5个能够快速和异性交流...
  • 一方面彼此互相能快速了解沟通意图,另一方面沟通后有留档便于查阅。  3.预约别人的沟通时间,具体到分钟,避免打断对方的工作。避免长时间的会议沟通。  4.有明确目标的沟通,自己做好事前准备,带着目标去沟通...
  • 现在市面上很多商城系统,如果开发者有商城系统的需求,那么可以用...集成之前先了解对方的公司,最怕数据混乱,代码也一般。如果太年轻的公司不建议选择,因为他们往往是跟风做的系统软件,对电商市场没有深入的了解
  • 想要快速把自己产品推出去,要么就是花费大量的时间精力去做免费的引流,比如贴吧,APP引流,微博等等。要么就是烧钱去做线上推广,而我们做的最多的就是竞价推广。 竞价推广烧钱快,但是见效也快,但是很多人可能...
  • 前言: 与其每天浑水摸鱼、浑浑噩噩,不如多进阶学习,提升自己的竞争力。 Android中高级必会知识点: 一、性能优化 ...面试中面试官的问题,也很可以直观的让你了解对方公司的技术水平和业务需求,
  • SpringBoot集成多数据源

    千次阅读 2017-11-09 13:03:39
    一,前面我们介绍了springboot的快速启动,大家肯定对springboot也有所了解,下面我们来介绍一下springboot怎么集成多数据源。 在有的项目开发中需要在一个项目中访问多个数据源或者两个项目之间通信(实质上是互相...
  • 核心代码:该部分需要开发者了解整个框架的架构,遵循已有代码规范进行bug修复或提交新功能 文档部分:需要以清晰明了的语句书写文档,力求简单易读,授人以鱼同时更授人以渔 社区建设:如果框架帮助到了您,希望您...
  • Pathos.io-crx插件

    2021-03-14 01:10:31
    换个角度,更好地了解对方。 版本0.36:修复了错误! 版本0.30:增加了对性别,政治和自定义模式的支持(单击交换行旁边的图标),以及可以与朋友共享的链接。 支持语言:English (United States)
  • 自动化测试面试题库

    2019-01-29 22:03:00
    常规问题1、如何快速深入的了解移动互联网领域的应用(答案:看http协议restfulapi知识json加1分)2、对xx应用自己会花多久可以在业务上从入门到精通,说说自己的方法(答案:看api和数据库的加1分)3、如果在没有QA...
  • 工作中,上传下达是重要的沟通环节,掌握高效的邮件管理的方法,可以快速了解下属的工作进展,也可以快速同步给上级,时刻保持主动性。用了好多年电子邮件了,你真的了解如何使用吗? 一、建立良好的邮件管理框架 不...
  • 婚恋交友平台风控的重点主要是要对注册用户身份进行核实,将高风险用户排除在平台之外,同时帮助交友双方更加真实、准确的了解对方身份信息,从而杜绝感情欺诈风险事件的发生。那么,婚恋交友平台如何快速的核实注册...
  • Tips系列之飞书日历

    千次阅读 2019-11-08 10:00:17
    你可以订阅同事的日历,查看对方的忙闲状态,省去反复沟通的麻烦,快速找到空闲时间并邀约会议。 如何订阅日历 方法一:在日历侧边栏搜索订阅 在日历侧边栏的搜索框里搜索想订阅的联系人、会议室或公共日历 2. ...
  • 面试应答

    2018-07-13 13:32:04
    面试在我看来便是如何在有限的时间中让对方更好的了解你、认识你、认可你。于此你便成功了。那么,针对于我们IT技术面试而言应该如何做呢?一、技术准备(那些技术呢?)数据结构和算法:数据结构很多人都可能对此...
  • 国家电网最新招聘计划公告发布,报名窗口期很短,相信很多朋友已经...今天小编就告诉大家如何避坑,快速抢占先机完成国家电网的在线招聘报名,报名的早晚也是对方考察录取的一方面哦! 首先,我们需要了解...

空空如也

空空如也

1 2 3 4
收藏数 73
精华内容 29
关键字:

如何快速了解对方